You've already forked linux-apfs
mirror of
https://github.com/linux-apfs/linux-apfs.git
synced 2026-05-01 15:00:59 -07:00
Merge branch 'misc' into for-linus
This commit is contained in:
@@ -42,8 +42,6 @@ aic79xx.txt
|
||||
- Adaptec Ultra320 SCSI host adapters
|
||||
aic7xxx.txt
|
||||
- info on driver for Adaptec controllers
|
||||
aic7xxx_old.txt
|
||||
- info on driver for Adaptec controllers, old generation
|
||||
arcmsr_spec.txt
|
||||
- ARECA FIRMWARE SPEC (for IOP331 adapter)
|
||||
dc395x.txt
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -42,20 +42,14 @@ discussion.
|
||||
|
||||
Once LLDD gets hold of a scmd, either the LLDD will complete the
|
||||
command by calling scsi_done callback passed from midlayer when
|
||||
invoking hostt->queuecommand() or SCSI midlayer will time it out.
|
||||
invoking hostt->queuecommand() or the block layer will time it out.
|
||||
|
||||
|
||||
[1-2-1] Completing a scmd w/ scsi_done
|
||||
|
||||
For all non-EH commands, scsi_done() is the completion callback. It
|
||||
does the following.
|
||||
|
||||
1. Delete timeout timer. If it fails, it means that timeout timer
|
||||
has expired and is going to finish the command. Just return.
|
||||
|
||||
2. Link scmd to per-cpu scsi_done_q using scmd->en_entry
|
||||
|
||||
3. Raise SCSI_SOFTIRQ
|
||||
just calls blk_complete_request() to delete the block layer timer and
|
||||
raise SCSI_SOFTIRQ
|
||||
|
||||
SCSI_SOFTIRQ handler scsi_softirq calls scsi_decide_disposition() to
|
||||
determine what to do with the command. scsi_decide_disposition()
|
||||
@@ -64,10 +58,12 @@ with the command.
|
||||
|
||||
- SUCCESS
|
||||
scsi_finish_command() is invoked for the command. The
|
||||
function does some maintenance choirs and notify completion by
|
||||
calling scmd->done() callback, which, for fs requests, would
|
||||
be HLD completion callback - sd:sd_rw_intr, sr:rw_intr,
|
||||
st:st_intr.
|
||||
function does some maintenance chores and then calls
|
||||
scsi_io_completion() to finish the I/O.
|
||||
scsi_io_completion() then notifies the block layer on
|
||||
the completed request by calling blk_end_request and
|
||||
friends or figures out what to do with the remainder
|
||||
of the data in case of an error.
|
||||
|
||||
- NEEDS_RETRY
|
||||
- ADD_TO_MLQUEUE
|
||||
@@ -86,33 +82,45 @@ function
|
||||
1. invokes optional hostt->eh_timed_out() callback. Return value can
|
||||
be one of
|
||||
|
||||
- EH_HANDLED
|
||||
This indicates that eh_timed_out() dealt with the timeout. The
|
||||
scmd is passed to __scsi_done() and thus linked into per-cpu
|
||||
scsi_done_q. Normal command completion described in [1-2-1]
|
||||
follows.
|
||||
- BLK_EH_HANDLED
|
||||
This indicates that eh_timed_out() dealt with the timeout.
|
||||
The command is passed back to the block layer and completed
|
||||
via __blk_complete_requests().
|
||||
|
||||
- EH_RESET_TIMER
|
||||
*NOTE* After returning BLK_EH_HANDLED the SCSI layer is
|
||||
assumed to be finished with the command, and no other
|
||||
functions from the SCSI layer will be called. So this
|
||||
should typically only be returned if the eh_timed_out()
|
||||
handler raced with normal completion.
|
||||
|
||||
- BLK_EH_RESET_TIMER
|
||||
This indicates that more time is required to finish the
|
||||
command. Timer is restarted. This action is counted as a
|
||||
retry and only allowed scmd->allowed + 1(!) times. Once the
|
||||
limit is reached, action for EH_NOT_HANDLED is taken instead.
|
||||
limit is reached, action for BLK_EH_NOT_HANDLED is taken instead.
|
||||
|
||||
*NOTE* This action is racy as the LLDD could finish the scmd
|
||||
after the timeout has expired but before it's added back. In
|
||||
such cases, scsi_done() would think that timeout has occurred
|
||||
and return without doing anything. We lose completion and the
|
||||
command will time out again.
|
||||
|
||||
- EH_NOT_HANDLED
|
||||
This is the same as when eh_timed_out() callback doesn't exist.
|
||||
- BLK_EH_NOT_HANDLED
|
||||
eh_timed_out() callback did not handle the command.
|
||||
Step #2 is taken.
|
||||
|
||||
2. If the host supports asynchronous completion (as indicated by the
|
||||
no_async_abort setting in the host template) scsi_abort_command()
|
||||
is invoked to schedule an asynchrous abort. If that fails
|
||||
Step #3 is taken.
|
||||
|
||||
2. scsi_eh_scmd_add(scmd, SCSI_EH_CANCEL_CMD) is invoked for the
|
||||
command. See [1-3] for more information.
|
||||
|
||||
[1-3] Asynchronous command aborts
|
||||
|
||||
[1-3] How EH takes over
|
||||
After a timeout occurs a command abort is scheduled from
|
||||
scsi_abort_command(). If the abort is successful the command
|
||||
will either be retried (if the number of retries is not exhausted)
|
||||
or terminated with DID_TIME_OUT.
|
||||
Otherwise scsi_eh_scmd_add() is invoked for the command.
|
||||
See [1-4] for more information.
|
||||
|
||||
[1-4] How EH takes over
|
||||
|
||||
scmds enter EH via scsi_eh_scmd_add(), which does the following.
|
||||
|
||||
@@ -320,7 +328,8 @@ scmd->allowed.
|
||||
|
||||
<<scsi_eh_abort_cmds>>
|
||||
|
||||
This action is taken for each timed out command.
|
||||
This action is taken for each timed out command when
|
||||
no_async_abort is enabled in the host template.
|
||||
hostt->eh_abort_handler() is invoked for each scmd. The
|
||||
handler returns SUCCESS if it has succeeded to make LLDD and
|
||||
all related hardware forget about the scmd.
|
||||
|
||||
@@ -882,8 +882,11 @@ Details:
|
||||
*
|
||||
* Calling context: kernel thread
|
||||
*
|
||||
* Notes: Invoked from scsi_eh thread. No other commands will be
|
||||
* queued on current host during eh.
|
||||
* Notes: If 'no_async_abort' is defined this callback
|
||||
* will be invoked from scsi_eh thread. No other commands
|
||||
* will then be queued on current host during eh.
|
||||
* Otherwise it will be called whenever scsi_times_out()
|
||||
* is called due to a command timeout.
|
||||
*
|
||||
* Optionally defined in: LLD
|
||||
**/
|
||||
@@ -1257,6 +1260,8 @@ of interest:
|
||||
address space
|
||||
use_clustering - 1=>SCSI commands in mid level's queue can be merged,
|
||||
0=>disallow SCSI command merging
|
||||
no_async_abort - 1=>Asynchronous aborts are not supported
|
||||
0=>Timed-out commands will be aborted asynchronously
|
||||
hostt - pointer to driver's struct scsi_host_template from which
|
||||
this struct Scsi_Host instance was spawned
|
||||
hostt->proc_name - name of LLD. This is the driver name that sysfs uses
|
||||
|
||||
+3
-4
@@ -484,7 +484,6 @@ M: Hannes Reinecke <hare@suse.de>
|
||||
L: linux-scsi@vger.kernel.org
|
||||
S: Maintained
|
||||
F: drivers/scsi/aic7xxx/
|
||||
F: drivers/scsi/aic7xxx_old/
|
||||
|
||||
AIMSLAB FM RADIO RECEIVER DRIVER
|
||||
M: Hans Verkuil <hverkuil@xs4all.nl>
|
||||
@@ -6901,8 +6900,7 @@ S: Maintained
|
||||
F: drivers/scsi/qla1280.[ch]
|
||||
|
||||
QLOGIC QLA2XXX FC-SCSI DRIVER
|
||||
M: Andrew Vasquez <andrew.vasquez@qlogic.com>
|
||||
M: linux-driver@qlogic.com
|
||||
M: qla2xxx-upstream@qlogic.com
|
||||
L: linux-scsi@vger.kernel.org
|
||||
S: Supported
|
||||
F: Documentation/scsi/LICENSE.qla2xxx
|
||||
@@ -7456,8 +7454,9 @@ F: include/scsi/srp.h
|
||||
SCSI SG DRIVER
|
||||
M: Doug Gilbert <dgilbert@interlog.com>
|
||||
L: linux-scsi@vger.kernel.org
|
||||
W: http://www.torque.net/sg
|
||||
W: http://sg.danny.cz/sg
|
||||
S: Maintained
|
||||
F: Documentation/scsi/scsi-generic.txt
|
||||
F: drivers/scsi/sg.c
|
||||
F: include/scsi/sg.h
|
||||
|
||||
|
||||
@@ -499,47 +499,6 @@ config SCSI_AACRAID
|
||||
|
||||
|
||||
source "drivers/scsi/aic7xxx/Kconfig.aic7xxx"
|
||||
|
||||
config SCSI_AIC7XXX_OLD
|
||||
tristate "Adaptec AIC7xxx support (old driver)"
|
||||
depends on (ISA || EISA || PCI ) && SCSI
|
||||
help
|
||||
WARNING This driver is an older aic7xxx driver and is no longer
|
||||
under active development. Adaptec, Inc. is writing a new driver to
|
||||
take the place of this one, and it is recommended that whenever
|
||||
possible, people should use the new Adaptec written driver instead
|
||||
of this one. This driver will eventually be phased out entirely.
|
||||
|
||||
This is support for the various aic7xxx based Adaptec SCSI
|
||||
controllers. These include the 274x EISA cards; 284x VLB cards;
|
||||
2902, 2910, 293x, 294x, 394x, 3985 and several other PCI and
|
||||
motherboard based SCSI controllers from Adaptec. It does not support
|
||||
the AAA-13x RAID controllers from Adaptec, nor will it likely ever
|
||||
support them. It does not support the 2920 cards from Adaptec that
|
||||
use the Future Domain SCSI controller chip. For those cards, you
|
||||
need the "Future Domain 16xx SCSI support" driver.
|
||||
|
||||
In general, if the controller is based on an Adaptec SCSI controller
|
||||
chip from the aic777x series or the aic78xx series, this driver
|
||||
should work. The only exception is the 7810 which is specifically
|
||||
not supported (that's the RAID controller chip on the AAA-13x
|
||||
cards).
|
||||
|
||||
Note that the AHA2920 SCSI host adapter is *not* supported by this
|
||||
driver; choose "Future Domain 16xx SCSI support" instead if you have
|
||||
one of those.
|
||||
|
||||
Information on the configuration options for this controller can be
|
||||
found by checking the help file for each of the available
|
||||
configuration options. You should read
|
||||
<file:Documentation/scsi/aic7xxx_old.txt> at a minimum before
|
||||
contacting the maintainer with any questions. The SCSI-HOWTO,
|
||||
available from <http://www.tldp.org/docs.html#howto>, can also
|
||||
be of great help.
|
||||
|
||||
To compile this driver as a module, choose M here: the
|
||||
module will be called aic7xxx_old.
|
||||
|
||||
source "drivers/scsi/aic7xxx/Kconfig.aic79xx"
|
||||
source "drivers/scsi/aic94xx/Kconfig"
|
||||
source "drivers/scsi/mvsas/Kconfig"
|
||||
|
||||
@@ -70,7 +70,6 @@ obj-$(CONFIG_SCSI_AHA1740) += aha1740.o
|
||||
obj-$(CONFIG_SCSI_AIC7XXX) += aic7xxx/
|
||||
obj-$(CONFIG_SCSI_AIC79XX) += aic7xxx/
|
||||
obj-$(CONFIG_SCSI_AACRAID) += aacraid/
|
||||
obj-$(CONFIG_SCSI_AIC7XXX_OLD) += aic7xxx_old.o
|
||||
obj-$(CONFIG_SCSI_AIC94XX) += aic94xx/
|
||||
obj-$(CONFIG_SCSI_PM8001) += pm8001/
|
||||
obj-$(CONFIG_SCSI_ISCI) += isci/
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,28 +0,0 @@
|
||||
/*+M*************************************************************************
|
||||
* Adaptec AIC7xxx device driver for Linux.
|
||||
*
|
||||
* Copyright (c) 1994 John Aycock
|
||||
* The University of Calgary Department of Computer Science.
|
||||
*
|
||||
* 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.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; see the file COPYING. If not, write to
|
||||
* the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
*
|
||||
* $Id: aic7xxx.h,v 3.2 1996/07/23 03:37:26 deang Exp $
|
||||
*-M*************************************************************************/
|
||||
#ifndef _aic7xxx_h
|
||||
#define _aic7xxx_h
|
||||
|
||||
#define AIC7XXX_H_VERSION "5.2.0"
|
||||
|
||||
#endif /* _aic7xxx_h */
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -1,270 +0,0 @@
|
||||
/*+M*************************************************************************
|
||||
* Adaptec AIC7xxx device driver proc support for Linux.
|
||||
*
|
||||
* Copyright (c) 1995, 1996 Dean W. Gehnert
|
||||
*
|
||||
* 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.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; see the file COPYING. If not, write to
|
||||
* the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
*
|
||||
* ----------------------------------------------------------------
|
||||
* o Modified from the EATA-DMA /proc support.
|
||||
* o Additional support for device block statistics provided by
|
||||
* Matthew Jacob.
|
||||
* o Correction of overflow by Heinz Mauelshagen
|
||||
* o Adittional corrections by Doug Ledford
|
||||
*
|
||||
* Dean W. Gehnert, deang@teleport.com, 05/01/96
|
||||
*
|
||||
* $Id: aic7xxx_proc.c,v 4.1 1997/06/97 08:23:42 deang Exp $
|
||||
*-M*************************************************************************/
|
||||
|
||||
|
||||
#define HDRB \
|
||||
" 0 - 4K 4 - 16K 16 - 64K 64 - 256K 256K - 1M 1M+"
|
||||
|
||||
|
||||
/*+F*************************************************************************
|
||||
* Function:
|
||||
* aic7xxx_show_info
|
||||
*
|
||||
* Description:
|
||||
* Return information to handle /proc support for the driver.
|
||||
*-F*************************************************************************/
|
||||
int
|
||||
aic7xxx_show_info(struct seq_file *m, struct Scsi_Host *HBAptr)
|
||||
{
|
||||
struct aic7xxx_host *p;
|
||||
struct aic_dev_data *aic_dev;
|
||||
struct scsi_device *sdptr;
|
||||
unsigned char i;
|
||||
unsigned char tindex;
|
||||
|
||||
for(p=first_aic7xxx; p && p->host != HBAptr; p=p->next)
|
||||
;
|
||||
|
||||
if (!p)
|
||||
{
|
||||
seq_printf(m, "Can't find adapter for host number %d\n", HBAptr->host_no);
|
||||
return 0;
|
||||
}
|
||||
|
||||
p = (struct aic7xxx_host *) HBAptr->hostdata;
|
||||
|
||||
seq_printf(m, "Adaptec AIC7xxx driver version: ");
|
||||
seq_printf(m, "%s/", AIC7XXX_C_VERSION);
|
||||
seq_printf(m, "%s", AIC7XXX_H_VERSION);
|
||||
seq_printf(m, "\n");
|
||||
seq_printf(m, "Adapter Configuration:\n");
|
||||
seq_printf(m, " SCSI Adapter: %s\n",
|
||||
board_names[p->board_name_index]);
|
||||
if (p->flags & AHC_TWIN)
|
||||
seq_printf(m, " Twin Channel Controller ");
|
||||
else
|
||||
{
|
||||
char *channel = "";
|
||||
char *ultra = "";
|
||||
char *wide = "Narrow ";
|
||||
if (p->flags & AHC_MULTI_CHANNEL)
|
||||
{
|
||||
channel = " Channel A";
|
||||
if (p->flags & (AHC_CHNLB|AHC_CHNLC))
|
||||
channel = (p->flags & AHC_CHNLB) ? " Channel B" : " Channel C";
|
||||
}
|
||||
if (p->features & AHC_WIDE)
|
||||
wide = "Wide ";
|
||||
if (p->features & AHC_ULTRA3)
|
||||
{
|
||||
switch(p->chip & AHC_CHIPID_MASK)
|
||||
{
|
||||
case AHC_AIC7892:
|
||||
case AHC_AIC7899:
|
||||
ultra = "Ultra-160/m LVD/SE ";
|
||||
break;
|
||||
default:
|
||||
ultra = "Ultra-3 LVD/SE ";
|
||||
break;
|
||||
}
|
||||
}
|
||||
else if (p->features & AHC_ULTRA2)
|
||||
ultra = "Ultra-2 LVD/SE ";
|
||||
else if (p->features & AHC_ULTRA)
|
||||
ultra = "Ultra ";
|
||||
seq_printf(m, " %s%sController%s ",
|
||||
ultra, wide, channel);
|
||||
}
|
||||
switch(p->chip & ~AHC_CHIPID_MASK)
|
||||
{
|
||||
case AHC_VL:
|
||||
seq_printf(m, "at VLB slot %d\n", p->pci_device_fn);
|
||||
break;
|
||||
case AHC_EISA:
|
||||
seq_printf(m, "at EISA slot %d\n", p->pci_device_fn);
|
||||
break;
|
||||
default:
|
||||
seq_printf(m, "at PCI %d/%d/%d\n", p->pci_bus,
|
||||
PCI_SLOT(p->pci_device_fn), PCI_FUNC(p->pci_device_fn));
|
||||
break;
|
||||
}
|
||||
if( !(p->maddr) )
|
||||
{
|
||||
seq_printf(m, " Programmed I/O Base: %lx\n", p->base);
|
||||
}
|
||||
else
|
||||
{
|
||||
seq_printf(m, " PCI MMAPed I/O Base: 0x%lx\n", p->mbase);
|
||||
}
|
||||
if( (p->chip & (AHC_VL | AHC_EISA)) )
|
||||
{
|
||||
seq_printf(m, " BIOS Memory Address: 0x%08x\n", p->bios_address);
|
||||
}
|
||||
seq_printf(m, " Adapter SEEPROM Config: %s\n",
|
||||
(p->flags & AHC_SEEPROM_FOUND) ? "SEEPROM found and used." :
|
||||
((p->flags & AHC_USEDEFAULTS) ? "SEEPROM not found, using defaults." :
|
||||
"SEEPROM not found, using leftover BIOS values.") );
|
||||
seq_printf(m, " Adaptec SCSI BIOS: %s\n",
|
||||
(p->flags & AHC_BIOS_ENABLED) ? "Enabled" : "Disabled");
|
||||
seq_printf(m, " IRQ: %d\n", HBAptr->irq);
|
||||
seq_printf(m, " SCBs: Active %d, Max Active %d,\n",
|
||||
p->activescbs, p->max_activescbs);
|
||||
seq_printf(m, " Allocated %d, HW %d, "
|
||||
"Page %d\n", p->scb_data->numscbs, p->scb_data->maxhscbs,
|
||||
p->scb_data->maxscbs);
|
||||
if (p->flags & AHC_EXTERNAL_SRAM)
|
||||
seq_printf(m, " Using External SCB SRAM\n");
|
||||
seq_printf(m, " Interrupts: %ld", p->isr_count);
|
||||
if (p->chip & AHC_EISA)
|
||||
{
|
||||
seq_printf(m, " %s\n",
|
||||
(p->pause & IRQMS) ? "(Level Sensitive)" : "(Edge Triggered)");
|
||||
}
|
||||
else
|
||||
{
|
||||
seq_printf(m, "\n");
|
||||
}
|
||||
seq_printf(m, " BIOS Control Word: 0x%04x\n",
|
||||
p->bios_control);
|
||||
seq_printf(m, " Adapter Control Word: 0x%04x\n",
|
||||
p->adapter_control);
|
||||
seq_printf(m, " Extended Translation: %sabled\n",
|
||||
(p->flags & AHC_EXTEND_TRANS_A) ? "En" : "Dis");
|
||||
seq_printf(m, "Disconnect Enable Flags: 0x%04x\n", p->discenable);
|
||||
if (p->features & (AHC_ULTRA | AHC_ULTRA2))
|
||||
{
|
||||
seq_printf(m, " Ultra Enable Flags: 0x%04x\n", p->ultraenb);
|
||||
}
|
||||
seq_printf(m, "Default Tag Queue Depth: %d\n", aic7xxx_default_queue_depth);
|
||||
seq_printf(m, " Tagged Queue By Device array for aic7xxx host "
|
||||
"instance %d:\n", p->instance);
|
||||
seq_printf(m, " {");
|
||||
for(i=0; i < (MAX_TARGETS - 1); i++)
|
||||
seq_printf(m, "%d,",aic7xxx_tag_info[p->instance].tag_commands[i]);
|
||||
seq_printf(m, "%d}\n",aic7xxx_tag_info[p->instance].tag_commands[i]);
|
||||
|
||||
seq_printf(m, "\n");
|
||||
seq_printf(m, "Statistics:\n\n");
|
||||
list_for_each_entry(aic_dev, &p->aic_devs, list)
|
||||
{
|
||||
sdptr = aic_dev->SDptr;
|
||||
tindex = sdptr->channel << 3 | sdptr->id;
|
||||
seq_printf(m, "(scsi%d:%d:%d:%d)\n",
|
||||
p->host_no, sdptr->channel, sdptr->id, sdptr->lun);
|
||||
seq_printf(m, " Device using %s/%s",
|
||||
(aic_dev->cur.width == MSG_EXT_WDTR_BUS_16_BIT) ?
|
||||
"Wide" : "Narrow",
|
||||
(aic_dev->cur.offset != 0) ?
|
||||
"Sync transfers at " : "Async transfers.\n" );
|
||||
if (aic_dev->cur.offset != 0)
|
||||
{
|
||||
struct aic7xxx_syncrate *sync_rate;
|
||||
unsigned char options = aic_dev->cur.options;
|
||||
int period = aic_dev->cur.period;
|
||||
int rate = (aic_dev->cur.width ==
|
||||
MSG_EXT_WDTR_BUS_16_BIT) ? 1 : 0;
|
||||
|
||||
sync_rate = aic7xxx_find_syncrate(p, &period, 0, &options);
|
||||
if (sync_rate != NULL)
|
||||
{
|
||||
seq_printf(m, "%s MByte/sec, offset %d\n",
|
||||
sync_rate->rate[rate],
|
||||
aic_dev->cur.offset );
|
||||
}
|
||||
else
|
||||
{
|
||||
seq_printf(m, "3.3 MByte/sec, offset %d\n",
|
||||
aic_dev->cur.offset );
|
||||
}
|
||||
}
|
||||
seq_printf(m, " Transinfo settings: ");
|
||||
seq_printf(m, "current(%d/%d/%d/%d), ",
|
||||
aic_dev->cur.period,
|
||||
aic_dev->cur.offset,
|
||||
aic_dev->cur.width,
|
||||
aic_dev->cur.options);
|
||||
seq_printf(m, "goal(%d/%d/%d/%d), ",
|
||||
aic_dev->goal.period,
|
||||
aic_dev->goal.offset,
|
||||
aic_dev->goal.width,
|
||||
aic_dev->goal.options);
|
||||
seq_printf(m, "user(%d/%d/%d/%d)\n",
|
||||
p->user[tindex].period,
|
||||
p->user[tindex].offset,
|
||||
p->user[tindex].width,
|
||||
p->user[tindex].options);
|
||||
if(sdptr->simple_tags)
|
||||
{
|
||||
seq_printf(m, " Tagged Command Queueing Enabled, Ordered Tags %s, Depth %d/%d\n", sdptr->ordered_tags ? "Enabled" : "Disabled", sdptr->queue_depth, aic_dev->max_q_depth);
|
||||
}
|
||||
if(aic_dev->barrier_total)
|
||||
seq_printf(m, " Total transfers %ld:\n (%ld/%ld/%ld/%ld reads/writes/REQ_BARRIER/Ordered Tags)\n",
|
||||
aic_dev->r_total+aic_dev->w_total, aic_dev->r_total, aic_dev->w_total,
|
||||
aic_dev->barrier_total, aic_dev->ordered_total);
|
||||
else
|
||||
seq_printf(m, " Total transfers %ld:\n (%ld/%ld reads/writes)\n",
|
||||
aic_dev->r_total+aic_dev->w_total, aic_dev->r_total, aic_dev->w_total);
|
||||
seq_printf(m, "%s\n", HDRB);
|
||||
seq_printf(m, " Reads:");
|
||||
for (i = 0; i < ARRAY_SIZE(aic_dev->r_bins); i++)
|
||||
{
|
||||
seq_printf(m, " %10ld", aic_dev->r_bins[i]);
|
||||
}
|
||||
seq_printf(m, "\n");
|
||||
seq_printf(m, " Writes:");
|
||||
for (i = 0; i < ARRAY_SIZE(aic_dev->w_bins); i++)
|
||||
{
|
||||
seq_printf(m, " %10ld", aic_dev->w_bins[i]);
|
||||
}
|
||||
seq_printf(m, "\n");
|
||||
seq_printf(m, "\n\n");
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* Overrides for Emacs so that we follow Linus's tabbing style.
|
||||
* Emacs will notice this stuff at the end of the file and automatically
|
||||
* adjust the settings for this buffer only. This must remain at the end
|
||||
* of the file.
|
||||
* ---------------------------------------------------------------------------
|
||||
* Local variables:
|
||||
* c-indent-level: 2
|
||||
* c-brace-imaginary-offset: 0
|
||||
* c-brace-offset: -2
|
||||
* c-argdecl-indent: 2
|
||||
* c-label-offset: -2
|
||||
* c-continued-statement-offset: 2
|
||||
* c-continued-brace-offset: 0
|
||||
* indent-tabs-mode: nil
|
||||
* tab-width: 8
|
||||
* End:
|
||||
*/
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -1,49 +0,0 @@
|
||||
/* Messages (1 byte) */ /* I/T (M)andatory or (O)ptional */
|
||||
#define MSG_CMDCOMPLETE 0x00 /* M/M */
|
||||
#define MSG_EXTENDED 0x01 /* O/O */
|
||||
#define MSG_SAVEDATAPOINTER 0x02 /* O/O */
|
||||
#define MSG_RESTOREPOINTERS 0x03 /* O/O */
|
||||
#define MSG_DISCONNECT 0x04 /* O/O */
|
||||
#define MSG_INITIATOR_DET_ERR 0x05 /* M/M */
|
||||
#define MSG_ABORT 0x06 /* O/M */
|
||||
#define MSG_MESSAGE_REJECT 0x07 /* M/M */
|
||||
#define MSG_NOOP 0x08 /* M/M */
|
||||
#define MSG_PARITY_ERROR 0x09 /* M/M */
|
||||
#define MSG_LINK_CMD_COMPLETE 0x0a /* O/O */
|
||||
#define MSG_LINK_CMD_COMPLETEF 0x0b /* O/O */
|
||||
#define MSG_BUS_DEV_RESET 0x0c /* O/M */
|
||||
#define MSG_ABORT_TAG 0x0d /* O/O */
|
||||
#define MSG_CLEAR_QUEUE 0x0e /* O/O */
|
||||
#define MSG_INIT_RECOVERY 0x0f /* O/O */
|
||||
#define MSG_REL_RECOVERY 0x10 /* O/O */
|
||||
#define MSG_TERM_IO_PROC 0x11 /* O/O */
|
||||
|
||||
/* Messages (2 byte) */
|
||||
#define MSG_SIMPLE_Q_TAG 0x20 /* O/O */
|
||||
#define MSG_HEAD_OF_Q_TAG 0x21 /* O/O */
|
||||
#define MSG_ORDERED_Q_TAG 0x22 /* O/O */
|
||||
#define MSG_IGN_WIDE_RESIDUE 0x23 /* O/O */
|
||||
|
||||
/* Identify message */ /* M/M */
|
||||
#define MSG_IDENTIFYFLAG 0x80
|
||||
#define MSG_IDENTIFY_DISCFLAG 0x40
|
||||
#define MSG_IDENTIFY(lun, disc) (((disc) ? 0xc0 : MSG_IDENTIFYFLAG) | (lun))
|
||||
#define MSG_ISIDENTIFY(m) ((m) & MSG_IDENTIFYFLAG)
|
||||
|
||||
/* Extended messages (opcode and length) */
|
||||
#define MSG_EXT_SDTR 0x01
|
||||
#define MSG_EXT_SDTR_LEN 0x03
|
||||
|
||||
#define MSG_EXT_WDTR 0x03
|
||||
#define MSG_EXT_WDTR_LEN 0x02
|
||||
#define MSG_EXT_WDTR_BUS_8_BIT 0x00
|
||||
#define MSG_EXT_WDTR_BUS_16_BIT 0x01
|
||||
#define MSG_EXT_WDTR_BUS_32_BIT 0x02
|
||||
|
||||
#define MSG_EXT_PPR 0x04
|
||||
#define MSG_EXT_PPR_LEN 0x06
|
||||
#define MSG_EXT_PPR_OPTION_ST 0x00
|
||||
#define MSG_EXT_PPR_OPTION_DT_CRC 0x02
|
||||
#define MSG_EXT_PPR_OPTION_DT_UNITS 0x03
|
||||
#define MSG_EXT_PPR_OPTION_DT_CRC_QUICK 0x04
|
||||
#define MSG_EXT_PPR_OPTION_DT_UNITS_QUICK 0x05
|
||||
@@ -1,135 +0,0 @@
|
||||
/*
|
||||
* Instruction formats for the sequencer program downloaded to
|
||||
* Aic7xxx SCSI host adapters
|
||||
*
|
||||
* Copyright (c) 1997, 1998 Justin T. Gibbs.
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions, and the following disclaimer,
|
||||
* without modification, immediately at the beginning of the file.
|
||||
* 2. The name of the author may not be used to endorse or promote products
|
||||
* derived from this software without specific prior written permission.
|
||||
*
|
||||
* Where this Software is combined with software released under the terms of
|
||||
* the GNU General Public License ("GPL") and the terms of the GPL would require the
|
||||
* combined work to also be released under the terms of the GPL, the terms
|
||||
* and conditions of this License will apply in addition to those of the
|
||||
* GPL with the exception of any terms or conditions of this License that
|
||||
* conflict with, or are expressly prohibited by, the GPL.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
|
||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR
|
||||
* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*
|
||||
* $Id: sequencer.h,v 1.3 1997/09/27 19:37:31 gibbs Exp $
|
||||
*/
|
||||
|
||||
#ifdef __LITTLE_ENDIAN_BITFIELD
|
||||
struct ins_format1 {
|
||||
unsigned int
|
||||
immediate : 8,
|
||||
source : 9,
|
||||
destination : 9,
|
||||
ret : 1,
|
||||
opcode : 4,
|
||||
parity : 1;
|
||||
};
|
||||
|
||||
struct ins_format2 {
|
||||
unsigned int
|
||||
shift_control : 8,
|
||||
source : 9,
|
||||
destination : 9,
|
||||
ret : 1,
|
||||
opcode : 4,
|
||||
parity : 1;
|
||||
};
|
||||
|
||||
struct ins_format3 {
|
||||
unsigned int
|
||||
immediate : 8,
|
||||
source : 9,
|
||||
address : 10,
|
||||
opcode : 4,
|
||||
parity : 1;
|
||||
};
|
||||
#elif defined(__BIG_ENDIAN_BITFIELD)
|
||||
struct ins_format1 {
|
||||
unsigned int
|
||||
parity : 1,
|
||||
opcode : 4,
|
||||
ret : 1,
|
||||
destination : 9,
|
||||
source : 9,
|
||||
immediate : 8;
|
||||
};
|
||||
|
||||
struct ins_format2 {
|
||||
unsigned int
|
||||
parity : 1,
|
||||
opcode : 4,
|
||||
ret : 1,
|
||||
destination : 9,
|
||||
source : 9,
|
||||
shift_control : 8;
|
||||
};
|
||||
|
||||
struct ins_format3 {
|
||||
unsigned int
|
||||
parity : 1,
|
||||
opcode : 4,
|
||||
address : 10,
|
||||
source : 9,
|
||||
immediate : 8;
|
||||
};
|
||||
#endif
|
||||
|
||||
union ins_formats {
|
||||
struct ins_format1 format1;
|
||||
struct ins_format2 format2;
|
||||
struct ins_format3 format3;
|
||||
unsigned char bytes[4];
|
||||
unsigned int integer;
|
||||
};
|
||||
struct instruction {
|
||||
union ins_formats format;
|
||||
unsigned int srcline;
|
||||
struct symbol *patch_label;
|
||||
struct {
|
||||
struct instruction *stqe_next;
|
||||
} links;
|
||||
};
|
||||
|
||||
#define AIC_OP_OR 0x0
|
||||
#define AIC_OP_AND 0x1
|
||||
#define AIC_OP_XOR 0x2
|
||||
#define AIC_OP_ADD 0x3
|
||||
#define AIC_OP_ADC 0x4
|
||||
#define AIC_OP_ROL 0x5
|
||||
#define AIC_OP_BMOV 0x6
|
||||
|
||||
#define AIC_OP_JMP 0x8
|
||||
#define AIC_OP_JC 0x9
|
||||
#define AIC_OP_JNC 0xa
|
||||
#define AIC_OP_CALL 0xb
|
||||
#define AIC_OP_JNE 0xc
|
||||
#define AIC_OP_JNZ 0xd
|
||||
#define AIC_OP_JE 0xe
|
||||
#define AIC_OP_JZ 0xf
|
||||
|
||||
/* Pseudo Ops */
|
||||
#define AIC_OP_SHL 0x10
|
||||
#define AIC_OP_SHR 0x20
|
||||
#define AIC_OP_ROR 0x30
|
||||
@@ -541,10 +541,8 @@ static int be2iscsi_get_if_param(struct beiscsi_hba *phba,
|
||||
ip_type = BE2_IPV6;
|
||||
|
||||
len = mgmt_get_if_info(phba, ip_type, &if_info);
|
||||
if (len) {
|
||||
kfree(if_info);
|
||||
if (len)
|
||||
return len;
|
||||
}
|
||||
|
||||
switch (param) {
|
||||
case ISCSI_NET_PARAM_IPV4_ADDR:
|
||||
@@ -569,7 +567,7 @@ static int be2iscsi_get_if_param(struct beiscsi_hba *phba,
|
||||
break;
|
||||
case ISCSI_NET_PARAM_VLAN_ID:
|
||||
if (if_info->vlan_priority == BEISCSI_VLAN_DISABLE)
|
||||
return -EINVAL;
|
||||
len = -EINVAL;
|
||||
else
|
||||
len = sprintf(buf, "%d\n",
|
||||
(if_info->vlan_priority &
|
||||
@@ -577,7 +575,7 @@ static int be2iscsi_get_if_param(struct beiscsi_hba *phba,
|
||||
break;
|
||||
case ISCSI_NET_PARAM_VLAN_PRIORITY:
|
||||
if (if_info->vlan_priority == BEISCSI_VLAN_DISABLE)
|
||||
return -EINVAL;
|
||||
len = -EINVAL;
|
||||
else
|
||||
len = sprintf(buf, "%d\n",
|
||||
((if_info->vlan_priority >> 13) &
|
||||
|
||||
@@ -1367,10 +1367,6 @@ bfa_faa_query(struct bfa_s *bfa, struct bfa_faa_attr_s *attr,
|
||||
struct bfa_iocfc_s *iocfc = &bfa->iocfc;
|
||||
bfa_status_t status;
|
||||
|
||||
iocfc->faa_args.faa_attr = attr;
|
||||
iocfc->faa_args.faa_cb.faa_cbfn = cbfn;
|
||||
iocfc->faa_args.faa_cb.faa_cbarg = cbarg;
|
||||
|
||||
status = bfa_faa_validate_request(bfa);
|
||||
if (status != BFA_STATUS_OK)
|
||||
return status;
|
||||
@@ -1378,6 +1374,10 @@ bfa_faa_query(struct bfa_s *bfa, struct bfa_faa_attr_s *attr,
|
||||
if (iocfc->faa_args.busy == BFA_TRUE)
|
||||
return BFA_STATUS_DEVBUSY;
|
||||
|
||||
iocfc->faa_args.faa_attr = attr;
|
||||
iocfc->faa_args.faa_cb.faa_cbfn = cbfn;
|
||||
iocfc->faa_args.faa_cb.faa_cbarg = cbarg;
|
||||
|
||||
iocfc->faa_args.busy = BFA_TRUE;
|
||||
memset(&faa_attr_req, 0, sizeof(struct bfi_faa_query_s));
|
||||
bfi_h2i_set(faa_attr_req.mh, BFI_MC_IOCFC,
|
||||
|
||||
@@ -132,6 +132,7 @@ enum bfa_status {
|
||||
BFA_STATUS_ETIMER = 5, /* Timer expired - Retry, if persists,
|
||||
* contact support */
|
||||
BFA_STATUS_EPROTOCOL = 6, /* Protocol error */
|
||||
BFA_STATUS_BADFLASH = 9, /* Flash is bad */
|
||||
BFA_STATUS_SFP_UNSUPP = 10, /* Unsupported SFP - Replace SFP */
|
||||
BFA_STATUS_UNKNOWN_VFID = 11, /* VF_ID not found */
|
||||
BFA_STATUS_DATACORRUPTED = 12, /* Diag returned data corrupted */
|
||||
|
||||
@@ -1026,7 +1026,7 @@ struct fc_alpabm_s {
|
||||
#define FC_ED_TOV 2
|
||||
#define FC_REC_TOV (FC_ED_TOV + 1)
|
||||
#define FC_RA_TOV 10
|
||||
#define FC_ELS_TOV ((2 * FC_RA_TOV) + 1)
|
||||
#define FC_ELS_TOV (2 * FC_RA_TOV)
|
||||
#define FC_FCCT_TOV (3 * FC_RA_TOV)
|
||||
|
||||
/*
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user