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

📄 qla1280.c

📁 linux 内核源代码
💻 C
📖 第 1 页 / 共 5 页
字号:
/*******************************************************************************                  QLOGIC LINUX SOFTWARE** QLogic  QLA1280 (Ultra2)  and  QLA12160 (Ultra3) SCSI driver* Copyright (C) 2000 Qlogic Corporation (www.qlogic.com)* Copyright (C) 2001-2004 Jes Sorensen, Wild Open Source Inc.* Copyright (C) 2003-2004 Christoph Hellwig** This program is free software; you can redistribute it and/or modify it* under the terms of the GNU General Public License as published by the* Free Software Foundation; either version 2, or (at your option) any* later version.** This program is distributed in the hope that it will be useful, but* WITHOUT ANY WARRANTY; without even the implied warranty of* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU* General Public License for more details.*******************************************************************************/#define QLA1280_VERSION      "3.26"/*****************************************************************************    Revision History:    Rev  3.26, January 16, 2006 Jes Sorensen	- Ditch all < 2.6 support    Rev  3.25.1, February 10, 2005 Christoph Hellwig	- use pci_map_single to map non-S/G requests	- remove qla1280_proc_info    Rev  3.25, September 28, 2004, Christoph Hellwig	- add support for ISP1020/1040	- don't include "scsi.h" anymore for 2.6.x    Rev  3.24.4 June 7, 2004 Christoph Hellwig	- restructure firmware loading, cleanup initialization code	- prepare support for ISP1020/1040 chips    Rev  3.24.3 January 19, 2004, Jes Sorensen	- Handle PCI DMA mask settings correctly	- Correct order of error handling in probe_one, free_irq should not	  be called if request_irq failed    Rev  3.24.2 January 19, 2004, James Bottomley & Andrew Vasquez	- Big endian fixes (James)	- Remove bogus IOCB content on zero data transfer commands (Andrew)    Rev  3.24.1 January 5, 2004, Jes Sorensen	- Initialize completion queue to avoid OOPS on probe	- Handle interrupts during mailbox testing    Rev  3.24 November 17, 2003, Christoph Hellwig    	- use struct list_head for completion queue	- avoid old Scsi_FOO typedefs	- cleanup 2.4 compat glue a bit	- use <scsi/scsi_*.h> headers on 2.6 instead of "scsi.h"	- make initialization for memory mapped vs port I/O more similar	- remove broken pci config space manipulation	- kill more cruft	- this is an almost perfect 2.6 scsi driver now! ;)    Rev  3.23.39 December 17, 2003, Jes Sorensen	- Delete completion queue from srb if mailbox command failed to	  to avoid qla1280_done completeting qla1280_error_action's	  obsolete context	- Reduce arguments for qla1280_done    Rev  3.23.38 October 18, 2003, Christoph Hellwig	- Convert to new-style hotplugable driver for 2.6	- Fix missing scsi_unregister/scsi_host_put on HBA removal	- Kill some more cruft    Rev  3.23.37 October 1, 2003, Jes Sorensen	- Make MMIO depend on CONFIG_X86_VISWS instead of yet another	  random CONFIG option	- Clean up locking in probe path    Rev  3.23.36 October 1, 2003, Christoph Hellwig	- queuecommand only ever receives new commands - clear flags	- Reintegrate lost fixes from Linux 2.5    Rev  3.23.35 August 14, 2003, Jes Sorensen	- Build against 2.6    Rev  3.23.34 July 23, 2003, Jes Sorensen	- Remove pointless TRUE/FALSE macros	- Clean up vchan handling    Rev  3.23.33 July 3, 2003, Jes Sorensen	- Don't define register access macros before define determining MMIO.	  This just happend to work out on ia64 but not elsewhere.	- Don't try and read from the card while it is in reset as	  it won't respond and causes an MCA    Rev  3.23.32 June 23, 2003, Jes Sorensen	- Basic support for boot time arguments    Rev  3.23.31 June 8, 2003, Jes Sorensen	- Reduce boot time messages    Rev  3.23.30 June 6, 2003, Jes Sorensen	- Do not enable sync/wide/ppr before it has been determined	  that the target device actually supports it	- Enable DMA arbitration for multi channel controllers    Rev  3.23.29 June 3, 2003, Jes Sorensen	- Port to 2.5.69    Rev  3.23.28 June 3, 2003, Jes Sorensen	- Eliminate duplicate marker commands on bus resets	- Handle outstanding commands appropriately on bus/device resets    Rev  3.23.27 May 28, 2003, Jes Sorensen	- Remove bogus input queue code, let the Linux SCSI layer do the work	- Clean up NVRAM handling, only read it once from the card	- Add a number of missing default nvram parameters    Rev  3.23.26 Beta May 28, 2003, Jes Sorensen	- Use completion queue for mailbox commands instead of busy wait    Rev  3.23.25 Beta May 27, 2003, James Bottomley	- Migrate to use new error handling code    Rev  3.23.24 Beta May 21, 2003, James Bottomley	- Big endian support	- Cleanup data direction code    Rev  3.23.23 Beta May 12, 2003, Jes Sorensen	- Switch to using MMIO instead of PIO    Rev  3.23.22 Beta April 15, 2003, Jes Sorensen	- Fix PCI parity problem with 12160 during reset.    Rev  3.23.21 Beta April 14, 2003, Jes Sorensen	- Use pci_map_page()/pci_unmap_page() instead of map_single version.    Rev  3.23.20 Beta April 9, 2003, Jes Sorensen	- Remove < 2.4.x support	- Introduce HOST_LOCK to make the spin lock changes portable.	- Remove a bunch of idiotic and unnecessary typedef's	- Kill all leftovers of target-mode support which never worked anyway    Rev  3.23.19 Beta April 11, 2002, Linus Torvalds	- Do qla1280_pci_config() before calling request_irq() and	  request_region()	- Use pci_dma_hi32() to handle upper word of DMA addresses instead	  of large shifts	- Hand correct arguments to free_irq() in case of failure    Rev  3.23.18 Beta April 11, 2002, Jes Sorensen	- Run source through Lindent and clean up the output    Rev  3.23.17 Beta April 11, 2002, Jes Sorensen	- Update SCSI firmware to qla1280 v8.15.00 and qla12160 v10.04.32    Rev  3.23.16 Beta March 19, 2002, Jes Sorensen	- Rely on mailbox commands generating interrupts - do not	  run qla1280_isr() from ql1280_mailbox_command()	- Remove device_reg_t	- Integrate ql12160_set_target_parameters() with 1280 version	- Make qla1280_setup() non static	- Do not call qla1280_check_for_dead_scsi_bus() on every I/O request	  sent to the card - this command pauses the firmare!!!    Rev  3.23.15 Beta March 19, 2002, Jes Sorensen	- Clean up qla1280.h - remove obsolete QL_DEBUG_LEVEL_x definitions	- Remove a pile of pointless and confusing (srb_t **) and	  (scsi_lu_t *) typecasts	- Explicit mark that we do not use the new error handling (for now)	- Remove scsi_qla_host_t and use 'struct' instead	- Remove in_abort, watchdog_enabled, dpc, dpc_sched, bios_enabled,	  pci_64bit_slot flags which weren't used for anything anyway	- Grab host->host_lock while calling qla1280_isr() from abort()	- Use spin_lock()/spin_unlock() in qla1280_intr_handler() - we	  do not need to save/restore flags in the interrupt handler	- Enable interrupts early (before any mailbox access) in preparation	  for cleaning up the mailbox handling    Rev  3.23.14 Beta March 14, 2002, Jes Sorensen	- Further cleanups. Remove all trace of QL_DEBUG_LEVEL_x and replace	  it with proper use of dprintk().	- Make qla1280_print_scsi_cmd() and qla1280_dump_buffer() both take	  a debug level argument to determine if data is to be printed	- Add KERN_* info to printk()    Rev  3.23.13 Beta March 14, 2002, Jes Sorensen	- Significant cosmetic cleanups	- Change debug code to use dprintk() and remove #if mess    Rev  3.23.12 Beta March 13, 2002, Jes Sorensen	- More cosmetic cleanups, fix places treating return as function	- use cpu_relax() in qla1280_debounce_register()    Rev  3.23.11 Beta March 13, 2002, Jes Sorensen	- Make it compile under 2.5.5    Rev  3.23.10 Beta October 1, 2001, Jes Sorensen	- Do no typecast short * to long * in QL1280BoardTbl, this	  broke miserably on big endian boxes    Rev  3.23.9 Beta September 30, 2001, Jes Sorensen	- Remove pre 2.2 hack for checking for reentrance in interrupt handler	- Make data types used to receive from SCSI_{BUS,TCN,LUN}_32	  unsigned int to match the types from struct scsi_cmnd    Rev  3.23.8 Beta September 29, 2001, Jes Sorensen	- Remove bogus timer_t typedef from qla1280.h	- Remove obsolete pre 2.2 PCI setup code, use proper #define's	  for PCI_ values, call pci_set_master()	- Fix memleak of qla1280_buffer on module unload	- Only compile module parsing code #ifdef MODULE - should be	  changed to use individual MODULE_PARM's later	- Remove dummy_buffer that was never modified nor printed	- ENTER()/LEAVE() are noops unless QL_DEBUG_LEVEL_3, hence remove	  #ifdef QL_DEBUG_LEVEL_3/#endif around ENTER()/LEAVE() calls	- Remove \r from print statements, this is Linux, not DOS	- Remove obsolete QLA1280_{SCSILU,INTR,RING}_{LOCK,UNLOCK}	  dummy macros	- Remove C++ compile hack in header file as Linux driver are not	  supposed to be compiled as C++	- Kill MS_64BITS macro as it makes the code more readable	- Remove unnecessary flags.in_interrupts bit    Rev  3.23.7 Beta August 20, 2001, Jes Sorensen	- Dont' check for set flags on q->q_flag one by one in qla1280_next()        - Check whether the interrupt was generated by the QLA1280 before          doing any processing	- qla1280_status_entry(): Only zero out part of sense_buffer that	  is not being copied into	- Remove more superflouous typecasts	- qla1280_32bit_start_scsi() replace home-brew memcpy() with memcpy()    Rev  3.23.6 Beta August 20, 2001, Tony Luck, Intel        - Don't walk the entire list in qla1280_putq_t() just to directly	  grab the pointer to the last element afterwards    Rev  3.23.5 Beta August 9, 2001, Jes Sorensen	- Don't use IRQF_DISABLED, it's use is deprecated for this kinda driver    Rev  3.23.4 Beta August 8, 2001, Jes Sorensen	- Set dev->max_sectors to 1024    Rev  3.23.3 Beta August 6, 2001, Jes Sorensen	- Provide compat macros for pci_enable_device(), pci_find_subsys()	  and scsi_set_pci_device()	- Call scsi_set_pci_device() for all devices	- Reduce size of kernel version dependent device probe code	- Move duplicate probe/init code to separate function	- Handle error if qla1280_mem_alloc() fails	- Kill OFFSET() macro and use Linux's PCI definitions instead        - Kill private structure defining PCI config space (struct config_reg)	- Only allocate I/O port region if not in MMIO mode	- Remove duplicate (unused) sanity check of sife of srb_t    Rev  3.23.2 Beta August 6, 2001, Jes Sorensen	- Change home-brew memset() implementations to use memset()        - Remove all references to COMTRACE() - accessing a PC's COM2 serial          port directly is not legal under Linux.    Rev  3.23.1 Beta April 24, 2001, Jes Sorensen        - Remove pre 2.2 kernel support        - clean up 64 bit DMA setting to use 2.4 API (provide backwards compat)        - Fix MMIO access to use readl/writel instead of directly          dereferencing pointers        - Nuke MSDOS debugging code        - Change true/false data types to int from uint8_t        - Use int for counters instead of uint8_t etc.        - Clean up size & byte order conversion macro usage    Rev  3.23 Beta January 11, 2001 BN Qlogic        - Added check of device_id when handling non          QLA12160s during detect().    Rev  3.22 Beta January 5, 2001 BN Qlogic        - Changed queue_task() to schedule_task()          for kernels 2.4.0 and higher.          Note: 2.4.0-testxx kernels released prior to                the actual 2.4.0 kernel release on January 2001                will get compile/link errors with schedule_task().                Please update your kernel to released 2.4.0 level,                or comment lines in this file flagged with  3.22                to resolve compile/link error of schedule_task().        - Added -DCONFIG_SMP in addition to -D__SMP__          in Makefile for 2.4.0 builds of driver as module.    Rev  3.21 Beta January 4, 2001 BN Qlogic        - Changed criteria of 64/32 Bit mode of HBA          operation according to BITS_PER_LONG rather          than HBA's NVRAM setting of >4Gig memory bit;          so that the HBA auto-configures without the need          to setup each system individually.    Rev  3.20 Beta December 5, 2000 BN Qlogic        - Added priority handling to IA-64  onboard SCSI          ISP12160 chip for kernels greater than 2.3.18.        - Added irqrestore for qla1280_intr_handler.        - Enabled /proc/scsi/qla1280 interface.        - Clear /proc/scsi/qla1280 counters in detect().    Rev  3.19 Beta October 13, 2000 BN Qlogic        - Declare driver_template for new kernel          (2.4.0 and greater) scsi initialization scheme.        - Update /proc/scsi entry for 2.3.18 kernels and          above as qla1280    Rev  3.18 Beta October 10, 2000 BN Qlogic        - Changed scan order of adapters to map          the QLA12160 followed by the QLA1280.    Rev  3.17 Beta September 18, 2000 BN Qlogic        - Removed warnings for 32 bit 2.4.x compiles        - Corrected declared size for request and response          DMA addresses that are kept in each ha    Rev. 3.16 Beta  August 25, 2000   BN  Qlogic        - Corrected 64 bit addressing issue on IA-64          where the upper 32 bits were not properly          passed to the RISC engine.    Rev. 3.15 Beta  August 22, 2000   BN  Qlogic        - Modified qla1280_setup_chip to properly load          ISP firmware for greater that 4 Gig memory on IA-64    Rev. 3.14 Beta  August 16, 2000   BN  Qlogic        - Added setting of dma_mask to full 64 bit          if flags.enable_64bit_addressing is set in NVRAM    Rev. 3.13 Beta  August 16, 2000   BN  Qlogic        - Use new PCI DMA mapping APIs for 2.4.x kernel    Rev. 3.12       July 18, 2000    Redhat & BN Qlogic        - Added check of pci_enable_device to detect() for 2.3.x        - Use pci_resource_start() instead of          pdev->resource[0].start in detect() for 2.3.x        - Updated driver version    Rev. 3.11       July 14, 2000    BN  Qlogic	- Updated SCSI Firmware to following versions:	  qla1x80:   8.13.08	  qla1x160:  10.04.08	- Updated driver version to 3.11    Rev. 3.10    June 23, 2000   BN Qlogic        - Added filtering of AMI SubSys Vendor ID devices    Rev. 3.9        - DEBUG_QLA1280 undefined and  new version  BN Qlogic    Rev. 3.08b      May 9, 2000    MD Dell        - Added logic to check against AMI subsystem vendor ID	Rev. 3.08       May 4, 2000    DG  Qlogic        - Added logic to check for PCI subsystem ID.	Rev. 3.07       Apr 24, 2000    DG & BN  Qlogic	   - Updated SCSI Firmware to following versions:	     qla12160:   10.01.19		 qla1280:     8.09.00	Rev. 3.06       Apr 12, 2000    DG & BN  Qlogic	   - Internal revision; not released    Rev. 3.05       Mar 28, 2000    DG & BN  Qlogic       - Edit correction for virt_to_bus and PROC.    Rev. 3.04       Mar 28, 2000    DG & BN  Qlogic       - Merge changes from ia64 port.    Rev. 3.03       Mar 28, 2000    BN  Qlogic       - Increase version to reflect new code drop with compile fix         of issue with inclusion of linux/spinlock for 2.3 kernels    Rev. 3.02       Mar 15, 2000    BN  Qlogic       - Merge qla1280_proc_info from 2.10 code base    Rev. 3.01       Feb 10, 2000    BN  Qlogic       - Corrected code to compile on a 2.2.x kernel.    Rev. 3.00       Jan 17, 2000    DG  Qlogic	   - Added 64-bit support.    Rev. 2.07       Nov 9, 1999     DG  Qlogic	   - Added new routine to set target parameters for ISP12160.    Rev. 2.06       Sept 10, 1999     DG  Qlogic       - Added support for ISP12160 Ultra 3 chip.    Rev. 2.03       August 3, 1999    Fred Lewis, Intel DuPont	- Modified code to remove errors generated when compiling with	  Cygnus IA64 Compiler.        - Changed conversion of pointers to unsigned longs instead of integers.        - Changed type of I/O port variables from uint32_t to unsigned long.        - Modified OFFSET macro to work with 64-bit as well as 32-bit.        - Changed sprintf and printk format specifiers for pointers to %p.        - Changed some int to long type casts where needed in sprintf & printk.        - Added l modifiers to sprintf and printk format specifiers for longs.        - Removed unused local variables.    Rev. 1.20       June 8, 1999      DG,  Qlogic         Changes to support RedHat release 6.0 (kernel 2.2.5).       - Added SCSI exclusive access lock (io_request_lock) when accessing         the adapter.       - Added changes for the new LINUX interface template. Some new error         handling routines have been added to the template, but for now we         will use the old ones.    -   Initial Beta Release.*****************************************************************************/#include <linux/module.h>#include <linux/version.h>#include <linux/types.h>#include <linux/string.h>#include <linux/errno.h>#include <linux/kernel.h>#include <linux/ioport.h>#include <linux/delay.h>#include <linux/timer.h>#include <linux/pci.h>#include <linux/proc_fs.h>#include <linux/stat.h>#include <linux/slab.h>#include <linux/pci_ids.h>#include <linux/interrupt.h>#include <linux/init.h>#include <linux/dma-mapping.h>#include <asm/io.h>#include <asm/irq.h>#include <asm/byteorder.h>#include <asm/processor.h>#include <asm/types.h>#include <asm/system.h>#include <scsi/scsi.h>#include <scsi/scsi_cmnd.h>#include <scsi/scsi_device.h>#include <scsi/scsi_host.h>#include <scsi/scsi_tcq.h>#if defined(CONFIG_IA64_GENERIC) || defined(CONFIG_IA64_SGI_SN2)#include <asm/sn/io.h>#endif#if LINUX_VERSION_CODE < 0x020600#error "Kernels older than 2.6.0 are no longer supported"#endif/* * Compile time Options: *            0 - Disable and 1 - Enable */#define  DEBUG_QLA1280_INTR	0#define  DEBUG_PRINT_NVRAM	0#define  DEBUG_QLA1280		0/* * The SGI VISWS is broken and doesn't support MMIO ;-( */#ifdef CONFIG_X86_VISWS#define	MEMORY_MAPPED_IO	0#else#define	MEMORY_MAPPED_IO	1#endif#define UNIQUE_FW_NAME#include "qla1280.h"#include "ql12160_fw.h"		/* ISP RISC codes */#include "ql1280_fw.h"#include "ql1040_fw.h"#ifndef BITS_PER_LONG#error "BITS_PER_LONG not defined!"#endif#if (BITS_PER_LONG == 64) || defined CONFIG_HIGHMEM#define QLA_64BIT_PTR	1#endif#ifdef QLA_64BIT_PTR#define pci_dma_hi32(a)			((a >> 16) >> 16)#else#define pci_dma_hi32(a)			0#endif

⌨️ 快捷键说明

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