mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-12-14 14:34:28 +08:00
1a59d1b8e0
Based on 1 normalized pattern(s): 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 of the license 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 you should have received a copy of the gnu general public license along with this program if not write to the free software foundation inc 59 temple place suite 330 boston ma 02111 1307 usa extracted by the scancode license scanner the SPDX license identifier GPL-2.0-or-later has been chosen to replace the boilerplate/reference in 1334 file(s). Signed-off-by: Thomas Gleixner <tglx@linutronix.de> Reviewed-by: Allison Randal <allison@lohutok.net> Reviewed-by: Richard Fontana <rfontana@redhat.com> Cc: linux-spdx@vger.kernel.org Link: https://lkml.kernel.org/r/20190527070033.113240726@linutronix.de Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
203 lines
5.2 KiB
C
203 lines
5.2 KiB
C
/* SPDX-License-Identifier: GPL-2.0-or-later */
|
|
/*
|
|
* Device driver for the SYMBIOS/LSILOGIC 53C8XX and 53C1010 family
|
|
* of PCI-SCSI IO processors.
|
|
*
|
|
* Copyright (C) 1999-2001 Gerard Roudier <groudier@free.fr>
|
|
*
|
|
* This driver is derived from the Linux sym53c8xx driver.
|
|
* Copyright (C) 1998-2000 Gerard Roudier
|
|
*
|
|
* The sym53c8xx driver is derived from the ncr53c8xx driver that had been
|
|
* a port of the FreeBSD ncr driver to Linux-1.2.13.
|
|
*
|
|
* The original ncr driver has been written for 386bsd and FreeBSD by
|
|
* Wolfgang Stanglmeier <wolf@cologne.de>
|
|
* Stefan Esser <se@mi.Uni-Koeln.de>
|
|
* Copyright (C) 1994 Wolfgang Stanglmeier
|
|
*
|
|
* Other major contributions:
|
|
*
|
|
* NVRAM detection and reading.
|
|
* Copyright (C) 1997 Richard Waltham <dormouse@farsrobt.demon.co.uk>
|
|
*
|
|
*-----------------------------------------------------------------------------
|
|
*/
|
|
|
|
#ifndef SYM53C8XX_H
|
|
#define SYM53C8XX_H
|
|
|
|
|
|
/*
|
|
* DMA addressing mode.
|
|
*
|
|
* 0 : 32 bit addressing for all chips.
|
|
* 1 : 40 bit addressing when supported by chip.
|
|
* 2 : 64 bit addressing when supported by chip,
|
|
* limited to 16 segments of 4 GB -> 64 GB max.
|
|
*/
|
|
#define SYM_CONF_DMA_ADDRESSING_MODE CONFIG_SCSI_SYM53C8XX_DMA_ADDRESSING_MODE
|
|
|
|
/*
|
|
* NVRAM support.
|
|
*/
|
|
#if 1
|
|
#define SYM_CONF_NVRAM_SUPPORT (1)
|
|
#endif
|
|
|
|
/*
|
|
* These options are not tunable from 'make config'
|
|
*/
|
|
#if 1
|
|
#define SYM_LINUX_PROC_INFO_SUPPORT
|
|
#define SYM_LINUX_USER_COMMAND_SUPPORT
|
|
#define SYM_LINUX_USER_INFO_SUPPORT
|
|
#define SYM_LINUX_DEBUG_CONTROL_SUPPORT
|
|
#endif
|
|
|
|
/*
|
|
* Also handle old NCR chips if not (0).
|
|
*/
|
|
#define SYM_CONF_GENERIC_SUPPORT (1)
|
|
|
|
/*
|
|
* Allow tags from 2 to 256, default 8
|
|
*/
|
|
#ifndef CONFIG_SCSI_SYM53C8XX_MAX_TAGS
|
|
#define CONFIG_SCSI_SYM53C8XX_MAX_TAGS (8)
|
|
#endif
|
|
|
|
#if CONFIG_SCSI_SYM53C8XX_MAX_TAGS < 2
|
|
#define SYM_CONF_MAX_TAG (2)
|
|
#elif CONFIG_SCSI_SYM53C8XX_MAX_TAGS > 256
|
|
#define SYM_CONF_MAX_TAG (256)
|
|
#else
|
|
#define SYM_CONF_MAX_TAG CONFIG_SCSI_SYM53C8XX_MAX_TAGS
|
|
#endif
|
|
|
|
#ifndef CONFIG_SCSI_SYM53C8XX_DEFAULT_TAGS
|
|
#define CONFIG_SCSI_SYM53C8XX_DEFAULT_TAGS SYM_CONF_MAX_TAG
|
|
#endif
|
|
|
|
/*
|
|
* Anyway, we configure the driver for at least 64 tags per LUN. :)
|
|
*/
|
|
#if SYM_CONF_MAX_TAG <= 64
|
|
#define SYM_CONF_MAX_TAG_ORDER (6)
|
|
#elif SYM_CONF_MAX_TAG <= 128
|
|
#define SYM_CONF_MAX_TAG_ORDER (7)
|
|
#else
|
|
#define SYM_CONF_MAX_TAG_ORDER (8)
|
|
#endif
|
|
|
|
/*
|
|
* Max number of SG entries.
|
|
*/
|
|
#define SYM_CONF_MAX_SG (96)
|
|
|
|
/*
|
|
* Driver setup structure.
|
|
*
|
|
* This structure is initialized from linux config options.
|
|
* It can be overridden at boot-up by the boot command line.
|
|
*/
|
|
struct sym_driver_setup {
|
|
u_short max_tag;
|
|
u_char burst_order;
|
|
u_char scsi_led;
|
|
u_char scsi_diff;
|
|
u_char irq_mode;
|
|
u_char scsi_bus_check;
|
|
u_char host_id;
|
|
|
|
u_char verbose;
|
|
u_char settle_delay;
|
|
u_char use_nvram;
|
|
u_long excludes[8];
|
|
};
|
|
|
|
#define SYM_SETUP_MAX_TAG sym_driver_setup.max_tag
|
|
#define SYM_SETUP_BURST_ORDER sym_driver_setup.burst_order
|
|
#define SYM_SETUP_SCSI_LED sym_driver_setup.scsi_led
|
|
#define SYM_SETUP_SCSI_DIFF sym_driver_setup.scsi_diff
|
|
#define SYM_SETUP_IRQ_MODE sym_driver_setup.irq_mode
|
|
#define SYM_SETUP_SCSI_BUS_CHECK sym_driver_setup.scsi_bus_check
|
|
#define SYM_SETUP_HOST_ID sym_driver_setup.host_id
|
|
#define boot_verbose sym_driver_setup.verbose
|
|
|
|
/*
|
|
* Initial setup.
|
|
*
|
|
* Can be overriden at startup by a command line.
|
|
*/
|
|
#define SYM_LINUX_DRIVER_SETUP { \
|
|
.max_tag = CONFIG_SCSI_SYM53C8XX_DEFAULT_TAGS, \
|
|
.burst_order = 7, \
|
|
.scsi_led = 1, \
|
|
.scsi_diff = 1, \
|
|
.irq_mode = 0, \
|
|
.scsi_bus_check = 1, \
|
|
.host_id = 7, \
|
|
.verbose = 0, \
|
|
.settle_delay = 3, \
|
|
.use_nvram = 1, \
|
|
}
|
|
|
|
extern struct sym_driver_setup sym_driver_setup;
|
|
extern unsigned int sym_debug_flags;
|
|
#define DEBUG_FLAGS sym_debug_flags
|
|
|
|
/*
|
|
* Max number of targets.
|
|
* Maximum is 16 and you are advised not to change this value.
|
|
*/
|
|
#ifndef SYM_CONF_MAX_TARGET
|
|
#define SYM_CONF_MAX_TARGET (16)
|
|
#endif
|
|
|
|
/*
|
|
* Max number of logical units.
|
|
* SPI-2 allows up to 64 logical units, but in real life, target
|
|
* that implements more that 7 logical units are pretty rare.
|
|
* Anyway, the cost of accepting up to 64 logical unit is low in
|
|
* this driver, thus going with the maximum is acceptable.
|
|
*/
|
|
#ifndef SYM_CONF_MAX_LUN
|
|
#define SYM_CONF_MAX_LUN (64)
|
|
#endif
|
|
|
|
/*
|
|
* Max number of IO control blocks queued to the controller.
|
|
* Each entry needs 8 bytes and the queues are allocated contiguously.
|
|
* Since we donnot want to allocate more than a page, the theorical
|
|
* maximum is PAGE_SIZE/8. For safety, we announce a bit less to the
|
|
* access method. :)
|
|
* When not supplied, as it is suggested, the driver compute some
|
|
* good value for this parameter.
|
|
*/
|
|
/* #define SYM_CONF_MAX_START (PAGE_SIZE/8 - 16) */
|
|
|
|
/*
|
|
* Support for Immediate Arbitration.
|
|
* Not advised.
|
|
*/
|
|
/* #define SYM_CONF_IARB_SUPPORT */
|
|
|
|
/*
|
|
* Only relevant if IARB support configured.
|
|
* - Max number of successive settings of IARB hints.
|
|
* - Set IARB on arbitration lost.
|
|
*/
|
|
#define SYM_CONF_IARB_MAX 3
|
|
#define SYM_CONF_SET_IARB_ON_ARB_LOST 1
|
|
|
|
/*
|
|
* Returning wrong residuals may make problems.
|
|
* When zero, this define tells the driver to
|
|
* always return 0 as transfer residual.
|
|
* Btw, all my testings of residuals have succeeded.
|
|
*/
|
|
#define SYM_SETUP_RESIDUAL_SUPPORT 1
|
|
|
|
#endif /* SYM53C8XX_H */
|