* [ALSA - liboss 0001228]: Skype Does not work with aoss
From: bugtrack @ 2006-04-01 8:55 UTC (permalink / raw)
To: alsa-devel
A NOTE has been added to this issue.
======================================================================
<https://bugtrack.alsa-project.org/alsa-bug/view.php?id=1228>
======================================================================
Reported By: hil
Assigned To:
======================================================================
Project: ALSA - liboss
Issue ID: 1228
Category:
Reproducibility: always
Severity: minor
Priority: normal
Status: new
======================================================================
Date Submitted: 07-03-2005 09:09 CEST
Last Modified: 04-01-2006 10:55 CEST
======================================================================
Summary: Skype Does not work with aoss
Description:
I downloaded alsa-oss-1.0.9rc2 and install by
# ./configure --with-aoss=yes && make && make install
as root. Virtually every program works except skype
(http://www.skype.com/) version 1.1.0.13_API. I downloaded the Fedora
version of skype from the skype official website. Skype only uses
/dev/dsp. I guess skype uses /dev/dsp as microphone input as well. I could
not hear anything and the microphone did not work as well if I run skype
like aoss /usr/bin/skype. If I run skype without aoss, then skype works
just fine.
======================================================================
Relazioni ID Riassunto
----------------------------------------------------------------------
in relazione con 0001224 artsd-like style
======================================================================
----------------------------------------------------------------------
Hetfield - 03-22-06 10:02
----------------------------------------------------------------------
oki, but kiax still has the same problem and kiax is open, you may try to
fix that, hoping it's a similar bug
----------------------------------------------------------------------
Hetfield - 04-01-06 10:55
----------------------------------------------------------------------
ok i have now skype working with aoss and dmix. solution found somewhere in
the web, not only mine...
1) i have whole .11rc4
2) i have .asoundrc pasted below (yes i know i should use no more it)
3) start skype this way:
export ALSA_OSS_PCM_DEVICE="skype"
aoss /opt/skype/skype.bin --resources-path /opt/skype/
it works with dmix, i can listen mplayer and use skype audio
only a notice: whould be so nice if next alsa could implement such things
by default settings
cat .asoundrc
pcm.skype {
type asym
playback.pcm "skypeout"
capture.pcm "skypein"
}
pcm.skypein {
type route
slave {
pcm "skypedsnoop"
format S16_LE
}
ttable {
0 {0 0.5}
1 {0 0.5}
}
}
pcm.skypeout {
type plug
slave {
pcm "dmix"
}
}
pcm.skypedsnoop {
type dsnoop
ipc_key 1133
slave {
pcm "hw:0,0"
period_size 256
periods 16
buffer_size 16384
}
bindings {
0 0
}
}
Issue History
Date Modified Username Field Change
======================================================================
07-03-05 09:09 hil New Issue
08-09-05 15:33 rapand Note Added: 0005732
08-10-05 00:49 rlrevell Relationship added duplicate of 0001224
08-10-05 00:50 rlrevell Note Added: 0005740
12-31-05 00:19 rlrevell Note Added: 0007315
01-02-06 18:54 rlrevell Relationship deleted duplicate of 0001224
01-02-06 18:55 rlrevell Relationship added related to 0001224
01-02-06 18:56 rlrevell Note Added: 0007375
01-05-06 21:36 Hetfield Note Added: 0007479
01-05-06 21:40 rlrevell Note Added: 0007480
01-05-06 21:42 rlrevell Note Added: 0007481
01-05-06 22:01 Hetfield Note Added: 0007482
01-28-06 05:34 nono31 Note Added: 0007824
01-28-06 05:35 nono31 Issue Monitored: nono31
01-28-06 05:38 rlrevell Note Added: 0007825
01-28-06 06:11 nono31 Note Added: 0007826
01-28-06 06:12 nono31 File Added: strace_aoss_kiax.bz2
01-28-06 06:13 nono31 Note Added: 0007827
03-22-06 00:28 rlrevell Note Added: 0008761
03-22-06 10:02 Hetfield Note Added: 0008849
04-01-06 10:55 Hetfield Note Added: 0009054
======================================================================
-------------------------------------------------------
This SF.Net email is sponsored by xPML, a groundbreaking scripting language
that extends applications into web and mobile media. Attend the live webcast
and join the prime developer group breaking into this new coding territory!
http://sel.as-us.falkag.net/sel?cmd=lnk&kid=110944&bid=241720&dat=121642
^ permalink raw reply
* Re: [patch 2.6.16-mm2 4/9] sched throttle tree extract - remove kthread barrier
From: Mike Galbraith @ 2006-04-01 8:51 UTC (permalink / raw)
To: Ingo Molnar, Andrew Morton; +Cc: lkml, Peter Williams, Nick Piggin, Con Kolivas
In-Reply-To: <1143881058.7617.24.camel@homer>
This patch removes the last barrier between a normal task using dynamic
priorities and kthreads using the same. In testing, this separation has
proven to be unnecessary.
Signed-off-by: Mike Galbraith <efault@gmx.de>
--- linux-2.6.16-mm2/kernel/sched.c-3.remove_IO_barrier 2006-04-01 08:57:40.000000000 +0200
+++ linux-2.6.16-mm2/kernel/sched.c 2006-04-01 09:01:54.000000000 +0200
@@ -865,13 +865,13 @@ static int recalc_task_prio(task_t *p, u
if (likely(sleep_time > 0)) {
/*
- * User tasks that sleep a long time are categorised as
- * idle. They will only have their sleep_avg increased to a
+ * Tasks that sleep a long time are categorised as idle.
+ * They will only have their sleep_avg increased to a
* level that makes them just interactive priority to stay
* active yet prevent them suddenly becoming cpu hogs and
* starving other processes.
*/
- if (p->mm && sleep_time > INTERACTIVE_SLEEP(p)) {
+ if (sleep_time > INTERACTIVE_SLEEP(p)) {
unsigned long ceiling;
ceiling = JIFFIES_TO_NS(MAX_SLEEP_AVG -
^ permalink raw reply
* iptables -A INPUT -j LOG does not log anything
From: Alexandre Rouillac @ 2006-04-01 8:44 UTC (permalink / raw)
To: netfilter
Hi all,
I set my iptables with policy "-P INPUT DROP" and my last line of INPUT
chains to "-A INPUT -j LOG".
So everything packets not matching my INPUT rules will be LOG and DROP.
My problem is that iptables does not log anything to my syslog file.
I checked the syslogd configuration (debian default):
*.*;auth,authpriv.none -/var/log/syslog
kern.* -/var/log/kern.log
*.=info;*.=notice;*.=warn;\
auth,authpriv.none;\
cron,daemon.none;\
mail,news.none -/var/log/messages
I checked counters of INPUT chains :
20 3 144 LOG all -- * * 0.0.0.0/0
0.0.0.0/0 LOG flags 0 level 4
But nothing on my logfiles (syslog, messages, kern.log).
Does someone can help ?
Best Regards,
Alexandre
^ permalink raw reply
* Re: [patch 2.6.16-mm2 3/9] sched throttle tree extract - remove IO priority barrier
From: Mike Galbraith @ 2006-04-01 8:44 UTC (permalink / raw)
To: Ingo Molnar, Andrew Morton; +Cc: lkml, Peter Williams, Nick Piggin, Con Kolivas
In-Reply-To: <1143880683.7617.16.camel@homer>
This patch removes the barrier preventing IO bound tasks from competing
against highly interactive tasks for cpu time. This barrier has been
demonstrated to cause starvation of IO bound tasks, and in testing, I've
found it to now be unnecessary in any case.
Signed-off-by: Mike Galbraith <efault@gmx.de>
--- linux-2.6.16-mm2/kernel/sched.c-2.fix_uninterruptible 2006-03-31 13:34:04.000000000 +0200
+++ linux-2.6.16-mm2/kernel/sched.c 2006-04-01 08:57:40.000000000 +0200
@@ -880,21 +880,6 @@ static int recalc_task_prio(task_t *p, u
p->sleep_avg = ceiling;
} else {
/*
- * Tasks waking from uninterruptible sleep are
- * limited in their sleep_avg rise as they
- * are likely to be waiting on I/O
- */
- if (p->sleep_type == SLEEP_NONINTERACTIVE && p->mm) {
- if (p->sleep_avg >= INTERACTIVE_SLEEP(p))
- sleep_time = 0;
- else if (p->sleep_avg + sleep_time >=
- INTERACTIVE_SLEEP(p)) {
- p->sleep_avg = INTERACTIVE_SLEEP(p);
- sleep_time = 0;
- }
- }
-
- /*
* This code gives a bonus to interactive tasks.
*
* The boost works by updating the 'average sleep time'
^ permalink raw reply
* [ALSA - driver 0001987]: Upmix Feature Request
From: bugtrack @ 2006-04-01 8:39 UTC (permalink / raw)
To: alsa-devel
A NOTE has been added to this issue.
======================================================================
<https://bugtrack.alsa-project.org/alsa-bug/view.php?id=1987>
======================================================================
Reported By: the-me
Assigned To:
======================================================================
Project: ALSA - driver
Issue ID: 1987
Category: CORE - control
Reproducibility: always
Severity: feature
Priority: normal
Status: feedback
Distribution: Debian
Kernel Version: 2.6.16.1
======================================================================
Date Submitted: 03-31-2006 20:38 CEST
Last Modified: 04-01-2006 10:39 CEST
======================================================================
Summary: Upmix Feature Request
Description:
Hi,
I, and many users more, want a feature at the alsamixer, called Upmix.
I've got an Terratec Aureon 5.1 Fun and I tried many things, but it's not
able, that I can hear an mp3 with upmixed 5.1 sound. Here is my actual
.asoundrc:
pcm.ch51upmix {
type route
slave.pcm surround51
slave.channels 6
ttable.0.0 1
ttable.1.1 1
ttable.0.2 1
ttable.1.3 1
ttable.0.4 0.5
ttable.1.4 0.5
ttable.0.5 0.5
ttable.1.5 0.5
}
pcm.!default
{
type plug
slave.pcm ch51upmix
}
pcm.lowpass {
type ladspa
path "/usr/lib/ladspa"
plugins [ {
label lpf
input {
controls [ 50 ]
}
} ]
}
With this .asoundrc, all speakers work, but my subwoofer doesn't play only
low frequen...
Can you please add such a feature?
Greetz, Patrick
======================================================================
----------------------------------------------------------------------
Raymond - 04-01-06 01:03
----------------------------------------------------------------------
Have you try the alsa-plugin ?
http://cvs.sourceforge.net/viewcvs.py/*checkout*/alsa/alsa-plugins/doc/upmix.txt?rev=1.1
----------------------------------------------------------------------
the-me - 04-01-06 10:39
----------------------------------------------------------------------
Thanks, but there is one problem. I need a lowpass filter for my
subwoofer.
Like here but only on my subwoofer channel =>
http://alsa.opensrc.org/SurroundSound ( ~ in the middle of the document ).
Issue History
Date Modified Username Field Change
======================================================================
03-31-06 20:38 the-me New Issue
03-31-06 20:38 the-me Distribution => Debian
03-31-06 20:38 the-me Kernel Version => 2.6.16.1
03-31-06 20:40 the-me Note Added: 0009048
03-31-06 21:02 rlrevell Status new => closed
03-31-06 21:02 rlrevell Note Added: 0009049
03-31-06 21:15 the-me Status closed => feedback
03-31-06 21:15 the-me Resolution open => reopened
03-31-06 21:15 the-me Note Added: 0009050
04-01-06 01:03 Raymond Note Added: 0009052
04-01-06 10:39 the-me Note Added: 0009053
======================================================================
-------------------------------------------------------
This SF.Net email is sponsored by xPML, a groundbreaking scripting language
that extends applications into web and mobile media. Attend the live webcast
and join the prime developer group breaking into this new coding territory!
http://sel.as-us.falkag.net/sel?cmd=lnk&kid=110944&bid=241720&dat=121642
^ permalink raw reply
* Re: [CMT 05/16] qla4xxx: driver review ql4_fw.h
From: Doug Maxey @ 2006-04-01 8:38 UTC (permalink / raw)
To: Ravi Anand; +Cc: Linux SCSI Mailing List
This file defines several structs that use the M$ naming convention.
In linux, struct names are lower case, and typedefs are frowned on.
For the types that contain register layouts, the element types should
indicate the fact the underlying hardware is little endian with the
__leXX decl.
This file will shrink considerably when the -ENOTUSED items are
removed.
The sandman is calling, will finish in the morning. =)
++doug
--
gdiff --git a/drivers/scsi/qla4xxx/ql4_fw.h b/drivers/scsi/qla4xxx/ql4_fw.h
new file mode 100644
index 0000000..10f1852
--- /dev/null
+++ b/drivers/scsi/qla4xxx/ql4_fw.h
@@ -0,0 +1,1604 @@
+/*
+ * QLogic iSCSI HBA Driver
+ * Copyright (c) 2003-2006 QLogic Corporation
+ *
+ * See LICENSE.qla4xxx for copyright and licensing details.
+ */
+#ifndef _QLA4X_FW_H
+#define _QLA4X_FW_H
+
+#define MAX_PRST_DEV_DB_ENTRIES 64
+#define MIN_DISC_DEV_DB_ENTRY MAX_PRST_DEV_DB_ENTRIES
-ENOTUSED
+#define MAX_DEV_DB_ENTRIES 512
+
+/*************************************************************************
+ *
+ * ISP 4010 I/O Register Set Structure and Definitions
+ *
+ *************************************************************************/
+
+typedef struct _PORT_CTRL_STAT_REGS {
+ uint32_t ext_hw_conf; // 80 x50 R/W
+ uint32_t intChipConfiguration; // 84 x54 *
+ uint32_t port_ctrl; // 88 x58 *
+ uint32_t port_status; // 92 x5c *
+ uint32_t HostPrimMACHi; // 96 x60 *
+ uint32_t HostPrimMACLow; //100 x64 *
+ uint32_t HostSecMACHi; //104 x68 *
+ uint32_t HostSecMACLow; //108 x6c *
+ uint32_t EPPrimMACHi; //112 x70 *
+ uint32_t EPPrimMACLow; //116 x74 *
+ uint32_t EPSecMACHi; //120 x78 *
+ uint32_t EPSecMACLow; //124 x7c *
+ uint32_t HostPrimIPHi; //128 x80 *
+ uint32_t HostPrimIPMidHi; //132 x84 *
+ uint32_t HostPrimIPMidLow; //136 x88 *
+ uint32_t HostPrimIPLow; //140 x8c *
+ uint32_t HostSecIPHi; //144 x90 *
+ uint32_t HostSecIPMidHi; //148 x94 *
+ uint32_t HostSecIPMidLow; //152 x98 *
+ uint32_t HostSecIPLow; //156 x9c *
+ uint32_t EPPrimIPHi; //160 xa0 *
+ uint32_t EPPrimIPMidHi; //164 xa4 *
+ uint32_t EPPrimIPMidLow; //168 xa8 *
+ uint32_t EPPrimIPLow; //172 xac *
+ uint32_t EPSecIPHi; //176 xb0 *
+ uint32_t EPSecIPMidHi; //180 xb4 *
+ uint32_t EPSecIPMidLow; //184 xb8 *
+ uint32_t EPSecIPLow; //188 xbc *
+ uint32_t IPReassemblyTimeout; //192 xc0 *
+ uint32_t EthMaxFramePayload; //196 xc4 *
+ uint32_t TCPMaxWindowSize; //200 xc8 *
+ uint32_t TCPCurrentTimestampHi; //204 xcc *
+ uint32_t TCPCurrentTimestampLow; //208 xd0 *
+ uint32_t LocalRAMAddress; //212 xd4 *
+ uint32_t LocalRAMData; //216 xd8 *
+ uint32_t PCSReserved1; //220 xdc *
+ uint32_t gp_out; //224 xe0 *
+ uint32_t gp_in; //228 xe4 *
+ uint32_t ProbeMuxAddr; //232 xe8 *
+ uint32_t ProbeMuxData; //236 xec *
+ uint32_t ERMQueueBaseAddr0; //240 xf0 *
+ uint32_t ERMQueueBaseAddr1; //244 xf4 *
+ uint32_t MACConfiguration; //248 xf8 *
+ uint32_t port_err_status; //252 xfc COR
+} PORT_CTRL_STAT_REGS, *PPORT_CTRL_STAT_REGS;
+
+typedef struct _HOST_MEM_CFG_REGS {
+ uint32_t NetRequestQueueOut; // 80 x50 *
+ uint32_t NetRequestQueueOutAddrHi; // 84 x54 *
+ uint32_t NetRequestQueueOutAddrLow; // 88 x58 *
+ uint32_t NetRequestQueueBaseAddrHi; // 92 x5c *
+ uint32_t NetRequestQueueBaseAddrLow; // 96 x60 *
+ uint32_t NetRequestQueueLength; //100 x64 *
+ uint32_t NetResponseQueueIn; //104 x68 *
+ uint32_t NetResponseQueueInAddrHi; //108 x6c *
+ uint32_t NetResponseQueueInAddrLow; //112 x70 *
+ uint32_t NetResponseQueueBaseAddrHi; //116 x74 *
+ uint32_t NetResponseQueueBaseAddrLow; //120 x78 *
+ uint32_t NetResponseQueueLength; //124 x7c *
+ uint32_t req_q_out; //128 x80 *
+ uint32_t RequestQueueOutAddrHi; //132 x84 *
+ uint32_t RequestQueueOutAddrLow; //136 x88 *
+ uint32_t RequestQueueBaseAddrHi; //140 x8c *
+ uint32_t RequestQueueBaseAddrLow; //144 x90 *
+ uint32_t RequestQueueLength; //148 x94 *
+ uint32_t ResponseQueueIn; //152 x98 *
+ uint32_t ResponseQueueInAddrHi; //156 x9c *
+ uint32_t ResponseQueueInAddrLow; //160 xa0 *
+ uint32_t ResponseQueueBaseAddrHi; //164 xa4 *
+ uint32_t ResponseQueueBaseAddrLow; //168 xa8 *
+ uint32_t ResponseQueueLength; //172 xac *
+ uint32_t NetRxLargeBufferQueueOut; //176 xb0 *
+ uint32_t NetRxLargeBufferQueueBaseAddrHi; //180 xb4 *
+ uint32_t NetRxLargeBufferQueueBaseAddrLow; //184 xb8 *
+ uint32_t NetRxLargeBufferQueueLength; //188 xbc *
+ uint32_t NetRxLargeBufferLength; //192 xc0 *
+ uint32_t NetRxSmallBufferQueueOut; //196 xc4 *
+ uint32_t NetRxSmallBufferQueueBaseAddrHi; //200 xc8 *
+ uint32_t NetRxSmallBufferQueueBaseAddrLow; //204 xcc *
+ uint32_t NetRxSmallBufferQueueLength; //208 xd0 *
+ uint32_t NetRxSmallBufferLength; //212 xd4 *
+ uint32_t HMCReserved0[10]; //216 xd8 *
+} HOST_MEM_CFG_REGS, *PHOST_MEM_CFG_REGS;
+
+typedef struct _LOCAL_RAM_CFG_REGS {
+ uint32_t BufletSize; // 80 x50 *
+ uint32_t BufletMaxCount; // 84 x54 *
+ uint32_t BufletCurrCount; // 88 x58 *
+ uint32_t BufletPauseThresholdCount; // 92 x5c *
+ uint32_t BufletTCPWinThresholdHi; // 96 x60 *
+ uint32_t BufletTCPWinThresholdLow; //100 x64 *
+ uint32_t IPHashTableBaseAddr; //104 x68 *
+ uint32_t IPHashTableSize; //108 x6c *
+ uint32_t TCPHashTableBaseAddr; //112 x70 *
+ uint32_t TCPHashTableSize; //116 x74 *
+ uint32_t NCBAreaBaseAddr; //120 x78 *
+ uint32_t NCBMaxCount; //124 x7c *
+ uint32_t NCBCurrCount; //128 x80 *
+ uint32_t DRBAreaBaseAddr; //132 x84 *
+ uint32_t DRBMaxCount; //136 x88 *
+ uint32_t DRBCurrCount; //140 x8c *
+ uint32_t LRCReserved[28]; //144 x90 *
+} LOCAL_RAM_CFG_REGS, *PLOCAL_RAM_CFG_REGS;
+
+typedef struct _PROT_STAT_REGS {
+ uint32_t MACTxFrameCount; // 80 x50 R
+ uint32_t MACTxByteCount; // 84 x54 R
+ uint32_t MACRxFrameCount; // 88 x58 R
+ uint32_t MACRxByteCount; // 92 x5c R
+ uint32_t MACCRCErrCount; // 96 x60 R
+ uint32_t MACEncErrCount; //100 x64 R
+ uint32_t MACRxLengthErrCount; //104 x68 R
+ uint32_t IPTxPacketCount; //108 x6c R
+ uint32_t IPTxByteCount; //112 x70 R
+ uint32_t IPTxFragmentCount; //116 x74 R
+ uint32_t IPRxPacketCount; //120 x78 R
+ uint32_t IPRxByteCount; //124 x7c R
+ uint32_t IPRxFragmentCount; //128 x80 R
+ uint32_t IPDatagramReassemblyCount; //132 x84 R
+ uint32_t IPV6RxPacketCount; //136 x88 R
+ uint32_t IPErrPacketCount; //140 x8c R
+ uint32_t IPReassemblyErrCount; //144 x90 R
+ uint32_t TCPTxSegmentCount; //148 x94 R
+ uint32_t TCPTxByteCount; //152 x98 R
+ uint32_t TCPRxSegmentCount; //156 x9c R
+ uint32_t TCPRxByteCount; //160 xa0 R
+ uint32_t TCPTimerExpCount; //164 xa4 R
+ uint32_t TCPRxAckCount; //168 xa8 R
+ uint32_t TCPTxAckCount; //172 xac R
+ uint32_t TCPRxErrOOOCount; //176 xb0 R
+ uint32_t PSReserved0; //180 xb4 *
+ uint32_t TCPRxWindowProbeUpdateCount; //184 xb8 R
+ uint32_t ECCErrCorrectionCount; //188 xbc R
+ uint32_t PSReserved1[16]; //192 xc0 *
+} PROT_STAT_REGS, *PPROT_STAT_REGS;
+
+#define MBOX_REG_COUNT 8
+
+// remote register set (access via PCI memory read/write)
+typedef struct isp_reg_t {
+ uint32_t mailbox[MBOX_REG_COUNT];
+
+ uint32_t flash_address; /* 0x20 */
+ uint32_t flash_data;
+ uint32_t ctrl_status;
+
+ union {
+ struct {
+ uint32_t nvram;
+ uint32_t reserved1[2]; /* 0x30 */
+ } __attribute__ ((packed)) isp4010;
+ struct {
+ uint32_t intr_mask;
+ uint32_t nvram; /* 0x30 */
+ uint32_t semaphore;
+ } __attribute__ ((packed)) isp4022;
+ } u1;
+
+ uint32_t req_q_in; /* SCSI Request Queue Producer Index */
+ uint32_t rsp_q_out; /* SCSI Completion Queue Consumer Index */
+
+ uint32_t reserved2[4]; /* 0x40 */
+
+ union {
+ struct {
+ uint32_t ext_hw_conf; /* 0x50 */
+ uint32_t flow_ctrl;
+ uint32_t port_ctrl;
+ uint32_t port_status;
+
+ uint32_t reserved3[8]; /* 0x60 */
+
+ uint32_t req_q_out; /* 0x80 */
+
+ uint32_t reserved4[23]; /* 0x84 */
+
+ uint32_t gp_out; /* 0xe0 */
+ uint32_t gp_in;
+
+ uint32_t reserved5[5];
+
+ uint32_t port_err_status; /* 0xfc */
+ } __attribute__ ((packed)) isp4010;
+ struct {
+ union {
+ PORT_CTRL_STAT_REGS p0;
+ HOST_MEM_CFG_REGS p1;
+ LOCAL_RAM_CFG_REGS p2;
+ PROT_STAT_REGS p3;
+ uint32_t r_union[44];
+ };
+
+ } __attribute__ ((packed)) isp4022;
+ } u2;
+} isp_reg_t; //256 x100
+
+#define ISP_SEMAPHORE(ha) \
+ (IS_QLA4022(ha) ? \
+ &ha->reg->u1.isp4022.semaphore : \
+ &ha->reg->u1.isp4010.nvram)
+
+#define ISP_NVRAM(ha) \
+ (IS_QLA4022(ha) ? \
+ &ha->reg->u1.isp4022.nvram : \
+ &ha->reg->u1.isp4010.nvram)
+
+#define ISP_EXT_HW_CONF(ha) \
+ (IS_QLA4022(ha) ? \
+ &ha->reg->u2.isp4022.p0.ext_hw_conf : \
+ &ha->reg->u2.isp4010.ext_hw_conf)
+
+#define ISP_PORT_STATUS(ha) \
+ (IS_QLA4022(ha) ? \
+ &ha->reg->u2.isp4022.p0.port_status : \
+ &ha->reg->u2.isp4010.port_status)
+
+#define ISP_PORT_CTRL(ha) \
+ (IS_QLA4022(ha) ? \
+ &ha->reg->u2.isp4022.p0.port_ctrl : \
+ &ha->reg->u2.isp4010.port_ctrl)
+
+#define ISP_REQ_Q_OUT(ha) \
+ (IS_QLA4022(ha) ? \
+ &ha->reg->u2.isp4022.p1.req_q_out : \
+ &ha->reg->u2.isp4010.req_q_out)
-ENOTUSED
+
+#define ISP_PORT_ERROR_STATUS(ha) \
+ (IS_QLA4022(ha) ? \
+ &ha->reg->u2.isp4022.p0.port_err_status : \
+ &ha->reg->u2.isp4010.port_err_status)
+
+#define ISP_GP_OUT(ha) \
+ (IS_QLA4022(ha) ? \
+ &ha->reg->u2.isp4022.p0.gp_out : \
+ &ha->reg->u2.isp4010.gp_out)
+
+#define ISP_GP_IN(ha) \
+ (IS_QLA4022(ha) ? \
+ &ha->reg->u2.isp4022.p0.gp_in : \
+ &ha->reg->u2.isp4010.gp_in)
-ENOTUSED
+
+/* Semaphore Defines for 4010 */
+#define QL4010_DRVR_SEM_BITS 0x00000030
+#define QL4010_GPIO_SEM_BITS 0x000000c0
+#define QL4010_SDRAM_SEM_BITS 0x00000300
+#define QL4010_PHY_SEM_BITS 0x00000c00
+#define QL4010_NVRAM_SEM_BITS 0x00003000
+#define QL4010_FLASH_SEM_BITS 0x0000c000
+
+#define QL4010_DRVR_SEM_MASK 0x00300000
+#define QL4010_GPIO_SEM_MASK 0x00c00000
+#define QL4010_SDRAM_SEM_MASK 0x03000000
+#define QL4010_PHY_SEM_MASK 0x0c000000
+#define QL4010_NVRAM_SEM_MASK 0x30000000
+#define QL4010_FLASH_SEM_MASK 0xc0000000
+
+/* Semaphore Defines for 4022 */
+#define QL4022_RESOURCE_MASK_BASE_CODE 0x7
+#define QL4022_RESOURCE_BITS_BASE_CODE 0x4
+
+#define QL4022_DRVR_SEM_BITS (QL4022_RESOURCE_BITS_BASE_CODE << 1)
-ENOTUSED
+#define QL4022_DDR_RAM_SEM_BITS (QL4022_RESOURCE_BITS_BASE_CODE << 4)
-ENOTUSED
+#define QL4022_PHY_GIO_SEM_BITS (QL4022_RESOURCE_BITS_BASE_CODE << 7)
-ENOTUSED
+#define QL4022_NVRAM_SEM_BITS (QL4022_RESOURCE_BITS_BASE_CODE << 10)
-ENOTUSED
+#define QL4022_FLASH_SEM_BITS (QL4022_RESOURCE_BITS_BASE_CODE << 13)
-ENOTUSED
+
+#define QL4022_DRVR_SEM_MASK (QL4022_RESOURCE_MASK_BASE_CODE << (1+16))
+#define QL4022_DDR_RAM_SEM_MASK (QL4022_RESOURCE_MASK_BASE_CODE << (4+16))
+#define QL4022_PHY_GIO_SEM_MASK (QL4022_RESOURCE_MASK_BASE_CODE << (7+16))
+#define QL4022_NVRAM_SEM_MASK (QL4022_RESOURCE_MASK_BASE_CODE << (10+16))
+#define QL4022_FLASH_SEM_MASK (QL4022_RESOURCE_MASK_BASE_CODE << (13+16))
+
+#define QL4XXX_LOCK_FLASH(a) \
+ (IS_QLA4022(a) ? \
+ ql4xxx_sem_spinlock(a, QL4022_FLASH_SEM_MASK, (QL4022_RESOURCE_BITS_BASE_CODE | (a->mac_index)) << 13) : \
+ ql4xxx_sem_spinlock(a, QL4010_FLASH_SEM_MASK, QL4010_FLASH_SEM_BITS) )
+
+#define QL4XXX_LOCK_NVRAM(a) \
+ (IS_QLA4022(a) ? \
+ ql4xxx_sem_spinlock(a, QL4022_NVRAM_SEM_MASK, (QL4022_RESOURCE_BITS_BASE_CODE | (a->mac_index)) << 10) : \
+ ql4xxx_sem_spinlock(a, QL4010_NVRAM_SEM_MASK, QL4010_NVRAM_SEM_BITS) )
+
+#define QL4XXX_LOCK_GIO(a) \
+ (IS_QLA4022(a) ? \
+ ql4xxx_sem_spinlock(a, QL4022_PHY_GIO_SEM_MASK, (QL4022_RESOURCE_BITS_BASE_CODE | (a->mac_index)) << 7) : \
+ ql4xxx_sem_spinlock(a, QL4010_GPIO_SEM_MASK, QL4010_GPIO_SEM_BITS) )
+
-ENOTUSED
+#define QL4XXX_LOCK_PHY(a) \
+ (IS_QLA4022(a) ? \
+ ql4xxx_sem_spinlock(a, QL4022_PHY_GIO_SEM_MASK, (QL4022_RESOURCE_BITS_BASE_CODE | (a->mac_index)) << 7) : \
+ ql4xxx_sem_spinlock(a, QL4010_PHY_SEM_MASK, QL4010_PHY_SEM_BITS) )
-ENOTUSED
+
+#define QL4XXX_LOCK_DDR_RAM(a) \
+ (IS_QLA4022(a) ? \
+ ql4xxx_sem_spinlock(a, QL4022_DDR_RAM_SEM_MASK, (QL4022_RESOURCE_BITS_BASE_CODE | (a->mac_index)) << 4) : \
+ ql4xxx_sem_spinlock(a, QL4010_SDRAM_SEM_MASK, QL4010_SDRAM_SEM_BITS) )
+
-ENOTUSED
+#define QL4XXX_LOCK_DRVR(a) \
+ (IS_QLA4022(a) ? \
+ ql4xxx_sem_lock(a, QL4022_DRVR_SEM_MASK, (QL4022_RESOURCE_BITS_BASE_CODE | (a->mac_index)) << 1) : \
+ ql4xxx_sem_lock(a, QL4010_DRVR_SEM_MASK, QL4010_DRVR_SEM_BITS) )
+
+#define QL4XXX_UNLOCK_DRVR(a) \
+ (IS_QLA4022(a) ? \
+ ql4xxx_sem_unlock(a, QL4022_DRVR_SEM_MASK) : \
+ ql4xxx_sem_unlock(a, QL4010_DRVR_SEM_MASK) )
+
+#define QL4XXX_UNLOCK_GIO(a) \
+ (IS_QLA4022(a) ? \
+ ql4xxx_sem_unlock(a, QL4022_PHY_GIO_SEM_MASK) : \
+ ql4xxx_sem_unlock(a, QL4010_GPIO_SEM_MASK) )
+
-ENOTUSED
+#define QL4XXX_UNLOCK_DDR_RAM(a) \
+ (IS_QLA4022(a) ? \
+ ql4xxx_sem_unlock(a, QL4022_DDR_RAM_SEM_MASK) : \
+ ql4xxx_sem_unlock(a, QL4010_SDRAM_SEM_MASK) )
+
-ENOTUSED
+#define QL4XXX_UNLOCK_PHY(a) \
+ (IS_QLA4022(a) ? \
+ ql4xxx_sem_unlock(a, QL4022_PHY_GIO_SEM_MASK) : \
+ ql4xxx_sem_unlock(a, QL4010_PHY_SEM_MASK) )
+
-ENOTUSED
+#define QL4XXX_UNLOCK_NVRAM(a) \
+ (IS_QLA4022(a) ? \
+ ql4xxx_sem_unlock(a, QL4022_NVRAM_SEM_MASK) : \
+ ql4xxx_sem_unlock(a, QL4010_NVRAM_SEM_MASK) )
+
+#define QL4XXX_UNLOCK_FLASH(a) \
+ (IS_QLA4022(a) ? \
+ ql4xxx_sem_unlock(a, QL4022_FLASH_SEM_MASK) : \
+ ql4xxx_sem_unlock(a, QL4010_FLASH_SEM_MASK) )
+
+#define QL4XXX_LOCK_DRVR_WAIT(a) \
+{ \
+ int i = 0; \
+ while (1) { \
+ if (QL4XXX_LOCK_DRVR(a) == 0) { \
+ msleep(10); \
+ if (!i) { \
+ DEBUG2(printk("scsi%ld: %s: Waiting for " \
+ "Global Init Semaphore...n", a->host_no, \
+ __func__)); \
+ i++; \
+ } \
+ } else { \
+ DEBUG2(printk("scsi%ld: %s: Global Init Semaphore " \
+ "acquired.n", a->host_no, __func__)); \
+ break; \
+ } \
+ } \
+}
+
+/* Page # defines for 4022 */
+#define PORT_CTRL_STAT_PAGE 0 /* 4022 */
+#define HOST_MEM_CFG_PAGE 1 /* 4022 */
+#define LOCAL_RAM_CFG_PAGE 2 /* 4022 */
-ENOTUSED
+#define PROT_STAT_PAGE 3 /* 4022 */
-ENOTUSED
+
+/* Register Mask - sets corresponding mask bits in the upper word */
+#define SET_RMASK(val) ((val & 0xffff) | (val << 16))
+#define CLR_RMASK(val) (0 | (val << 16))
+
+// ctrl_status definitions
+#define CSR_SCSI_PAGE_SELECT 0x00000003
+#define CSR_SCSI_INTR_ENABLE 0x00000004 /* 4010 */
+#define CSR_SCSI_RESET_INTR 0x00000008
+#define CSR_SCSI_COMPLETION_INTR 0x00000010
+#define CSR_SCSI_PROCESSOR_INTR 0x00000020
+#define CSR_INTR_RISC 0x00000040
+#define CSR_BOOT_ENABLE 0x00000080
+#define CSR_NET_PAGE_SELECT 0x00000300 /* 4010 */
-ENOTUSED
+#define CSR_NET_INTR_ENABLE 0x00000400 /* 4010 */
-ENOTUSED
+#define CSR_FUNC_NUM 0x00000700 /* 4022 */
+#define CSR_PCI_FUNC_NUM_MASK 0x00000300 /* 4022 */
-ENOTUSED
+#define CSR_NET_RESET_INTR 0x00000800 /* 4010 */
+#define CSR_NET_COMPLETION_INTR 0x00001000 /* 4010 */
-ENOTUSED
+#define CSR_FORCE_SOFT_RESET 0x00002000 /* 4022 */
+#define CSR_FATAL_ERROR 0x00004000
+#define CSR_SOFT_RESET 0x00008000
+#define ISP_CONTROL_FN_MASK CSR_FUNC_NUM
+#define ISP_CONTROL_FN0_NET 0x0400
-ENOTUSED
+#define ISP_CONTROL_FN0_SCSI 0x0500
+#define ISP_CONTROL_FN1_NET 0x0600
-ENOTUSED
+#define ISP_CONTROL_FN1_SCSI 0x0700
+
+#define INTR_PENDING (CSR_SCSI_COMPLETION_INTR | CSR_SCSI_PROCESSOR_INTR | CSR_SCSI_RESET_INTR)
+
+/* ISP InterruptMask definitions */
+#define IMR_SCSI_INTR_ENABLE 0x00000004 /* 4022 */
+
+/* ISP 4022 nvram definitions */
+#define NVR_WRITE_ENABLE 0x00000010 /* 4022 */
+
+// ISP port_ctrl definitions
+#define PCR_CONFIG_COMPLETE 0x00008000 /* 4022 */
-ENOTUSED
+#define PCR_BIOS_BOOTED_FIRMWARE 0x00008000 /* 4010 */
-ENOTUSED
+#define PCR_ENABLE_SERIAL_DATA 0x00001000 /* 4010 */
-ENOTUSED
+#define PCR_SERIAL_DATA_OUT 0x00000800 /* 4010 */
-ENOTUSED
+#define PCR_ENABLE_SERIAL_CLOCK 0x00000400 /* 4010 */
-ENOTUSED
+#define PCR_SERIAL_CLOCK 0x00000200 /* 4010 */
-ENOTUSED
+
+// ISP port_status definitions
+#define PSR_CONFIG_COMPLETE 0x00000001 /* 4010 */
-ENOTUSED
+#define PSR_INIT_COMPLETE 0x00000200
-ENOTUSED
+
+// ISP Semaphore definitions
+#define SR_FIRWMARE_BOOTED 0x00000001
-ENOTUSED
+
+// ISP General Purpose Output definitions
+#define GPOR_TOPCAT_RESET 0x00000004
+
+// shadow registers (DMA'd from HA to system memory. read only)
+typedef struct {
+ /* SCSI Request Queue Consumer Index */
+ uint32_t req_q_out; // 0 x0 R
+
+ /* SCSI Completion Queue Producer Index */
+ uint32_t rsp_q_in; // 4 x4 R
+} shadow_regs_t; // 8 x8
+
+#define EHWC_PROT_METHOD_NONE 0
+#define EHWC_PROT_METHOD_BYTE_PARITY 1
+#define EHWC_PROT_METHOD_ECC 2
+#define EHWC_SDRAM_BANKS_1 0
+#define EHWC_SDRAM_BANKS_2 1
+#define EHWC_SDRAM_WIDTH_8_BIT 0
+#define EHWC_SDRAM_WIDTH_16_BIT 1
+#define EHWC_SDRAM_CHIP_SIZE_64MB 0
+#define EHWC_SDRAM_CHIP_SIZE_128MB 1
+#define EHWC_SDRAM_CHIP_SIZE_256MB 2
+#define EHWC_MEM_TYPE_SYNC_FLOWTHROUGH 0
+#define EHWC_MEM_TYPE_SYNC_PIPELINE 1
+#define EHWC_WRITE_BURST_512 0
+#define EHWC_WRITE_BURST_1024 1
+#define EHWC_WRITE_BURST_2048 2
+#define EHWC_WRITE_BURST_4096 3
-ENOTUSED. None of the EHWC_* macros above are used.
+
+// External hardware configuration register
+typedef union _EXTERNAL_HW_CONFIG_REG {
+ struct {
+ uint32_t bReserved0:1;
+ uint32_t bSDRAMProtectionMethod:2;
+ uint32_t bSDRAMBanks:1;
+ uint32_t bSDRAMChipWidth:1;
+ uint32_t bSDRAMChipSize:2;
+ uint32_t bParityDisable:1;
+ uint32_t bExternalMemoryType:1;
+ uint32_t bFlashBIOSWriteEnable:1;
+ uint32_t bFlashUpperBankSelect:1;
+ uint32_t bWriteBurst:2;
+ uint32_t bReserved1:3;
+ uint32_t bMask:16;
+ };
+ uint32_t Asuint32_t;
+} EXTERNAL_HW_CONFIG_REG, *PEXTERNAL_HW_CONFIG_REG;
Assume that all the above define hardware, which need the __leNN
treatment.
+
+/*************************************************************************
+ *
+ * Mailbox Commands Structures and Definitions
+ *
+ *************************************************************************/
+
+// Mailbox command definitions
+#define MBOX_CMD_LOAD_RISC_RAM_EXT 0x0001
+#define MBOX_CMD_EXECUTE_FW 0x0002
+#define MBOX_CMD_DUMP_RISC_RAM_EXT 0x0003
+#define MBOX_CMD_WRITE_RISC_RAM_EXT 0x0004
+#define MBOX_CMD_READ_RISC_RAM_EXT 0x0005
+#define MBOX_CMD_REGISTER_TEST 0x0006
+#define MBOX_CMD_VERIFY_CHECKSUM 0x0007
-ENOTUSED. All the above MBOX_CMD_* are unused.
+#define MBOX_CMD_ABOUT_FW 0x0009
+#define MBOX_CMD_LOOPBACK_DIAG 0x000A
-ENOTUSED
+#define MBOX_CMD_PING 0x000B
+#define MBOX_CMD_CHECKSUM_FW 0x000E
+#define MBOX_CMD_RESET_FW 0x0014
+#define MBOX_CMD_ABORT_TASK 0x0015
-ENOTUSED. All above after MBOX_CMD_ABOUT_FW.
+#define MBOX_CMD_LUN_RESET 0x0016
+#define MBOX_CMD_TARGET_WARM_RESET 0x0017
-ENOTUSED
+#define MBOX_CMD_TARGET_COLD_RESET 0x0018
+#define MBOX_CMD_ABORT_QUEUE 0x001C
+#define MBOX_CMD_GET_QUEUE_STATUS 0x001D
+#define MBOX_CMD_GET_MANAGEMENT_DATA 0x001E
-ENOTUSED . All above after MBOX_CMD_LUN_RESET.
+#define MBOX_CMD_GET_FW_STATUS 0x001F
+#define MBOX_CMD_SET_ISNS_SERVICE 0x0021
-ENOTUSED
+#define ISNS_DISABLE 0
-ENOTUSED
+#define ISNS_ENABLE 1
-ENOTUSED
+#define ISNS_STATUS 2
-ENOTUSED
+#define MBOX_CMD_COPY_FLASH 0x0024
-ENOTUSED
+#define COPY_FLASH_OPTION_PRIM_TO_SEC 0
-ENOTUSED
+#define COPY_FLASH_OPTION_SEC_TO_PRIM 1
-ENOTUSED
+#define MBOX_CMD_WRITE_FLASH 0x0025
-ENOTUSED
+#define WRITE_FLASH_OPTION_HOLD_DATA 0
-ENOTUSED
+#define WRITE_FLASH_OPTION_COMMIT_DATA 2
-ENOTUSED
+#define WRITE_FLASH_OPTION_FLASH_DATA 3
-ENOTUSED
+#define MBOX_CMD_READ_FLASH 0x0026
+#define MBOX_CMD_GET_QUEUE_PARAMS 0x0029
-ENOTUSED
+#define MBOX_CMD_CLEAR_DATABASE_ENTRY 0x0031
+#define MBOX_CMD_SET_QUEUE_PARAMS 0x0039
-ENOTUSED
+#define MBOX_CMD_CONN_CLOSE_SESS_LOGOUT 0x0056
+#define LOGOUT_OPTION_CLOSE_SESSION 0x01
+#define LOGOUT_OPTION_RELOGIN 0x02
+#define MBOX_CMD_EXECUTE_IOCB_A64 0x005A
+#define MBOX_CMD_INITIALIZE_FIRMWARE 0x0060
+#define MBOX_CMD_GET_INIT_FW_CTRL_BLOCK 0x0061
+#define MBOX_CMD_REQUEST_DATABASE_ENTRY 0x0062
-ENOTUSED
+#define MBOX_CMD_SET_DATABASE_ENTRY 0x0063
+#define MBOX_CMD_GET_DATABASE_ENTRY 0x0064
+#define DDB_DS_UNASSIGNED 0x00
+#define DDB_DS_NO_CONNECTION_ACTIVE 0x01
+#define DDB_DS_DISCOVERY 0x02
-ENOTUSED
+#define DDB_DS_NO_SESSION_ACTIVE 0x03
-ENOTUSED
+#define DDB_DS_SESSION_ACTIVE 0x04
+#define DDB_DS_LOGGING_OUT 0x05
-ENOTUSED
+#define DDB_DS_SESSION_FAILED 0x06
+#define DDB_DS_LOGIN_IN_PROCESS 0x07
+#define DELETEABLE_DDB_DS(ds) ((ds == DDB_DS_UNASSIGNED) || \
+ (ds == DDB_DS_NO_CONNECTION_ACTIVE) || \
+ (ds == DDB_DS_SESSION_FAILED))
-ENOTUSED
+#define MBOX_CMD_CLEAR_ACA 0x0065
-ENOTUSED
+#define MBOX_CMD_CLEAR_TASK_SET 0x0067
-ENOTUSED
+#define MBOX_CMD_ABORT_TASK_SET 0x0068
-ENOTUSED
+#define MBOX_CMD_GET_FW_STATE 0x0069
+
+/* Mailbox 1 */
+#define FW_STATE_READY 0x0000
+#define FW_STATE_CONFIG_WAIT 0x0001
+#define FW_STATE_WAIT_LOGIN 0x0002
-ENOTUSED
+#define FW_STATE_ERROR 0x0004
+#define FW_STATE_DHCP_IN_PROGRESS 0x0008
+#define FW_STATE_ISNS_IN_PROGRESS 0x0010
-ENOTUSED
+#define FW_STATE_TOPCAT_INIT_IN_PROGRESS 0x0040
-ENOTUSED
+
+/* Mailbox 3 */
+#define FW_ADDSTATE_COPPER_MEDIA 0x0000
-ENOTUSED
+#define FW_ADDSTATE_OPTICAL_MEDIA 0x0001
+#define FW_ADDSTATE_DHCP_ENABLED 0x0002
additional whitespace needs to be trimmed. looks like a tab
vs. single space.
+#define FW_ADDSTATE_DHCP_LEASE_ACQUIRED 0x0004
-ENOTUSED
+#define FW_ADDSTATE_DHCP_LEASE_EXPIRED 0x0008
-ENOTUSED
+#define FW_ADDSTATE_LINK_UP 0x0010
+#define FW_ADDSTATE_ISNS_SVC_ENABLED 0x0020
+#define FW_ADDSTATE_TOPCAT_NOT_INITIALIZED 0x0040
-ENOTUSED
+#define MBOX_CMD_GET_INIT_FW_CTRL_BLOCK_DEFAULTS 0x006A
-ENOTUSED
+#define MBOX_CMD_GET_DATABASE_ENTRY_DEFAULTS 0x006B
-ENOTUSED
+#define MBOX_CMD_CONN_OPEN_SESS_LOGIN 0x0074
+#define MBOX_CMD_DIAGNOSTICS_TEST_RESULTS 0x0075 /* 4010 only */
-ENOTUSED
+#define DIAG_TEST_LOCAL_RAM_SIZE 0x0002
-ENOTUSED
+#define DIAG_TEST_LOCAL_RAM_READ_WRITE 0x0003
-ENOTUSED
+#define DIAG_TEST_RISC_RAM 0x0004
-ENOTUSED
+#define DIAG_TEST_NVRAM 0x0005
-ENOTUSED
+#define DIAG_TEST_FLASH_ROM 0x0006
-ENOTUSED
+#define DIAG_TEST_NW_INT_LOOPBACK 0x0007
-ENOTUSED
+#define DIAG_TEST_NW_EXT_LOOPBACK 0x0008
-ENOTUSED
+#define MBOX_CMD_GET_CRASH_RECORD 0x0076 /* 4010 only */
+#define MBOX_CMD_GET_CONN_EVENT_LOG 0x0077
+#define MBOX_CMD_RESTORE_FACTORY_DEFAULTS 0x0087
-ENOTUSED
+#define MBOX_CMD_NOP 0x00FF
-ENOTUSED
+
+// Mailbox status definitions
+#define MBOX_COMPLETION_STATUS 4
+#define MBOX_STS_BUSY 0x0007
+#define MBOX_STS_INTERMEDIATE_COMPLETION 0x1000
+#define MBOX_STS_COMMAND_COMPLETE 0x4000
+#define MBOX_STS_INVALID_COMMAND 0x4001
-ENOTUSED
+#define MBOX_STS_HOST_INTERFACE_ERROR 0x4002
-ENOTUSED
+#define MBOX_STS_TEST_FAILED 0x4003
-ENOTUSED
+#define MBOX_STS_COMMAND_ERROR 0x4005
+#define MBOX_STS_COMMAND_PARAMETER_ERROR 0x4006
-ENOTUSED
+#define MBOX_STS_TARGET_MODE_INIT_FAIL 0x4007
-ENOTUSED
+#define MBOX_STS_INITIATOR_MODE_INIT_FAIL 0x4008
-ENOTUSED
+
+#define MBOX_ASYNC_EVENT_STATUS 8
+#define MBOX_ASTS_SYSTEM_ERROR 0x8002
+#define MBOX_ASTS_REQUEST_TRANSFER_ERROR 0x8003
+#define MBOX_ASTS_RESPONSE_TRANSFER_ERROR 0x8004
+#define MBOX_ASTS_PROTOCOL_STATISTIC_ALARM 0x8005
+#define MBOX_ASTS_SCSI_COMMAND_PDU_REJECTED 0x8006
+#define MBOX_ASTS_LINK_UP 0x8010
+#define MBOX_ASTS_LINK_DOWN 0x8011
+#define MBOX_ASTS_DATABASE_CHANGED 0x8014
+#define MBOX_ASTS_UNSOLICITED_PDU_RECEIVED 0x8015
+#define MBOX_ASTS_SELF_TEST_FAILED 0x8016
+#define MBOX_ASTS_LOGIN_FAILED 0x8017
+#define MBOX_ASTS_DNS 0x8018
+#define MBOX_ASTS_HEARTBEAT 0x8019
+#define MBOX_ASTS_NVRAM_INVALID 0x801A
+#define MBOX_ASTS_MAC_ADDRESS_CHANGED 0x801B
+#define MBOX_ASTS_IP_ADDRESS_CHANGED 0x801C
+#define MBOX_ASTS_DHCP_LEASE_EXPIRED 0x801D
+#define MBOX_ASTS_DHCP_LEASE_ACQUIRED 0x801F
+#define MBOX_ASTS_ISNS_UNSOLICITED_PDU_RECEIVED 0x8021
-ENOTUSED
+#define ISNS_EVENT_DATA_RECEIVED 0x0000
-ENOTUSED
+#define ISNS_EVENT_CONNECTION_OPENED 0x0001
-ENOTUSED
+#define ISNS_EVENT_CONNECTION_FAILED 0x0002
-ENOTUSED
+#define MBOX_ASTS_IPSEC_SYSTEM_FATAL_ERROR 0x8022
+#define MBOX_ASTS_SUBNET_STATE_CHANGE 0x8027
+
+/*************************************************************************/
+
+/* Host Adapter Initialization Control Block (from host) */
+typedef struct _INIT_FW_CTRL_BLK {
+ uint8_t Version; /* 00 */
+ uint8_t Control; /* 01 */
+
+ uint16_t FwOptions; /* 02-03 */
+#define FWOPT_HEARTBEAT_ENABLE 0x1000
+#define FWOPT_MARKER_DISABLE 0x0400
+#define FWOPT_PROTOCOL_STAT_ALARM_ENABLE 0x0200
+#define FWOPT_TARGET_ACCEPT_AEN_ENABLE 0x0100
+#define FWOPT_ACCESS_CONTROL_ENABLE 0x0080
+#define FWOPT_SESSION_MODE 0x0040
+#define FWOPT_INITIATOR_MODE 0x0020
+#define FWOPT_TARGET_MODE 0x0010
+#define FWOPT_FAST_POSTING 0x0008
+#define FWOPT_AUTO_TARGET_INFO_DISABLE 0x0004
+#define FWOPT_SENSE_BUFFER_DATA_ENABLE 0x0002
+
+ uint16_t ExecThrottle; /* 04-05 */
+ uint8_t RetryCount; /* 06 */
+ uint8_t RetryDelay; /* 07 */
+ uint16_t MaxEthFrPayloadSize; /* 08-09 */
+ uint16_t AddFwOptions; /* 0A-0B */
+#define ADDFWOPT_AUTOCONNECT_DISABLE 0x0002
+#define ADDFWOPT_SUSPEND_ON_FW_ERROR 0x0001
+
+ uint8_t HeartbeatInterval; /* 0C */
+ uint8_t InstanceNumber; /* 0D */
+ uint16_t RES2; /* 0E-0F */
+ uint16_t ReqQConsumerIndex; /* 10-11 */
+ uint16_t ComplQProducerIndex; /* 12-13 */
+ uint16_t ReqQLen; /* 14-15 */
+ uint16_t ComplQLen; /* 16-17 */
+ uint32_t ReqQAddrLo; /* 18-1B */
+ uint32_t ReqQAddrHi; /* 1C-1F */
+ uint32_t ComplQAddrLo; /* 20-23 */
+ uint32_t ComplQAddrHi; /* 24-27 */
+ uint32_t ShadowRegBufAddrLo; /* 28-2B */
+ uint32_t ShadowRegBufAddrHi; /* 2C-2F */
+
+ uint16_t iSCSIOptions; /* 30-31 */
+#define IOPT_RCV_ISCSI_MARKER_ENABLE 0x8000
+#define IOPT_SEND_ISCSI_MARKER_ENABLE 0x4000
+#define IOPT_HEADER_DIGEST_ENABLE 0x2000
+#define IOPT_DATA_DIGEST_ENABLE 0x1000
+#define IOPT_IMMEDIATE_DATA_ENABLE 0x0800
+#define IOPT_INITIAL_R2T_ENABLE 0x0400
+#define IOPT_DATA_SEQ_IN_ORDER 0x0200
+#define IOPT_DATA_PDU_IN_ORDER 0x0100
+#define IOPT_CHAP_AUTH_ENABLE 0x0080
+#define IOPT_SNACK_REQ_ENABLE 0x0040
+#define IOPT_DISCOVERY_LOGOUT_ENABLE 0x0020
+#define IOPT_BIDIR_CHAP_ENABLE 0x0010
+
+ uint16_t TCPOptions; /* 32-33 */
+#define TOPT_ISNS_ENABLE 0x4000
+#define TOPT_SLP_USE_DA_ENABLE 0x2000
+#define TOPT_AUTO_DISCOVERY_ENABLE 0x1000
+#define TOPT_SLP_UA_ENABLE 0x0800
+#define TOPT_SLP_SA_ENABLE 0x0400
+#define TOPT_DHCP_ENABLE 0x0200
+#define TOPT_GET_DNS_VIA_DHCP_ENABLE 0x0100
+#define TOPT_GET_SLP_VIA_DHCP_ENABLE 0x0080
+#define TOPT_LEARN_ISNS_IP_ADDR_ENABLE 0x0040
+#define TOPT_NAGLE_DISABLE 0x0020
+#define TOPT_TIMER_SCALE_MASK 0x000E
+#define TOPT_TIME_STAMP_ENABLE 0x0001
+
+ uint16_t IPOptions; /* 34-35 */
+#define IPOPT_FRAG_DISABLE 0x0010
+#define IPOPT_PAUSE_FRAME_ENABLE 0x0002
+#define IPOPT_IP_ADDRESS_VALID 0x0001
+
+ uint16_t MaxPDUSize; /* 36-37 */
+ uint16_t RcvMarkerInt; /* 38-39 */
+ uint16_t SndMarkerInt; /* 3A-3B */
+ uint16_t InitMarkerlessInt; /* 3C-3D */
+ uint16_t FirstBurstSize; /* 3E-3F */
+ uint16_t DefaultTime2Wait; /* 40-41 */
+ uint16_t DefaultTime2Retain; /* 42-43 */
+ uint16_t MaxOutStndngR2T; /* 44-45 */
+ uint16_t KeepAliveTimeout; /* 46-47 */
+ uint16_t PortNumber; /* 48-49 */
+ uint16_t MaxBurstSize; /* 4A-4B */
+ uint32_t RES4; /* 4C-4F */
+ uint8_t IPAddr[4]; /* 50-53 */
+ uint8_t RES5[12]; /* 54-5F */
+ uint8_t SubnetMask[4]; /* 60-63 */
+ uint8_t RES6[12]; /* 64-6F */
+ uint8_t GatewayIPAddr[4]; /* 70-73 */
+ uint8_t RES7[12]; /* 74-7F */
+ uint8_t PriDNSIPAddr[4]; /* 80-83 */
+ uint8_t SecDNSIPAddr[4]; /* 84-87 */
+ uint8_t RES8[8]; /* 88-8F */
+ uint8_t Alias[32]; /* 90-AF */
+ uint8_t TargAddr[8]; /* B0-B7 *///FIXME: Remove??
+ uint8_t CHAPNameSecretsTable[8]; /* B8-BF */
+ uint8_t EthernetMACAddr[6]; /* C0-C5 */
+ uint16_t TargetPortalGroup; /* C6-C7 */
+ uint8_t SendScale; /* C8 */
+ uint8_t RecvScale; /* C9 */
+ uint8_t TypeOfService; /* CA */
+ uint8_t Time2Live; /* CB */
+ uint16_t VLANPriority; /* CC-CD */
+ uint16_t Reserved8; /* CE-CF */
+ uint8_t SecIPAddr[4]; /* D0-D3 */
+ uint8_t Reserved9[12]; /* D4-DF */
+ uint8_t iSNSIPAddr[4]; /* E0-E3 */
+ uint16_t iSNSServerPortNumber; /* E4-E5 */
+ uint8_t Reserved10[10]; /* E6-EF */
+ uint8_t SLPDAIPAddr[4]; /* F0-F3 */
+ uint8_t Reserved11[12]; /* F4-FF */
+ uint8_t iSCSINameString[256]; /* 100-1FF */
+} INIT_FW_CTRL_BLK;
Convention is that struct names are lower case. This struct also needs
the __leXX treatment for registers that are larger than a byte.
+
+typedef struct {
+ INIT_FW_CTRL_BLK init_fw_cb;
+ uint32_t Cookie;
+#define INIT_FW_CTRL_BLK_COOKIE 0x11BEAD5A
+} FLASH_INIT_FW_CTRL_BLK;
-ENOTUSED
+
+/*************************************************************************/
+
+typedef struct _DEV_DB_ENTRY {
+ uint8_t options; /* 00 */
+#define DDB_OPT_DISABLE 0x08 /* do not connect to device */
+#define DDB_OPT_ACCESSGRANTED 0x04
+#define DDB_OPT_TARGET 0x02 /* device is a target */
+#define DDB_OPT_INITIATOR 0x01 /* device is an initiator */
+
+ uint8_t control; /* 01 */
+#define DDB_CTRL_DATABASE_ENTRY_STATE 0xC0
+#define DDB_CTRL_SESSION_RECOVERY 0x10
+#define DDB_CTRL_SENDING 0x08
+#define DDB_CTRL_XFR_PENDING 0x04
+#define DDB_CTRL_QUEUE_ABORTED 0x02
+#define DDB_CTRL_LOGGED_IN 0x01
+
+ uint16_t exeThrottle; /* 02-03 */
+ uint16_t exeCount; /* 04-05 */
+ uint8_t retryCount; /* 06 */
+ uint8_t retryDelay; /* 07 */
+ uint16_t iSCSIOptions; /* 08-09 */
+#define DDB_IOPT_RECV_ISCSI_MARKER_ENABLE 0x8000
+#define DDB_IOPT_SEND_ISCSI_MARKER_ENABLE 0x4000
+#define DDB_IOPT_HEADER_DIGEST_ENABLE 0x2000
+#define DDB_IOPT_DATA_DIGEST_ENABLE 0x1000
+#define DDB_IOPT_IMMEDIATE_DATA_ENABLE 0x0800
+#define DDB_IOPT_INITIAL_R2T_ENABLE 0x0400
+#define DDB_IOPT_DATA_SEQUENCE_IN_ORDER 0x0200
+#define DDB_IOPT_DATA_PDU_IN_ORDER 0x0100
+#define DDB_IOPT_CHAP_AUTH_ENABLE 0x0080
+#define DDB_IOPT_BIDIR_CHAP_CHAL_ENABLE 0x0010
+#define DDB_IOPT_RESERVED2 0x007F
+
+ uint16_t TCPOptions; /* 0A-0B */
+#define DDB_TOPT_NAGLE_DISABLE 0x0020
+#define DDB_TOPT_TIMER_SCALE_MASK 0x000E
+#define DDB_TOPT_TIME_STAMP_ENABLE 0x0001
+
+ uint16_t IPOptions; /* 0C-0D */
+#define DDB_IPOPT_FRAG_DISABLE 0x0002
+#define DDB_IPOPT_IP_ADDRESS_VALID 0x0001
+
+ uint16_t maxPDUSize; /* 0E-0F */
+ uint16_t rcvMarkerInt; /* 10-11 */
+ uint16_t sndMarkerInt; /* 12-13 */
+ uint16_t iSCSIMaxSndDataSegLen; /* 14-15 */
+ uint16_t firstBurstSize; /* 16-17 */
+ uint16_t minTime2Wait; /* 18-19 : RA :default_time2wait */
+ uint16_t maxTime2Retain; /* 1A-1B */
+ uint16_t maxOutstndngR2T; /* 1C-1D */
+ uint16_t keepAliveTimeout; /* 1E-1F */
+ uint8_t ISID[6]; /* 20-25 big-endian, must be converted to little-endian */
+ uint16_t TSID; /* 26-27 */
+ uint16_t portNumber; /* 28-29 */
+ uint16_t maxBurstSize; /* 2A-2B */
+ uint16_t taskMngmntTimeout; /* 2C-2D */
+ uint16_t reserved1; /* 2E-2F */
+ uint8_t ipAddr[0x10]; /* 30-3F */
+ uint8_t iSCSIAlias[0x20]; /* 40-5F */
+ uint8_t targetAddr[0x20]; /* 60-7F */
+ uint8_t userID[0x20]; /* 80-9F */
+ uint8_t password[0x20]; /* A0-BF */
+ uint8_t iscsiName[0x100]; /* C0-1BF : xxzzy Make this a pointer to a string so we don't
+ have to reserve soooo much RAM */
+ uint16_t ddbLink; /* 1C0-1C1 */
+ uint16_t CHAPTableIndex; /* 1C2-1C3 */
+ uint16_t TargetPortalGroup; /* 1C4-1C5 */
+ uint16_t reserved2[2]; /* 1C6-1C7 */
+ uint32_t statSN; /* 1C8-1CB */
+ uint32_t expStatSN; /* 1CC-1CF */
+ uint16_t reserved3[0x2C]; /* 1D0-1FB */
+ uint16_t ddbValidCookie; /* 1FC-1FD */
+ uint16_t ddbValidSize; /* 1FE-1FF */
+} DEV_DB_ENTRY;
Convention is that struct names are lower case.
+
+/*************************************************************************/
+
+// Flash definitions
+#define FLASH_FW_IMG_PAGE_SIZE 0x20000
-ENOTUSED
+#define FLASH_FW_IMG_PAGE(addr) (0xfffe0000 & (addr))
-ENOTUSED
+#define FLASH_STRUCTURE_TYPE_MASK 0x0f000000
-ENOTUSED
+
+#define FLASH_OFFSET_FW_LOADER_IMG 0x00000000
-ENOTUSED
+#define FLASH_OFFSET_SECONDARY_FW_IMG 0x01000000
-ENOTUSED
+#define FLASH_OFFSET_SYS_INFO 0x02000000
+#define FLASH_OFFSET_DRIVER_BLK 0x03000000
-ENOTUSED
+#define FLASH_OFFSET_INIT_FW_CTRL_BLK 0x04000000
-ENOTUSED
+#define FLASH_OFFSET_DEV_DB_AREA 0x05000000
-ENOTUSED
+#define FLASH_OFFSET_CHAP_AREA 0x06000000
-ENOTUSED
+#define FLASH_OFFSET_PRIMARY_FW_IMG 0x07000000
-ENOTUSED
+#define FLASH_READ_RAM_FLAG 0x10000000
-ENOTUSED
+
+#define MAX_FLASH_SZ 0x400000 /* 4M flash */
-ENOTUSED
+#define FLASH_DEFAULTBLOCKSIZE 0x20000
+#define FLASH_EOF_OFFSET FLASH_DEFAULTBLOCKSIZE - 8 /* 4 bytes for EOF signature */
+#define FLASH_FILESIZE_OFFSET FLASH_EOF_OFFSET - 4 /* 4 bytes for file size */
+#define FLASH_CKSUM_OFFSET FLASH_FILESIZE_OFFSET - 4 /* 4 bytes for chksum protection */
-ENOTUSED
+
+typedef struct _SYS_INFO_PHYS_ADDR {
+ uint8_t address[6]; /* 00-05 */
+ uint8_t filler[2]; /* 06-07 */
+} SYS_INFO_PHYS_ADDR;
+
+typedef struct _FLASH_SYS_INFO {
+ uint32_t cookie; /* 00-03 */
+ uint32_t physAddrCount; /* 04-07 */
+ SYS_INFO_PHYS_ADDR physAddr[4]; /* 08-27 */
+ uint8_t vendorId[128]; /* 28-A7 */
+ uint8_t productId[128]; /* A8-127 */
+ uint32_t serialNumber; /* 128-12B */
+
+ // PCI Configuration values
+ uint32_t pciDeviceVendor; /* 12C-12F */
+ uint32_t pciDeviceId; /* 130-133 */
+ uint32_t pciSubsysVendor; /* 134-137 */
+ uint32_t pciSubsysId; /* 138-13B */
+
+ // This validates version 1.
+ uint32_t crumbs; /* 13C-13F */
+
+ uint32_t enterpriseNumber; /* 140-143 */
+
+ uint32_t mtu; /* 144-147 */
+ uint32_t reserved0; /* 148-14b */
+ uint32_t crumbs2; /* 14c-14f */
+ uint8_t acSerialNumber[16]; /* 150-15f */
+ uint32_t crumbs3; /* 160-16f */
+
+ // Leave this last in the struct so it is declared invalid if
+ // any new items are added.
+ uint32_t reserved1[39]; /* 170-1ff */
+} FLASH_SYS_INFO, *PFLASH_SYS_INFO; /* 200 */
*PFLASH_SYS_INFO -ENOTUSED
Convention is that struct names are lower case.
+
+typedef struct _FLASH_DRIVER_INFO {
+ uint32_t LinuxDriverCookie;
+#define FLASH_LINUX_DRIVER_COOKIE 0x0A1B2C3D
+ uint8_t Pad[4];
+
+} FLASH_DRIVER_INFO, *PFLASH_DRIVER_INFO;
-ENOTUSED
+
+typedef struct _CHAP_ENTRY {
+ uint16_t link; // 0 x0
+#define CHAP_FLAG_PEER_NAME 0x40
+#define CHAP_FLAG_LOCAL_NAME 0x80
+
+ uint8_t flags; // 2 x2
+#define MIN_CHAP_SECRET_LENGTH 12
+#define MAX_CHAP_SECRET_LENGTH 100
+
+ uint8_t secretLength; // 3 x3
+ uint8_t secret[MAX_CHAP_SECRET_LENGTH]; // 4 x4
+#define MAX_CHAP_CHALLENGE_LENGTH 256
+
+ uint8_t user_name[MAX_CHAP_CHALLENGE_LENGTH]; //104 x68
+ uint16_t reserved; //360 x168
+#define CHAP_COOKIE 0x4092
+
+ uint16_t cookie; //362 x16a
+} CHAP_ENTRY, *PCHAP_ENTRY; //364 x16c
-ENOTUSED
+
+/*************************************************************************/
+
+typedef struct _CRASH_RECORD {
+ uint16_t fw_major_version; /* 00 - 01 */
+ uint16_t fw_minor_version; /* 02 - 03 */
+ uint16_t fw_patch_version; /* 04 - 05 */
+ uint16_t fw_build_version; /* 06 - 07 */
+
+ uint8_t build_date[16]; /* 08 - 17 */
+ uint8_t build_time[16]; /* 18 - 27 */
+ uint8_t build_user[16]; /* 28 - 37 */
+ uint8_t card_serial_num[16]; /* 38 - 47 */
+
+ uint32_t time_of_crash_in_secs; /* 48 - 4B */
+ uint32_t time_of_crash_in_ms; /* 4C - 4F */
+
+ uint16_t out_RISC_sd_num_frames; /* 50 - 51 */
+ uint16_t OAP_sd_num_words; /* 52 - 53 */
+ uint16_t IAP_sd_num_frames; /* 54 - 55 */
+ uint16_t in_RISC_sd_num_words; /* 56 - 57 */
+
+ uint8_t reserved1[28]; /* 58 - 7F */
+
+ uint8_t out_RISC_reg_dump[256]; /* 80 -17F */
+ uint8_t in_RISC_reg_dump[256]; /*180 -27F */
+ uint8_t in_out_RISC_stack_dump[0]; /*280 - ??? */
+} CRASH_RECORD, *PCRASH_RECORD;
PCRASH_RECORD -ENOTUSED
+
+/*************************************************************************/
+
+#define MAX_CONN_EVENT_LOG_ENTRIES 100
-ENOTUSED
+
+typedef struct _CONN_EVENT_LOG_ENTRY {
+ uint32_t timestamp_sec; /* 00 - 03 seconds since boot */
+ uint32_t timestamp_ms; /* 04 - 07 milliseconds since boot */
+ uint16_t device_index; /* 08 - 09 */
+ uint16_t fw_conn_state; /* 0A - 0B */
+ uint8_t event_type; /* 0C - 0C */
+ uint8_t error_code; /* 0D - 0D */
+ uint16_t error_code_detail; /* 0E - 0F */
+ uint8_t num_consecutive_events; /* 10 - 10 */
+ uint8_t rsvd[3]; /* 11 - 13 */
+} CONN_EVENT_LOG_ENTRY, *PCONN_EVENT_LOG_ENTRY;
PCONN_EVENT_LOG_ENTRY -ENOTUSED
+
+/*************************************************************************
+ *
+ * IOCB Commands Structures and Definitions
+ *
+ *************************************************************************/
+#define IOCB_MAX_CDB_LEN 16 /* Bytes in a CBD */
+#define IOCB_MAX_SENSEDATA_LEN 32 /* Bytes of sense data */
+#define IOCB_MAX_EXT_SENSEDATA_LEN 60 /* Bytes of extended sense data */
+#define IOCB_MAX_DSD_CNT 1 /* DSDs per noncontinuation type IOCB */
-ENOTUSED
+#define IOCB_CONT_MAX_DSD_CNT 5 /* DSDs per Continuation */
-ENOTUSED
+#define CTIO_MAX_SENSEDATA_LEN 24 /* Bytes of sense data in a CTIO */
-ENOTUSED
+
+#define RESERVED_BYTES_MARKER 40 /* Reserved Bytes at end of Marker */
-ENOTUSED
+#define RESERVED_BYTES_INOT 28 /* Reserved Bytes at end of Immediate Notify */
+#define RESERVED_BYTES_NOTACK 28 /* Reserved Bytes at end of Notify Acknowledge */
+#define RESERVED_BYTES_CTIO 2 /* Reserved Bytes in middle of CTIO */
-ENOTUSED
+
+#define MAX_MBX_COUNT 14 /* Maximum number of mailboxes in MBX IOCB */
+
+#define ISCSI_MAX_NAME_BYTECNT 256 /* Bytes in a target name */
-ENOTUSED
+
+#define IOCB_ENTRY_SIZE 0x40
-ENOTUSED
+
+/* IOCB header structure */
+typedef struct _HEADER {
+ uint8_t entryType;
+#define ET_STATUS 0x03
+#define ET_MARKER 0x04
+#define ET_CONT_T1 0x0A
+#define ET_INOT 0x0D
+#define ET_NACK 0x0E
+#define ET_STATUS_CONTINUATION 0x10
+#define ET_CMND_T4 0x15
+#define ET_ATIO 0x16
+#define ET_CMND_T3 0x19
+#define ET_CTIO4 0x1E
+#define ET_CTIO3 0x1F
+#define ET_PERFORMANCE_STATUS 0x20
+#define ET_MAILBOX_CMD 0x38
+#define ET_MAILBOX_STATUS 0x39
+#define ET_PASSTHRU0 0x3A
+#define ET_PASSTHRU1 0x3B
+#define ET_PASSTHRU_STATUS 0x3C
+#define ET_ASYNCH_MSG 0x3D
+#define ET_CTIO5 0x3E
+#define ET_CTIO6 0x3F
+
+ uint8_t entryStatus;
+#define ES_MASK 0x3E
+#define ES_SUPPRESS_COMPL_INT 0x01
+#define ES_BUSY 0x02
+#define ES_INVALID_ENTRY_TYPE 0x04
+#define ES_INVALID_ENTRY_PARAM 0x08
+#define ES_INVALID_ENTRY_COUNT 0x10
+#define ES_INVALID_ENTRY_ORDER 0x20
+ uint8_t systemDefined;
+ uint8_t entryCount;
+
+ /* SyetemDefined definition */
+#define SD_PASSTHRU_IOCB 0x01
+} HEADER;
Convention is that struct names are lower case.
+
+/* Genric queue entry structure*/
+typedef struct QUEUE_ENTRY {
+ uint8_t data[60];
+ uint32_t signature;
+
+} QUEUE_ENTRY;
Convention is that struct names are lower case.
+
+/* 64 bit addressing segment counts*/
+
+#define COMMAND_SEG_A64 1
+#define CONTINUE_SEG_A64 5
+#define CONTINUE_SEG_A64_MINUS1 4
-ENOTUSED
+
+/* 64 bit addressing segment definition*/
+
+typedef struct DATA_SEG_A64 {
+ struct {
+ uint32_t addrLow;
+ uint32_t addrHigh;
+
+ } base;
+
+ uint32_t count;
+
+} DATA_SEG_A64;
Convention is that struct names are lower case.
+
+/* Command Type 3 entry structure*/
+
+typedef struct _COMMAND_T3_ENTRY {
+ HEADER hdr; /* 00-03 */
+
+ uint32_t handle; /* 04-07 */
+ uint16_t target; /* 08-09 */
+ uint16_t connection_id; /* 0A-0B */
+
+ uint8_t control_flags; /* 0C */
+#define CF_IMMEDIATE 0x80
-ENOTUSED
+
+ /* data direction (bits 5-6) */
+#define CF_WRITE 0x20
+#define CF_READ 0x40
+#define CF_NO_DATA 0x00
+#define CF_DIRECTION_MASK 0x60
-ENOTUSED
+
+ /* misc (bits 4-3) */
+#define CF_DSD_PTR_ENABLE 0x10 /* 4010 only */
-ENOTUSED
+#define CF_CMD_PTR_ENABLE 0x08 /* 4010 only */
-ENOTUSED
+
+ /* task attributes (bits 2-0) */
+#define CF_ACA_QUEUE 0x04
-ENOTUSED
+#define CF_HEAD_TAG 0x03
+#define CF_ORDERED_TAG 0x02
+#define CF_SIMPLE_TAG 0x01
+#define CF_TAG_TYPE_MASK 0x07
-ENOTUSED
+#define CF_ATTRIBUTES_MASK 0x67
-ENOTUSED
+
+ /* STATE FLAGS FIELD IS A PLACE HOLDER. THE FW WILL SET BITS IN THIS FIELD
+ AS THE COMMAND IS PROCESSED. WHEN THE IOCB IS CHANGED TO AN IOSB THIS
+ FIELD WILL HAVE THE STATE FLAGS SET PROPERLY.
+ */
+ uint8_t state_flags; /* 0D */
+ uint8_t cmdRefNum; /* 0E */
+ uint8_t reserved1; /* 0F */
+ uint8_t cdb[IOCB_MAX_CDB_LEN]; /* 10-1F */
+ struct scsi_lun lun; /* FCP LUN (BE). */
+ uint32_t cmdSeqNum; /* 28-2B */
+ uint16_t timeout; /* 2C-2D */
+ uint16_t dataSegCnt; /* 2E-2F */
+ uint32_t ttlByteCnt; /* 30-33 */
+ DATA_SEG_A64 dataseg[COMMAND_SEG_A64]; /* 34-3F */
+
+} COMMAND_T3_ENTRY;
Convention is that struct names are lower case.
+
+typedef struct _COMMAND_T4_ENTRY {
+ HEADER hdr; /* 00-03 */
+ uint32_t handle; /* 04-07 */
+ uint16_t target; /* 08-09 */
+ uint16_t connection_id; /* 0A-0B */
+ uint8_t control_flags; /* 0C */
+
+ /* STATE FLAGS FIELD IS A PLACE HOLDER. THE FW WILL SET BITS IN THIS FIELD
+ AS THE COMMAND IS PROCESSED. WHEN THE IOCB IS CHANGED TO AN IOSB THIS
+ FIELD WILL HAVE THE STATE FLAGS SET PROPERLY.
+ */
+ uint8_t state_flags; /* 0D */
+ uint8_t cmdRefNum; /* 0E */
+ uint8_t reserved1; /* 0F */
+ uint8_t cdb[IOCB_MAX_CDB_LEN]; /* 10-1F */
+ struct scsi_lun lun; /* FCP LUN (BE). */
+ uint32_t cmdSeqNum; /* 28-2B */
+ uint16_t timeout; /* 2C-2D */
+ uint16_t dataSegCnt; /* 2E-2F */
+ uint32_t ttlByteCnt; /* 30-33 */
+
+ /* WE ONLY USE THE ADDRESS FIELD OF THE FOLLOWING STRUCT.
+ THE COUNT FIELD IS RESERVED */
+ DATA_SEG_A64 dataseg[COMMAND_SEG_A64]; /* 34-3F */
+} COMMAND_T4_ENTRY;
-ENOTUSED
+
+/* Continuation Type 1 entry structure*/
+typedef struct _CONTINUATION_T1_ENTRY {
+ HEADER hdr;
+
+ DATA_SEG_A64 dataseg[CONTINUE_SEG_A64];
+
+} CONTINUATION_T1_ENTRY;
-ENOTUSED
+
+/* Status Continuation Type entry structure*/
+typedef struct _STATUS_CONTINUATION_ENTRY {
+ HEADER hdr;
+
+ uint8_t extSenseData[IOCB_MAX_EXT_SENSEDATA_LEN];
+
+} STATUS_CONTINUATION_ENTRY;
-ENOTUSED
+
+/* Parameterize for 64 or 32 bits */
+#define COMMAND_SEG COMMAND_SEG_A64
+#define CONTINUE_SEG CONTINUE_SEG_A64
+
+#define COMMAND_ENTRY COMMAND_T3_ENTRY
+#define CONTINUE_ENTRY CONTINUATION_T1_ENTRY
+
+#define ET_COMMAND ET_CMND_T3
+#define ET_CONTINUE ET_CONT_T1
+
+/* Marker entry structure*/
+typedef struct _MARKER_ENTRY {
+ HEADER hdr; /* 00-03 */
+
+ uint32_t system_defined; /* 04-07 */
+ uint16_t target; /* 08-09 */
+ uint16_t modifier; /* 0A-0B */
+#define MM_LUN_RESET 0
+#define MM_TARGET_WARM_RESET 1
+#define MM_TARGET_COLD_RESET 2
+#define MM_CLEAR_ACA 3
+#define MM_CLEAR_TASK_SET 4
+#define MM_ABORT_TASK_SET 5
+
+ uint16_t flags; /* 0C-0D */
+ uint16_t reserved1; /* 0E-0F */
+ struct scsi_lun lun; /* FCP LUN (BE). */
+ uint64_t reserved2; /* 18-1F */
+ uint64_t reserved3; /* 20-27 */
+ uint64_t reserved4; /* 28-2F */
+ uint64_t reserved5; /* 30-37 */
+ uint64_t reserved6; /* 38-3F */
+} MARKER_ENTRY;
Convention is that struct names are lower case.
+
+/* Status entry structure*/
+typedef struct _STATUS_ENTRY {
+ HEADER hdr; /* 00-03 */
+
+ uint32_t handle; /* 04-07 */
+
+ uint8_t scsiStatus; /* 08 */
+#define SCSI_STATUS_MASK 0xFF
+#define SCSI_STATUS 0xFF
+#define SCSI_GOOD 0x00
+#define SCSI_CHECK_CONDITION 0x02
+
+ uint8_t iscsiFlags; /* 09 */
+#define ISCSI_FLAG_RESIDUAL_UNDER 0x02
+#define ISCSI_FLAG_RESIDUAL_OVER 0x04
+#define ISCSI_FLAG_RESIDUAL_UNDER_BIREAD 0x08
+#define ISCSI_FLAG_RESIDUAL_OVER_BIREAD 0x10
+
+ uint8_t iscsiResponse; /* 0A */
+#define ISCSI_RSP_COMPLETE 0x00
+#define ISCSI_RSP_TARGET_FAILURE 0x01
+#define ISCSI_RSP_DELIVERY_SUBSYS_FAILURE 0x02
+#define ISCSI_RSP_UNSOLISITED_DATA_REJECT 0x03
+#define ISCSI_RSP_NOT_ENOUGH_UNSOLISITED_DATA 0x04
+#define ISCSI_RSP_CMD_IN_PROGRESS 0x05
+
+ uint8_t completionStatus; /* 0B */
+#define SCS_COMPLETE 0x00
+#define SCS_INCOMPLETE 0x01
+#define SCS_DMA_ERROR 0x02
+#define SCS_TRANSPORT_ERROR 0x03
+#define SCS_RESET_OCCURRED 0x04
+#define SCS_ABORTED 0x05
+#define SCS_TIMEOUT 0x06
+#define SCS_DATA_OVERRUN 0x07
+#define SCS_DATA_DIRECTION_ERROR 0x08
+#define SCS_DATA_UNDERRUN 0x15
+#define SCS_QUEUE_FULL 0x1C
+#define SCS_DEVICE_UNAVAILABLE 0x28
+#define SCS_DEVICE_LOGGED_OUT 0x29
+#define SCS_DEVICE_CONFIG_CHANGED 0x2A
+
+ uint8_t reserved1; /* 0C */
+
+ /* state_flags MUST be at the same location as state_flags in the
+ Command_T3/4_Entry */
+ uint8_t state_flags; /* 0D */
+#define STATE_FLAG_SENT_COMMAND 0x01
+#define STATE_FLAG_TRANSFERRED_DATA 0x02
+#define STATE_FLAG_GOT_STATUS 0x04
+#define STATE_FLAG_LOGOUT_SENT 0x10
+
+ uint16_t senseDataByteCnt; /* 0E-0F */
+ uint32_t residualByteCnt; /* 10-13 */
+ uint32_t bidiResidualByteCnt; /* 14-17 */
+ uint32_t expSeqNum; /* 18-1B */
+ uint32_t maxCmdSeqNum; /* 1C-1F */
+ uint8_t senseData[IOCB_MAX_SENSEDATA_LEN]; /* 20-3F */
+
+} STATUS_ENTRY;
Convention is that struct names are lower case.
+
+/*
+ * Performance Status Entry where up to 30 handles can be posted in a
+ * single IOSB. Handles are of 16 bit value.
+ */
+typedef struct _PERFORMANCE_STATUS_ENTRY {
+ uint8_t entryType;
+ uint8_t entryCount;
+ uint16_t handleCount;
+
+#define MAX_STATUS_HANDLE 30
+ uint16_t handleArray[MAX_STATUS_HANDLE];
+
+} PERFORMANCE_STATUS_ENTRY;
-ENOTUSED
+
+typedef struct _IMMEDIATE_NOTIFY_ENTRY {
+ HEADER hdr;
+ uint32_t handle;
+ uint16_t initiator;
+ uint16_t InitSessionID;
+ uint16_t ConnectionID;
+ uint16_t TargSessionID;
+ uint16_t inotStatus;
+#define INOT_STATUS_ABORT_TASK 0x0020
+#define INOT_STATUS_LOGIN_RECVD 0x0021
+#define INOT_STATUS_LOGOUT_RECVD 0x0022
+#define INOT_STATUS_LOGGED_OUT 0x0029
+#define INOT_STATUS_RESTART_RECVD 0x0030
+#define INOT_STATUS_MSG_RECVD 0x0036
+#define INOT_STATUS_TSK_REASSIGN 0x0037
+
+ uint16_t taskFlags;
+#define TASK_FLAG_CLEAR_ACA 0x4000
+#define TASK_FLAG_COLD_RESET 0x2000
+#define TASK_FLAG_WARM_RESET 0x0800
+#define TASK_FLAG_LUN_RESET 0x1000
+#define TASK_FLAG_CLEAR_TASK_SET 0x0400
+#define TASK_FLAG_ABORT_TASK_SET 0x0200
+
+ uint32_t refTaskTag;
+ struct scsi_lun lun; /* FCP LUN (BE). */
+ uint32_t inotTaskTag;
+ uint8_t res3[RESERVED_BYTES_INOT];
+} IMMEDIATE_NOTIFY_ENTRY;
-ENOTUSED
+
+typedef struct _NOTIFY_ACK_ENTRY {
+ HEADER hdr;
+ uint32_t handle;
+ uint16_t initiator;
+ uint16_t res1;
+ uint16_t flags;
+ uint8_t responseCode;
+ uint8_t qualifier;
+ uint16_t notAckStatus;
+ uint16_t taskFlags;
+#define NACK_FLAG_RESPONSE_CODE_VALID 0x0010
+
+ uint32_t refTaskTag;
+ struct scsi_lun lun; /* FCP LUN (BE). */
+ uint32_t inotTaskTag;
+ uint8_t res3[RESERVED_BYTES_NOTACK];
+} NOTIFY_ACK_ENTRY;
-ENOTUSED
+
+typedef struct _ATIO_ENTRY {
+ HEADER hdr; /* 00-03 */
+ uint32_t handle; /* 04-07 */
+ uint16_t initiator; /* 08-09 */
+ uint16_t connectionID; /* 0A-0B */
+ uint32_t taskTag; /* 0C-0f */
+ uint8_t scsiCDB[IOCB_MAX_CDB_LEN]; /* 10-1F */
+ uint8_t LUN[8]; /* 20-27 */
+ uint8_t cmdRefNum; /* 28 */
+
+ uint8_t pduType; /* 29 */
+#define PDU_TYPE_NOPOUT 0x00
+#define PDU_TYPE_SCSI_CMD 0x01
+#define PDU_TYPE_SCSI_TASK_MNGMT_CMD 0x02
+#define PDU_TYPE_LOGIN_CMD 0x03
+#define PDU_TYPE_TEXT_CMD 0x04
+#define PDU_TYPE_SCSI_DATA 0x05
+#define PDU_TYPE_LOGOUT_CMD 0x06
+#define PDU_TYPE_SNACK 0x10
+
+ uint16_t atioStatus; /* 2A-2B */
+#define ATIO_CDB_RECVD 0x003d
+
+ uint16_t reserved1; /* 2C-2D */
+
+ uint8_t taskCode; /* 2E */
+#define ATIO_TASK_CODE_UNTAGGED 0x00
+#define ATIO_TASK_CODE_SIMPLE_QUEUE 0x01
+#define ATIO_TASK_CODE_ORDERED_QUEUE 0x02
+#define ATIO_TASK_CODE_HEAD_OF_QUEUE 0x03
+#define ATIO_TASK_CODE_ACA_QUEUE 0x04
+
+ uint8_t reserved2; /* 2F */
+ uint32_t totalByteCnt; /* 30-33 */
+ uint32_t cmdSeqNum; /* 34-37 */
+ uint64_t immDataBufDesc; /* 38-3F */
+} ATIO_ENTRY;
-ENOTUSED
+
+typedef struct _CTIO3_ENTRY {
+ HEADER hdr; /* 00-03 */
+ uint32_t handle; /* 04-07 */
+ uint16_t initiator; /* 08-09 */
+ uint16_t connectionID; /* 0A-0B */
+ uint32_t taskTag; /* 0C-0F */
+
+ uint8_t flags; /* 10 */
+#define CTIO_FLAG_SEND_SCSI_STATUS 0x01
+#define CTIO_FLAG_TERMINATE_COMMAND 0x10
+#define CTIO_FLAG_FAST_POST 0x08
+#define CTIO_FLAG_FINAL_CTIO 0x80
+
+ /* NOTE: Our firmware assumes that the CTIO_FLAG_SEND_DATA and
+ CTIO_FLAG_GET_DATA flags are in the same bit positions
+ as the R and W bits in SCSI Command PDUs, so their values
+ should not be changed!
+ */
+#define CTIO_FLAG_SEND_DATA 0x0040 /* (see note) Read Data Flag, send data to initiator */
+#define CTIO_FLAG_GET_DATA 0x0020 /* (see note) Write Data Flag, get data from the initiator */
+
+ uint8_t scsiStatus; /* 11 */
+ uint16_t timeout; /* 12-13 */
+ uint32_t offset; /* 14-17 */
+ uint32_t r2tSN; /* 18-1B */
+ uint32_t expCmdSN; /* 1C-1F */
+ uint32_t maxCmdSN; /* 20-23 */
+ uint32_t dataSN; /* 24-27 */
+ uint32_t residualCount; /* 28-2B */
+ uint16_t reserved; /* 2C-2D */
+ uint16_t segmentCnt; /* 2E-2F */
+ uint32_t totalByteCnt; /* 30-33 */
+ DATA_SEG_A64 dataseg[COMMAND_SEG_A64]; /* 34-3F */
+} CTIO3_ENTRY;
-ENOTUSED
+
+typedef struct _CTIO4_ENTRY {
+ HEADER hdr; /* 00-03 */
+ uint32_t handle; /* 04-07 */
+ uint16_t initiator; /* 08-09 */
+ uint16_t connectionID; /* 0A-0B */
+ uint32_t taskTag; /* 0C-0F */
+ uint8_t flags; /* 10 */
+ uint8_t scsiStatus; /* 11 */
+ uint16_t timeout; /* 12-13 */
+ uint32_t offset; /* 14-17 */
+ uint32_t r2tSN; /* 18-1B */
+ uint32_t expCmdSN; /* 1C-1F */
+ uint32_t maxCmdSN; /* 20-23 */
+ uint32_t dataSN; /* 24-27 */
+ uint32_t residualCount; /* 28-2B */
+ uint16_t reserved; /* 2C-2D */
+ uint16_t segmentCnt; /* 2E-2F */
+ uint32_t totalByteCnt; /* 30-33 */
+ /* WE ONLY USE THE ADDRESS FROM THE FOLLOWING STRUCTURE THE COUNT FIELD IS
+ RESERVED */
+ DATA_SEG_A64 dataseg[COMMAND_SEG_A64]; /* 34-3F */
+} CTIO4_ENTRY;
-ENOTUSED
+
+typedef struct _CTIO5_ENTRY {
+ HEADER hdr; /* 00-03 */
+ uint32_t handle; /* 04-07 */
+ uint16_t initiator; /* 08-09 */
+ uint16_t connectionID; /* 0A-0B */
+ uint32_t taskTag; /* 0C-0F */
+ uint8_t response; /* 10 */
+ uint8_t scsiStatus; /* 11 */
+ uint16_t timeout; /* 12-13 */
+ uint32_t reserved1; /* 14-17 */
+ uint32_t expR2TSn; /* 18-1B */
+ uint32_t expCmdSn; /* 1C-1F */
+ uint32_t MaxCmdSn; /* 20-23 */
+ uint32_t expDataSn; /* 24-27 */
+ uint32_t residualCnt; /* 28-2B */
+ uint32_t bidiResidualCnt; /* 2C-2F */
+ uint32_t reserved2; /* 30-33 */
+ DATA_SEG_A64 dataseg[1]; /* 34-3F */
+} CTIO5_ENTRY;
-ENOTUSED
+
+typedef struct _CTIO6_ENTRY {
+ HEADER hdr; /* 00-03 */
+ uint32_t handle; /* 04-07 */
+ uint16_t initiator; /* 08-09 */
+ uint16_t connection; /* 0A-0B */
+ uint32_t taskTag; /* 0C-0F */
+ uint16_t flags; /* 10-11 */
+ uint16_t timeout; /* 12-13 */
+ uint32_t reserved1; /* 14-17 */
+ uint64_t reserved2; /* 18-1F */
+ uint64_t reserved3; /* 20-27 */
+ uint64_t reserved4; /* 28-2F */
+ uint32_t reserved5; /* 30-33 */
+ DATA_SEG_A64 dataseg[1]; /* 34-3F */
+} CTIO6_ENTRY;
-ENOTUSED
+
+typedef struct _CTIO_STATUS_ENTRY {
+ HEADER hdr; /* 00-03 */
+ uint32_t handle; /* 04-07 */
+ uint16_t initiator; /* 08-09 */
+ uint16_t connectionID; /* 0A-0B */
+ uint32_t taskTag; /* 0C-0F */
+ uint16_t status; /* 10-11 */
+#define CTIO_STATUS_COMPLETE 0x0001
+#define CTIO_STATUS_ABORTED 0x0002
+#define CTIO_STATUS_DMA_ERROR 0x0003
+#define CTIO_STATUS_ERROR 0x0004
+#define CTIO_STATUS_INVALID_TAG 0x0008
+#define CTIO_STATUS_DATA_OVERRUN 0x0009
+#define CTIO_STATUS_CMD_TIMEOUT 0x000B
+#define CTIO_STATUS_PCI_ERROR 0x0010
+#define CTIO_STATUS_DATA_UNDERRUN 0x0015
+#define CTIO_STATUS_TARGET_RESET 0x0017
+#define CTIO_STATUS_NO_CONNECTION 0x0028
+#define CTIO_STATUS_LOGGED_OUT 0x0029
+#define CTIO_STATUS_CONFIG_CHANGED 0x002A
+#define CTIO_STATUS_UNACK_EVENT 0x0035
+#define CTIO_STATUS_INVALID_DATA_XFER 0x0036
+
+ uint16_t timeout; /* 12-13 */
+ uint32_t reserved1; /* 14-17 */
+ uint32_t expR2TSN; /* 18-1B */
+ uint32_t reserved2; /* 1C-1F */
+ uint32_t reserved3; /* 20-23 */
+ uint64_t expDataSN; /* 24-27 */
+ uint32_t residualCount; /* 28-2B */
+ uint32_t reserved4; /* 2C-2F */
+ uint64_t reserved5; /* 30-37 */
+ uint64_t reserved6; /* 38-3F */
+} CTIO_STATUS_ENTRY;
-ENOTUSED
+
+typedef struct _MAILBOX_ENTRY {
+ HEADER hdr;
+ uint32_t handle;
+ uint32_t mbx[MAX_MBX_COUNT];
+} MAILBOX_ENTRY;
-ENOTUSED
+
+typedef struct MAILBOX_STATUS_ENTRY {
+ HEADER hdr;
+ uint32_t handle;
+ uint32_t mbx[MAX_MBX_COUNT];
+} MAILBOX_STATUS_ENTRY;
-ENOTUSED
+
+typedef struct _PDU_ENTRY {
+ uint8_t *Buff;
+ uint32_t BuffLen;
+ uint32_t SendBuffLen;
+ uint32_t RecvBuffLen;
+ struct _PDU_ENTRY *Next;
+ dma_addr_t DmaBuff;
+} PDU_ENTRY, *PPDU_ENTRY;
-ENOTUSED
+
+typedef struct _PASSTHRU0_ENTRY {
+ HEADER hdr; /* 00-03 */
+ uint32_t handle; /* 04-07 */
+ uint16_t target; /* 08-09 */
+ uint16_t connectionID; /* 0A-0B */
+#define ISNS_DEFAULT_SERVER_CONN_ID ((uint16_t)0x8000)
+
+ uint16_t controlFlags; /* 0C-0D */
+#define PT_FLAG_ETHERNET_FRAME 0x8000
+#define PT_FLAG_ISNS_PDU 0x8000
+#define PT_FLAG_IP_DATAGRAM 0x4000
+#define PT_FLAG_TCP_PACKET 0x2000
+#define PT_FLAG_NETWORK_PDU (PT_FLAG_ETHERNET_FRAME | PT_FLAG_IP_DATAGRAM | PT_FLAG_TCP_PACKET)
+#define PT_FLAG_iSCSI_PDU 0x1000
+#define PT_FLAG_SEND_BUFFER 0x0200
+#define PT_FLAG_WAIT_4_RESPONSE 0x0100
+#define PT_FLAG_NO_FAST_POST 0x0080
+
+ uint16_t timeout; /* 0E-0F */
+#define PT_DEFAULT_TIMEOUT 30 // seconds
+
+ DATA_SEG_A64 outDataSeg64; /* 10-1B */
+ uint32_t res1; /* 1C-1F */
+ DATA_SEG_A64 inDataSeg64; /* 20-2B */
+ uint8_t res2[20]; /* 2C-3F */
+} PASSTHRU0_ENTRY;
Convention is that struct names are lower case.
+
+typedef struct _PASSTHRU1_ENTRY {
+ HEADER hdr; /* 00-03 */
+ uint32_t handle; /* 04-07 */
+ uint16_t target; /* 08-09 */
+ uint16_t connectionID; /* 0A-0B */
+
+ uint16_t controlFlags; /* 0C-0D */
+#define PT_FLAG_ETHERNET_FRAME 0x8000
+#define PT_FLAG_IP_DATAGRAM 0x4000
+#define PT_FLAG_TCP_PACKET 0x2000
+#define PT_FLAG_iSCSI_PDU 0x1000
+#define PT_FLAG_SEND_BUFFER 0x0200
+#define PT_FLAG_WAIT_4_REPONSE 0x0100
+#define PT_FLAG_NO_FAST_POST 0x0080
+
+ uint16_t timeout; /* 0E-0F */
+ DATA_SEG_A64 outDSDList; /* 10-1B */
+ uint32_t outDSDCnt; /* 1C-1F */
+ DATA_SEG_A64 inDSDList; /* 20-2B */
+ uint32_t inDSDCnt; /* 2C-2F */
+ uint8_t res1; /* 30-3F */
+
+} PASSTHRU1_ENTRY;
-ENOTUSED
+
+typedef struct _PASSTHRU_STATUS_ENTRY {
+ HEADER hdr; /* 00-03 */
+ uint32_t handle; /* 04-07 */
+ uint16_t target; /* 08-09 */
+ uint16_t connectionID; /* 0A-0B */
+
+ uint8_t completionStatus; /* 0C */
+#define PASSTHRU_STATUS_COMPLETE 0x01
+#define PASSTHRU_STATUS_ERROR 0x04
+#define PASSTHRU_STATUS_INVALID_DATA_XFER 0x06
+#define PASSTHRU_STATUS_CMD_TIMEOUT 0x0B
+#define PASSTHRU_STATUS_PCI_ERROR 0x10
+#define PASSTHRU_STATUS_NO_CONNECTION 0x28
+
+ uint8_t residualFlags; /* 0D */
+#define PASSTHRU_STATUS_DATAOUT_OVERRUN 0x01
+#define PASSTHRU_STATUS_DATAOUT_UNDERRUN 0x02
+#define PASSTHRU_STATUS_DATAIN_OVERRUN 0x04
+#define PASSTHRU_STATUS_DATAIN_UNDERRUN 0x08
+
+ uint16_t timeout; /* 0E-0F */
+ uint16_t portNumber; /* 10-11 */
+ uint8_t res1[10]; /* 12-1B */
+ uint32_t outResidual; /* 1C-1F */
+ uint8_t res2[12]; /* 20-2B */
+ uint32_t inResidual; /* 2C-2F */
+ uint8_t res4[16]; /* 30-3F */
+} PASSTHRU_STATUS_ENTRY;
-ENOTUSED
+
+typedef struct _ASYNCHMSG_ENTRY {
+ HEADER hdr;
+ uint32_t handle;
+ uint16_t target;
+ uint16_t connectionID;
+ struct scsi_lun lun; /* FCP LUN (BE). */
+ uint16_t iSCSIEvent;
+#define AMSG_iSCSI_EVENT_NO_EVENT 0x0000
+#define AMSG_iSCSI_EVENT_TARG_RESET 0x0001
+#define AMSG_iSCSI_EVENT_TARGT_LOGOUT 0x0002
+#define AMSG_iSCSI_EVENT_CONNECTION_DROPPED 0x0003
+#define AMSG_ISCSI_EVENT_ALL_CONNECTIONS_DROPPED 0x0004
+
+ uint16_t SCSIEvent;
+#define AMSG_NO_SCSI_EVENT 0x0000
+#define AMSG_SCSI_EVENT 0x0001
+
+ uint16_t parameter1;
+ uint16_t parameter2;
+ uint16_t parameter3;
+ uint32_t expCmdSn;
+ uint32_t maxCmdSn;
+ uint16_t senseDataCnt;
+ uint16_t reserved;
+ uint32_t senseData[IOCB_MAX_SENSEDATA_LEN];
+} ASYNCHMSG_ENTRY;
-ENOTUSED
+
+/* Timer entry structure, this is an internal generated structure
+ which causes the QLA4000 initiator to send a NOP-OUT or the
+ QLA4000 target to send a NOP-IN */
+
+typedef struct _TIMER_ENTRY {
+ HEADER hdr; /* 00-03 */
+
+ uint32_t handle; /* 04-07 */
+ uint16_t target; /* 08-09 */
+ uint16_t connection_id; /* 0A-0B */
+
+ uint8_t control_flags; /* 0C */
+
+ /* STATE FLAGS FIELD IS A PLACE HOLDER. THE FW WILL SET BITS IN THIS FIELD
+ AS THE COMMAND IS PROCESSED. WHEN THE IOCB IS CHANGED TO AN IOSB THIS
+ FIELD WILL HAVE THE STATE FLAGS SET PROPERLY.
+ */
+ uint8_t state_flags; /* 0D */
+ uint8_t cmdRefNum; /* 0E */
+ uint8_t reserved1; /* 0F */
+ uint8_t cdb[IOCB_MAX_CDB_LEN]; /* 10-1F */
+ struct scsi_lun lun; /* FCP LUN (BE). */
+ uint32_t cmdSeqNum; /* 28-2B */
+ uint16_t timeout; /* 2C-2D */
+ uint16_t dataSegCnt; /* 2E-2F */
+ uint32_t ttlByteCnt; /* 30-33 */
+ DATA_SEG_A64 dataseg[COMMAND_SEG_A64]; /* 34-3F */
+
+} TIMER_ENTRY;
-ENOTUSED
+
+#endif /* _QLA4X_FW_H */
^ permalink raw reply related
* Re: [PATCH 2/2] Base pSeries PCIe support
From: Paul Mackerras @ 2006-04-01 8:38 UTC (permalink / raw)
To: Jake Moilanen; +Cc: linuxppc-dev
In-Reply-To: <20060331161330.3c723103.moilanen@austin.ibm.com>
Jake Moilanen writes:
> +property_present(struct device_node *np, const char *name)
> +{
> + struct property *pp;
> +
> + read_lock(&devtree_lock);
> + for (pp = np->properties; pp != 0; pp = pp->next)
> + if (strcmp(pp->name, name) == 0) {
> + return 1;
Ummm, did you mean to return with the devtree_lock held? I suspect
not. In any case, why not just use get_property or of_find_property?
Paul.
^ permalink raw reply
* Re: [patch 2.6.16-mm2 2/9] sched throttle tree extract - fix potential task uninterruptible bug
From: Mike Galbraith @ 2006-04-01 8:38 UTC (permalink / raw)
To: Ingo Molnar, Andrew Morton; +Cc: lkml, Peter Williams, Nick Piggin, Con Kolivas
In-Reply-To: <1143880397.7617.10.camel@homer>
This patch fixes a bug waiting for a place to happen should anyone ever
combine TASK_NONINTERACTIVE with TASK_UNINTERRUPTIBLE.
Signed-off-by: Mike Galbraith <efault@gmx.de>
--- linux-2.6.16-mm2/kernel/sched.c-1.timewarp 2006-03-23 15:04:42.000000000 +0100
+++ linux-2.6.16-mm2/kernel/sched.c 2006-03-23 15:07:08.000000000 +0100
@@ -1457,7 +1457,7 @@ out_set_cpu:
out_activate:
#endif /* CONFIG_SMP */
- if (old_state == TASK_UNINTERRUPTIBLE) {
+ if (old_state & TASK_UNINTERRUPTIBLE) {
rq->nr_uninterruptible--;
/*
* Tasks on involuntary sleep don't earn
@@ -3167,7 +3167,7 @@ need_resched_nonpreemptible:
unlikely(signal_pending(prev))))
prev->state = TASK_RUNNING;
else {
- if (prev->state == TASK_UNINTERRUPTIBLE)
+ if (prev->state & TASK_UNINTERRUPTIBLE)
rq->nr_uninterruptible++;
deactivate_task(prev, rq);
}
^ permalink raw reply
* Re: [CMT 04/16] qla4xxx: driver review ql4_def.h
From: Doug Maxey @ 2006-04-01 8:35 UTC (permalink / raw)
To: Ravi Anand; +Cc: Linux SCSI Mailing List
Several of the #defines are not used anywhere in the driver. Best to
add when needed.
Some fields related to network addressing appear to only support ipv4.
Will ipv6 ever be supported with this hardware?
The {RD,WRT} macros seem to be just wrappers for the appropriate linux
calls. These should be open coded.
Several lines exceed the 80 byte limit, but that may not be that big
of a deal in header file.
Finally in scsi_qla_host, volatile decls are somewhat problematic, and
deprecated. David Howells Linux Memory Barrier did address them at
one point, but I don't see them mentioned in try #7.
++doug
--
diff --git a/drivers/scsi/qla4xxx/ql4_def.h b/drivers/scsi/qla4xxx/ql4_def.h
new file mode 100644
index 0000000..079c9d7
--- /dev/null
+++ b/drivers/scsi/qla4xxx/ql4_def.h
@@ -0,0 +1,565 @@
+/*
+ * QLogic iSCSI HBA Driver
+ * Copyright (c) 2003-2006 QLogic Corporation
+ *
+ * See LICENSE.qla4xxx for copyright and licensing details.
+ */
+
+#ifndef __QL4_DEF_H
+#define __QL4_DEF_H
+
+#include <linux/kernel.h>
+#include <linux/init.h>
+#include <linux/types.h>
+#include <linux/module.h>
+#include <linux/list.h>
+#include <linux/pci.h>
+#include <linux/dma-mapping.h>
+#include <linux/sched.h>
+#include <linux/slab.h>
+#include <linux/dmapool.h>
+#include <linux/mempool.h>
+#include <linux/spinlock.h>
+#include <linux/kthread.h>
+#include <linux/delay.h>
+#include <linux/interrupt.h>
+#include <linux/mutex.h>
+
+#include <scsi/scsi.h>
+#include <scsi/scsi_host.h>
+#include <scsi/scsi_device.h>
+#include <scsi/scsi_cmnd.h>
+#include <scsi/scsi_transport.h>
+#include <scsi/scsi_transport_iscsi.h>
+
+/* XXX(dg): move to pci_ids.h */
+#ifndef PCI_DEVICE_ID_QLOGIC_ISP4010
+#define PCI_DEVICE_ID_QLOGIC_ISP4010 0x4010
+#endif
+
+#ifndef PCI_DEVICE_ID_QLOGIC_ISP4022
+#define PCI_DEVICE_ID_QLOGIC_ISP4022 0x4022
+#endif /* */
+
+#define IS_QLA4010(ha) ((ha)->pdev->device == PCI_DEVICE_ID_QLOGIC_ISP4010)
+#define IS_QLA4022(ha) ((ha)->pdev->device == PCI_DEVICE_ID_QLOGIC_ISP4022)
+
+#define QLA_SUCCESS 0
+#define QLA_ERROR 1
+
+/*
+ * Data bit definitions
+ */
The following could be open coded. Or some other meaning full value.
+#define BIT_0 0x1
+#define BIT_1 0x2
+#define BIT_2 0x4
+#define BIT_3 0x8
+#define BIT_4 0x10
+#define BIT_5 0x20
+#define BIT_6 0x40
+#define BIT_7 0x80
+#define BIT_8 0x100
+#define BIT_9 0x200
+#define BIT_10 0x400
+#define BIT_11 0x800
+#define BIT_12 0x1000
+#define BIT_13 0x2000
+#define BIT_14 0x4000
+#define BIT_15 0x8000
+#define BIT_16 0x10000
+#define BIT_17 0x20000
+#define BIT_18 0x40000
+#define BIT_19 0x80000
+#define BIT_20 0x100000
+#define BIT_21 0x200000
+#define BIT_22 0x400000
+#define BIT_23 0x800000
+#define BIT_24 0x1000000
+#define BIT_25 0x2000000
+#define BIT_26 0x4000000
+#define BIT_27 0x8000000
+#define BIT_28 0x10000000
+#define BIT_29 0x20000000
+#define BIT_30 0x40000000
+#define BIT_31 0x80000000
+
+#define IPAddrIsZero( _X1_ ) ((_X1_)[0] == 0 && \
+ (_X1_)[1] == 0 && \
+ (_X1_)[2] == 0 && \
+ (_X1_)[3] == 0)
-ENOTUSED
+#define IPAddrIsEqual(_X1_, _X2_) ((_X1_)[0] == (_X2_)[0] && \
+ (_X1_)[1] == (_X2_)[1] && \
+ (_X1_)[2] == (_X2_)[2] && \
+ (_X1_)[3] == (_X2_)[3])
-ENOTUSED
+#define IPAddr2Uint32(_X1_,_X2_) { \
+ *_X2_ = 0; \
+ *_X2_ |= _X1_[3] << 24; \
+ *_X2_ |= _X1_[2] << 16; \
+ *_X2_ |= _X1_[1] << 8; \
+ *_X2_ |= _X1_[0];}
-ENOTUSED
+/*
+ * Host adapter default definitions
+ ***********************************/
+#define MAX_HBAS 16
+#define MAX_BUSES 1
-ENOTUSED
+#define MAX_TARGETS MAX_PRST_DEV_DB_ENTRIES + MAX_DEV_DB_ENTRIES
+#define MAX_LUNS 0xffff
+#define MAX_AEN_ENTRIES 256 /* should be > EXT_DEF_MAX_AEN_QUEUE */
+#define MAX_DDB_ENTRIES MAX_PRST_DEV_DB_ENTRIES + MAX_DEV_DB_ENTRIES
+#define MAX_PDU_ENTRIES 32
+#define INVALID_ENTRY 0xFFFF
different case than other hex values in the series.
+#define MAX_CMDS_TO_RISC 1024
+#define MAX_SRBS MAX_CMDS_TO_RISC
+#define MBOX_AEN_REG_COUNT 5
+#define MAX_INIT_RETRIES 5
+#define IOCB_HIWAT_CUSHION 16
+
+/*
+ * Buffer sizes
+ */
+#define REQUEST_QUEUE_DEPTH MAX_CMDS_TO_RISC
+#define RESPONSE_QUEUE_DEPTH 64
+#define QUEUE_SIZE 64
+#define DMA_BUFFER_SIZE 512
-ENOTUSED
+
+/*
+ * Misc
+ */
+#define MAC_ADDR_LEN 6 /* in bytes */
+#define IP_ADDR_LEN 4 /* in bytes */
will this driver ever handle ipv6?
+#define DRIVER_NAME "qla4xxx"
+
+#define MAX_LINKED_CMDS_PER_LUN 3
-ENOTUSED
+#define MAX_REQS_SERVICED_PER_INTR 16
+
+#define ISCSI_IPADDR_SIZE 4 /* IP address size */
same ipv6 question
+#define ISCSI_ALIAS_SIZE 32 /* ISCSI Alais name size */
-ENOTUSED
+#define ISCSI_NAME_SIZE 255 /* ISCSI Name size - usually a string */
+
+#define SYS_DELAY(x) do {udelay(x);barrier();} while(0);
-ENOTUSED
+#define QLA4XXX_DELAY(sec) do {mdelay(sec * 1000);} while(0);
-ENOTUSED
+#define NVRAM_DELAY() do {udelay(500);} while(0); /* 500 microsecond delay */
-ENOTUSED
+
+#define LSB(x) ((uint8_t)(x))
-ENOTUSED
+#define MSB(x) ((uint8_t)((uint16_t)(x) >> 8))
-ENOTUSED
+#define LSW(x) ((uint16_t)(x))
-ENOTUSED
+#define MSW(x) ((uint16_t)((uint32_t)(x) >> 16))
-ENOTUSED
+#define LSDW(x) ((uint32_t)((uint64_t)(x)))
+#define MSDW(x) ((uint32_t)((((uint64_t)(x)) >> 16) >> 16))
+
+/*
+ * I/O port access macros
+ *************************/
+#define RD_REG_BYTE(addr) readb(addr)
+#define RD_REG_WORD(addr) readw(addr)
+#define RD_REG_DWORD(addr) readl(addr)
+#define RD_REG_WORD_RELAXED(addr) readw_relaxed(addr)
+#define RD_REG_DWORD_RELAXED(addr) readl_relaxed(addr)
+#define WRT_REG_BYTE(addr, data) writeb(data, addr)
+#define WRT_REG_WORD(addr, data) writew(data, addr)
+#define WRT_REG_DWORD(addr, data) writel(data, addr)
+
+#define PCI_POSTING(a) (RD_REG_DWORD(a))
All the following {RD,WRT} could be open coded to use the normal call.
+
+#define CMD_SP(Cmnd) ((Cmnd)->SCp.ptr)
+
+#include "ql4_fw.h"
+#include "ql4_nvram.h"
+
+/*
+ * Retry & Timeout Values
+ */
+#define MBOX_TOV 60
+#define SOFT_RESET_TOV 30
+#define RESET_INTR_TOV 3
+#define SEMAPHORE_TOV 10
-ENOTUSED
+#define ADAPTER_INIT_TOV 120
+#define ADAPTER_RESET_TOV 180
-ENOTUSED
+#define EXTEND_CMD_TOV 60
-ENOTUSED
+#define WAIT_CMD_TOV 30
+#define EH_WAIT_CMD_TOV 120
+#define FIRMWARE_UP_TOV 60
+#define RESET_FIRMWARE_TOV 30
-ENOTUSED
+#define LOGOUT_TOV 10
+#define IOCB_TOV_MARGIN 10
-ENOTUSED
+#define RELOGIN_TOV 18
+#define ISNS_DEREG_TOV 5
-ENOTUSED
+
+#define MAX_RESET_HA_RETRIES 2
+
+/*
+ * SCSI Request Block structure (srb) that is placed
+ * on cmd->SCp location of every I/O [We have 22 bytes available]
+ */
+typedef struct _srb_t {
+ struct list_head list; /* (8) */
+ struct scsi_qla_host *ha; /* HA the SP is queued on */
+ struct ddb_entry *ddb;
+ uint16_t flags; /* (1) Status flags. */
+
+#define SRB_DMA_VALID BIT_3 /* DMA Buffer mapped. */
+
+#define SRB_GOT_SENSE BIT_4 /* sense data recieved. */
+#define SRB_IOCTL_CMD BIT_5 /* generated from an IOCTL. */
+#define SRB_BUSY BIT_7 /* in busy retry state. */
+
+#define SRB_FO_CANCEL BIT_8 /* don't need to failover. */
+#define SRB_RETRY BIT_9 /* needs retrying. */
+#define SRB_TAPE BIT_10 /* FCP2 (Tape) command. */
+ uint8_t state; /* (1) Status flags. */
+
+#define SRB_NO_QUEUE_STATE 0 /* Request is in between states */
+#define SRB_FREE_STATE 1
+#define SRB_ACTIVE_STATE 3
+#define SRB_ACTIVE_TIMEOUT_STATE 4
+#define SRB_SUSPENDED_STATE 7 /* Request in suspended state */
+
+ struct scsi_cmnd *cmd; /* (4) SCSI command block */
+ dma_addr_t dma_handle; /* (4) for unmap of single transfers */
+ atomic_t ref_count; /* reference count for this srb */
+ uint32_t fw_ddb_index;
+ uint8_t err_id; /* error id */
+#define SRB_ERR_PORT 1 /* Request failed because "port down" */
+#define SRB_ERR_LOOP 2 /* Request failed because "loop down" */
+#define SRB_ERR_DEVICE 3 /* Request failed because "device error" */
+#define SRB_ERR_OTHER 4
+
+ uint16_t reserved;
+ uint16_t iocb_tov;
+ uint16_t iocb_cnt; /* Number of used iocbs */
+ uint16_t cc_stat;
+ u_long r_start; /* Time we recieve a cmd from OS */
+ u_long u_start; /* Time when we handed the cmd to F/W */
+} srb_t;
Is this device data? Are these values always big endian? Consider
using the __{le,be} variants for clarity.
+
+/* Never set this to Zero */
+#define SUSPEND_SECONDS 6
-ENOTUSED
+#define SUSPEND_RETRIES 1
-ENOTUSED
+
+ /*
+ * Device Database (DDB) structure
+ */
+typedef struct ddb_entry {
+ struct list_head list; /* ddb list */
+ struct scsi_qla_host *ha;
+ struct iscsi_cls_session *session;
+ atomic_t state; /* DDB State */
+
+ unsigned long flags; /* DDB Flags */
+
+ unsigned long dev_scan_wait_to_start_relogin;
+ unsigned long dev_scan_wait_to_complete_relogin;
+
+ uint16_t os_target_id; /* Target ID */
+ uint16_t fw_ddb_index; /* DDB firmware index */
+ uint8_t reserved[2];
+ uint32_t fw_ddb_device_state; /* F/W Device State -- see ql4_fw.h */
+
+ uint32_t CmdSn;
+ uint16_t target_session_id;
+ uint16_t connection_id;
+ uint16_t exe_throttle; /* Max mumber of cmds outstanding simultaneously */
+ uint16_t task_mgmt_timeout; /* Min time for task mgmt cmds to complete */
+ uint16_t default_relogin_timeout; /* Max time to wait for relogin to complete */
+ uint16_t tcp_source_port_num;
+ uint32_t default_time2wait; /* Default Min time between relogins (+aens) */
+
+ atomic_t port_down_timer; /* Device connection timer */
+ atomic_t retry_relogin_timer; /* Min Time between relogins (4000 only) */
+ atomic_t relogin_timer; /* Max Time to wait for relogin to complete */
+ atomic_t relogin_retry_count; /* Num of times relogin has been retried */
+
+ uint8_t ip_addr[ISCSI_IPADDR_SIZE];
+ uint8_t iscsi_name[ISCSI_NAME_SIZE]; /* 72 x48 */
+ uint8_t iscsi_alias[0x20];
this could use the ISCSI_ALIAS_SIZE.
+} ddb_entry_t;
+
+/*
+ * DDB states.
+ */
+#define DDB_STATE_DEAD 0 /* We can no longer talk to this device */
+#define DDB_STATE_ONLINE 1 /* Device ready to accept commands */
+#define DDB_STATE_MISSING 2 /* Device logged off, trying to re-login */
+#define DDB_STATE_TBL(){ \
+ "DEAD" , \
+ "ONLINE" , \
+ "MISSING" , \
+ NULL \
+ }
-ENOTUSED
+
+/*
+ * DDB firmware states.
+ */
+/* defined in ql4_fw.h
+#define DDB_DS_UNASSIGNED 0x00
+#define DDB_DS_NO_CONNECTION_ACTIVE 0x01
+#define DDB_DS_DISCOVERY 0x02
-ENOTUSED
+#define DDB_DS_NO_SESSION_ACTIVE 0x03
-ENOTUSED
+#define DDB_DS_SESSION_ACTIVE 0x04
+#define DDB_DS_LOGGING_OUT 0x05
-ENOTUSED
+#define DDB_DS_SESSION_FAILED 0x06
+#define DDB_DS_LOGIN_IN_PROCESS 0x07
+*/
+
+/*
+ * DDB flags.
+ */
+#define DF_RELOGIN 0 /* Relogin to device */
+#define DF_NO_RELOGIN 1 /* Do not relogin if IOCTL logged it out */
+#define DF_ISNS_DISCOVERED 2 /* Device was discovered via iSNS */
+#define DF_FO_MASKED 3
-ENOTUSED
+#define DF_RESET_NEEDED 4
-ENOTUSED
+#define DF_PERSISTENT_BOUND 5
-ENOTUSED
+#define DF_TAPE_PRESENT 6
-ENOTUSED
+#define DF_CONFIG_DEVICE 7
-ENOTUSED
+#define DF_RESCAN_NEEDED 8
-ENOTUSED
+/*
+ * DDB port type.
+ */
+typedef enum { FCT_UNKNOWN, FCT_BROADCAST, FCT_INITIATOR, FCT_TARGET
+} ddb_port_type_t;
-ENOTUSED
+
+/*
+ * Asynchronous Event Queue structure
+ */
+typedef struct {
+ uint32_t mbox_sts[MBOX_AEN_REG_COUNT];
+} aen_t;
+
+
+/*
+ * ISP Initialization Control Block.
+ * Little endian except where noted.
+ */
+typedef struct {
+ uint16_t firmware_options;
+ uint16_t tcp_options;
+ uint8_t ip_address[IP_ADDR_LEN];
+ uint8_t isns_ip_address[IP_ADDR_LEN];
+ uint16_t isns_server_port_number;
+ uint8_t alias[32];
+ uint8_t name_string[256];
+ uint8_t heartbeat_interval;
+ uint8_t rsvd;
+} init_cb_t;
-ENOTUSED
These could also be marked with the __{le,be}xx where appropriate if
it gets reused.
+
+/*
+ * Linux Host Adapter structure
+ */
+typedef struct scsi_qla_host {
+ /* Linux adapter configuration data */
+ struct Scsi_Host *host; /* pointer to host data */
+ uint32_t tot_ddbs;
+ unsigned long flags;
+
+#define AF_ONLINE 0 /* 0x00000001 */
+#define AF_INIT_DONE 1 /* 0x00000002 */
+#define AF_MBOX_COMMAND 2 /* 0x00000004 */
+#define AF_MBOX_COMMAND_DONE 3 /* 0x00000008 */
+#define AF_DPC_SCHEDULED 5 /* 0x00000020 */
+#define AF_INTERRUPTS_ON 6 /* 0x00000040 Not Used */
+#define AF_GET_CRASH_RECORD 7 /* 0x00000080 */
+#define AF_LINK_UP 8 /* 0x00000100 */
+#define AF_TOPCAT_CHIP_PRESENT 9 /* 0x00000200 */
+#define AF_IRQ_ATTACHED 10 /* 0x00000400 */
+#define AF_64BIT_PCI_ADDR 11 /* 0x00000800 */
+ unsigned long dpc_flags;
+
+#define DPC_RESET_HA 1 /* 0x00000002 */
+#define DPC_RETRY_RESET_HA 2 /* 0x00000004 */
+#define DPC_RELOGIN_DEVICE 3 /* 0x00000008 */
+#define DPC_RESET_HA_DESTROY_DDB_LIST 4 /* 0x00000010 */
+#define DPC_RESET_HA_INTR 5 /* 0x00000020 */
+#define DPC_ISNS_RESTART 7 /* 0x00000080 */
+#define DPC_ISNS_RESTART_COMPLETION 8 /* 0x00000100 */
+#define DPC_AEN 9 /* 0x00000200 */
+#define DPC_CHECK_LUN 10 /* 0x00000200 */
+#define DPC_WAIT_TO_RELOGIN_DEVICE 11
+#define DPC_GET_DHCP_IP_ADDR 15 /* 0x00008000 */
+
+ uint16_t iocb_cnt;
+ uint16_t iocb_hiwat;
+
+ /* SRB cache. */
+#define SRB_MIN_REQ 128
+ mempool_t *srb_mempool;
+
+ /* pci information */
+ struct pci_dev *pdev;
+
+ /* isp_reg_t *reg; */
+ isp_reg_t __iomem *reg; /* Base I/O address */
+ unsigned long pio_address;
+ unsigned long pio_length;
+#define MIN_IOBASE_LEN 0x100
+
+ uint16_t req_q_count;
+ uint8_t marker_needed;
+ uint8_t rsvd1;
+
+ unsigned long host_no;
+ unsigned long instance;
+
+ /* NVRAM registers */
+ eeprom_data_t *nvram;
+ spinlock_t hardware_lock ____cacheline_aligned;
+ spinlock_t list_lock;
+ uint32_t eeprom_cmd_data;
+
+ /* Counters for general statistics */
+ uint64_t adapter_error_count;
+ uint64_t device_error_count;
+ uint64_t total_io_count;
+ uint64_t total_mbytes_xferred;
+ uint64_t link_failure_count;
+ uint64_t invalid_crc_count;
+ uint32_t spurious_int_count;
+ uint32_t aborted_io_count;
+ uint32_t io_timeout_count;
+ uint32_t mailbox_timeout_count;
+ uint32_t seconds_since_last_intr;
+ uint32_t seconds_since_last_heartbeat;
+ uint32_t mac_index;
+
+ /* Info Needed for Management App */
+ /* --- From GetFwVersion --- */
+ uint32_t firmware_version[2];
+ uint32_t patch_number;
+ uint32_t build_number;
+
+ /* --- From Init_FW --- */
+ /* init_cb_t *init_cb; */
+ uint16_t firmware_options;
+ uint16_t tcp_options;
+ uint8_t ip_address[IP_ADDR_LEN];
+ uint8_t subnet_mask[IP_ADDR_LEN];
+ uint8_t gateway[IP_ADDR_LEN];
+ uint8_t isns_ip_address[IP_ADDR_LEN];
+ uint16_t isns_server_port_number;
+ uint8_t alias[32];
+ uint8_t name_string[256];
+ uint8_t heartbeat_interval;
+ uint8_t rsvd;
+
+ /* --- From FlashSysInfo --- */
+ uint8_t my_mac[MAC_ADDR_LEN];
+ uint8_t serial_number[16];
+
+ /* --- From GetFwState --- */
+ uint32_t firmware_state;
+ uint32_t board_id;
+ uint32_t addl_fw_state;
+
+ /* Linux kernel thread */
+ struct task_struct *dpc_thread;
+ uint8_t dpc_active; /* DPC routine is active */
+
+ /* Linux timer thread */
+ struct timer_list timer;
+ uint32_t timer_active;
+
+ /* Recovery Timers */
+ uint32_t port_down_retry_count;
+ uint32_t discovery_wait;
+ atomic_t check_relogin_timeouts;
+ uint32_t retry_reset_ha_cnt;
+ uint32_t isp_reset_timer; /* reset test timer */
+ uint32_t nic_reset_timer; /* simulated nic reset test timer */
+ int eh_start;
+ struct list_head free_srb_q;
+ uint16_t free_srb_q_count;
+ uint16_t num_srbs_allocated;
+
+ /* Active array */
+ srb_t *active_srb_array[MAX_SRBS];
+ uint16_t current_active_index;
+
+ /* DMA Memory Block */
+ void *queues;
+ dma_addr_t queues_dma;
+ unsigned long queues_len;
+
+#define MEM_ALIGN_VALUE \
+ ((max(REQUEST_QUEUE_DEPTH, RESPONSE_QUEUE_DEPTH)) * \
+ sizeof(QUEUE_ENTRY))
+ /* request and response queue variables */
+ dma_addr_t request_dma;
+ QUEUE_ENTRY *request_ring;
+ QUEUE_ENTRY *request_ptr;
+ dma_addr_t response_dma;
+ QUEUE_ENTRY *response_ring;
+ QUEUE_ENTRY *response_ptr;
+ dma_addr_t shadow_regs_dma;
+ shadow_regs_t *shadow_regs;
+ uint16_t request_in; /* Current indexes. */
+ uint16_t request_out;
+ uint16_t response_in;
+ uint16_t response_out;
+
+ /* aen queue variables */
+ uint16_t aen_q_count; /* Number of available aen_q entries */
+ uint16_t aen_in; /* Current indexes */
+ uint16_t aen_out;
+ aen_t aen_q[MAX_AEN_ENTRIES];
+
+ /* pdu variables */
+ uint16_t pdu_count; /* Number of available aen_q entries */
+ uint16_t pdu_in; /* Current indexes */
+ uint16_t pdu_out;
+ uint16_t pdu_active;
+ PDU_ENTRY *free_pdu_top;
+ PDU_ENTRY *free_pdu_bottom;
+ PDU_ENTRY pdu_queue[MAX_PDU_ENTRIES];
+
+ /* This mutex protects several threads to do mailbox commands
+ * concurrently.
+ */
+ struct mutex mbox_sem;
+ wait_queue_head_t mailbox_wait_queue;
+
+ /* temporary mailbox status registers */
+ volatile uint8_t mbox_status_count;
+ volatile uint32_t mbox_status[MBOX_REG_COUNT];
+
+ /* local device database list (contains internal ddb entries) */
+ struct list_head ddb_list;
+
+ /* Map ddb_list entry by FW ddb index */
+ ddb_entry_t *fw_ddb_index_map[MAX_DDB_ENTRIES];
+} scsi_qla_host_t;
+
+#define ADAPTER_UP(ha) ((test_bit(AF_ONLINE, &ha->flags) != 0) && (test_bit(AF_LINK_UP, &ha->flags) != 0))
+typedef struct {
+ uint8_t ha_mac[MAX_HBAS][MAC_ADDR_LEN];
+} mac_cfgs_t;
-ENOTUSED
+
+/*
+ * Other macros
+ */
+#define to_qla_host(x) ((scsi_qla_host_t *) (x)->hostdata)
+#define ql4_printk(level, ha, format, arg...) \
+ dev_printk(level, &((ha)->pdev->dev), format, ## arg)
+
+/*---------------------------------------------------------------------------*/
+
+/* Defines for qla4xxx_initialize_adapter() and qla4xxx_recover_adapter() */
+#define PRESERVE_DDB_LIST 0
+#define REBUILD_DDB_LIST 1
+
+/* Defines for process_aen() */
+#define PROCESS_ALL_AENS 0
+#define FLUSH_DDB_CHANGED_AENS 1
+#define RELOGIN_DDB_CHANGED_AENS 2
+
+/* Defines for qla4xxx_take_hw_semaphore */
+#define NO_WAIT 0
-ENOTUSED
+#define WAIT_FOREVER 1
-ENOTUSED
+#define TIMED_WAIT 2
-ENOTUSED
+
+#include "ql4_version.h"
+#include "ql4_settings.h"
+#include "ql4_glbl.h"
+#include "ql4_dbg.h"
+#include "ql4_inline.h"
+
+#endif /*_QLA4XXX_H */
^ permalink raw reply related
* Re: [PATCH 2/2] Base pSeries PCIe support
From: Paul Mackerras @ 2006-04-01 8:36 UTC (permalink / raw)
To: Jake Moilanen; +Cc: linuxppc-dev
In-Reply-To: <20060331161330.3c723103.moilanen@austin.ibm.com>
Jake Moilanen writes:
> The NR_IRQS got bumped up to 1024, as vectors can go much higher.
> Unfortunately, this number was arbitrarily picked as there is no claim
> at what the max number really is by either the firmware team, or the
> PAPR+.
What matters is the number of different vectors, not the actual value
of the vectors, because we remap interrupt numbers that the firmware
gives us to logical Linux irq numbers between 0 and NR_IRQS-1. We had
to do that when the POWER5 systems came out, because the interrupt
numbers there occupy 24 bits.
Paul.
^ permalink raw reply
* Re: [CMT 03/16] qla4xxx: driver review ql4_dbg.h
From: Doug Maxey @ 2006-04-01 8:34 UTC (permalink / raw)
To: Ravi Anand; +Cc: Linux SCSI Mailing List
Lots of unused macros.
Comment at the end regarding use of void*.
++doug
--
diff --git a/drivers/scsi/qla4xxx/ql4_dbg.h b/drivers/scsi/qla4xxx/ql4_dbg.h
new file mode 100644
index 0000000..d9a8fa9
--- /dev/null
+++ b/drivers/scsi/qla4xxx/ql4_dbg.h
@@ -0,0 +1,64 @@
+/*
+ * QLogic iSCSI HBA Driver
+ * Copyright (c) 2003-2006 QLogic Corporation
+ *
+ * See LICENSE.qla4xxx for copyright and licensing details.
+ */
+
+/*
+ * Driver debug definitions.
+ */
+/* #define QL_DEBUG */ /* DEBUG messages */
+/* #define QL_DEBUG_LEVEL_3 */ /* Output function tracing */
+/* #define QL_DEBUG_LEVEL_4 */
+/* #define QL_DEBUG_LEVEL_5 */
+/* #define QL_DEBUG_LEVEL_9 */
+
+#define QL_DEBUG_LEVEL_2 /* ALways enable error messagess */
+#if defined(QL_DEBUG)
+#define DEBUG(x) do {x;} while (0);
+#else
+#define DEBUG(x) do {} while (0);
+#endif
+
+#if defined(QL_DEBUG_LEVEL_2)
+#define DEBUG2(x) do {if(extended_error_logging == 2) x;} while (0);
+#define DEBUG2_3(x) do {x;} while (0);
+#else /* */
+#define DEBUG2(x) do {} while (0);
+#endif /* */
+
+#if defined(QL_DEBUG_LEVEL_3)
+#define DEBUG3(x) do {if(extended_error_logging == 3) x;} while (0);
+#else /* */
+#define DEBUG3(x) do {} while (0);
+#if !defined(QL_DEBUG_LEVEL_2)
+#define DEBUG2_3(x) do {} while (0);
-ENOTUSED
+#endif /* */
+#endif /* */
+#if defined(QL_DEBUG_LEVEL_4)
+#define DEBUG4(x) do {x;} while (0);
+#else /* */
+#define DEBUG4(x) do {} while (0);
+#endif /* */
-ENOTUSED
+
+#if defined(QL_DEBUG_LEVEL_5)
+#define DEBUG5(x) do {x;} while (0);
+#else /* */
+#define DEBUG5(x) do {} while (0);
+#endif /* */
+
+#if defined(QL_DEBUG_LEVEL_9)
+#define DEBUG9(x) do {x;} while (0);
+#else /* */
+#define DEBUG9(x) do {} while (0);
+#endif /* */
-ENOTUSED
+
+/*
+ * Debug Print Routines.
+ */
+void qla4xxx_print_scsi_cmd(struct scsi_cmnd *cmd);
+void __dump_registers(scsi_qla_host_t * ha);
+void qla4xxx_dump_mbox_registers(scsi_qla_host_t * ha);
+void qla4xxx_dump_registers(scsi_qla_host_t * ha);
+void qla4xxx_dump_buffer(uint8_t * b, uint32_t size);
'b' could also be a void*.
^ permalink raw reply related
* Re: [CMT 02/16] qla4xxx: driver review ql4_dbg.c
From: Doug Maxey @ 2006-04-01 8:33 UTC (permalink / raw)
To: Ravi Anand; +Cc: Linux SCSI Mailing List
This file looks pretty decent.
The primary issue is that lotso printk's are missing a level.
Another issue - most of the funcs are small and the names are self
explanitory. At least one sppears to have a function header. That
header would be good candidate to have the kerneldoc treatment
applied.
++doug
--
diff --git a/drivers/scsi/qla4xxx/ql4_dbg.c b/drivers/scsi/qla4xxx/ql4_dbg.c
new file mode 100644
index 0000000..2649e49
--- /dev/null
+++ b/drivers/scsi/qla4xxx/ql4_dbg.c
@@ -0,0 +1,211 @@
+/*
+ * QLogic iSCSI HBA Driver
+ * Copyright (c) 2003-2006 QLogic Corporation
+ *
+ * See LICENSE.qla4xxx for copyright and licensing details.
+ */
+
+#include "ql4_def.h"
+
+/*
+ * qla4xxx_print_srb_cmd
+ * This routine displays the SRB command
+ */
+static void qla4xxx_print_srb_info(srb_t * srb)
+{
+ printk("%s: srb = 0x%p, flags=0x%02x\n", __func__, srb, srb->flags);
+ printk("%s: cmd = 0x%p, saved_dma_handle = 0x%lx\n",
+ __func__, srb->cmd, (unsigned long) srb->dma_handle);
+ printk("%s: fw_ddb_index = %d, lun = %d\n",
+ __func__, srb->fw_ddb_index, srb->cmd->device->lun);
+ printk("%s: iocb_tov = %d\n",
+ __func__, srb->iocb_tov);
+ printk("%s: cc_stat = 0x%x, r_start = 0x%lx, u_start = 0x%lx\n\n",
+ __func__, srb->cc_stat, srb->r_start, srb->u_start);
+}
missing printk levels.
+
+/*
+ * qla4xxx_print_scsi_cmd
+ * This routine displays the SCSI command
+ */
+void qla4xxx_print_scsi_cmd(struct scsi_cmnd *cmd)
+{
+ int i;
+ printk("SCSI Command = 0x%p, Handle=0x%p\n", cmd, cmd->host_scribble);
+ printk(" b=%d, t=%02xh, l=%02xh, cmd_len = %02xh\n",
+ cmd->device->channel, cmd->device->id, cmd->device->lun,
+ cmd->cmd_len);
+ printk(" CDB = ");
missing printk levels.
+ for (i = 0; i < cmd->cmd_len; i++)
+ printk("%02x ", cmd->cmnd[i]);
missing printk levels.
+ printk(" seg_cnt = %d\n", cmd->use_sg);
missing printk levels.
+ printk(" request buffer = 0x%p, request buffer len = 0x%x\n",
+ cmd->request_buffer, cmd->request_bufflen);
missing printk levels.
+ if (cmd->use_sg) {
+ struct scatterlist *sg;
+ sg = (struct scatterlist *)cmd->request_buffer;
+ printk(" SG buffer: \n");
missing printk levels.
+ qla4xxx_dump_buffer((caddr_t) sg,
+ (cmd->use_sg * sizeof(struct scatterlist)));
line length.
+ }
+ printk(" tag = %d, transfersize = 0x%x \n", cmd->tag,
+ cmd->transfersize);
missing printk levels.
+ printk(" Pid = %d, SP = 0x%p\n", (int)cmd->pid, CMD_SP(cmd));
missing printk levels.
+ printk(" underflow size = 0x%x, direction=0x%x\n", cmd->underflow,
+ cmd->sc_data_direction);
missing printk levels.
+ printk(" Current time (jiffies) = 0x%lx, "
+ "timeout expires = 0x%lx\n", jiffies, cmd->eh_timeout.expires);
+ qla4xxx_print_srb_info((srb_t *) CMD_SP(cmd));
+}
+
+void __dump_registers(scsi_qla_host_t * ha)
+{
+ uint8_t i;
+ for (i = 0; i < MBOX_REG_COUNT; i++) {
+ printk(KERN_INFO "0x%02X mailbox[%d] = 0x%08X\n",
+ (uint8_t) offsetof(isp_reg_t, mailbox[i]), i,
+ RD_REG_DWORD(&ha->reg->mailbox[i]));
+ }
+ printk(KERN_INFO "0x%02X flash_address = 0x%08X\n",
+ (uint8_t) offsetof(isp_reg_t, flash_address),
+ RD_REG_DWORD(&ha->reg->flash_address));
+ printk(KERN_INFO "0x%02X flash_data = 0x%08X\n",
+ (uint8_t) offsetof(isp_reg_t, flash_data),
+ RD_REG_DWORD(&ha->reg->flash_data));
+ printk(KERN_INFO "0x%02X ctrl_status = 0x%08X\n",
+ (uint8_t) offsetof(isp_reg_t, ctrl_status),
+ RD_REG_DWORD(&ha->reg->ctrl_status));
+ if (IS_QLA4010(ha)) {
+ printk(KERN_INFO "0x%02X nvram = 0x%08X\n",
+ (uint8_t) offsetof(isp_reg_t, u1.isp4010.nvram),
+ RD_REG_DWORD(&ha->reg->u1.isp4010.nvram));
+ }
+
+ else if (IS_QLA4022(ha)) {
+ printk(KERN_INFO "0x%02X intr_mask = 0x%08X\n",
+ (uint8_t) offsetof(isp_reg_t, u1.isp4022.intr_mask),
+ RD_REG_DWORD(&ha->reg->u1.isp4022.intr_mask));
+ printk(KERN_INFO "0x%02X nvram = 0x%08X\n",
+ (uint8_t) offsetof(isp_reg_t, u1.isp4022.nvram),
+ RD_REG_DWORD(&ha->reg->u1.isp4022.nvram));
+ printk(KERN_INFO "0x%02X semaphore = 0x%08X\n",
+ (uint8_t) offsetof(isp_reg_t, u1.isp4022.semaphore),
+ RD_REG_DWORD(&ha->reg->u1.isp4022.semaphore));
+ }
+ printk(KERN_INFO "0x%02X req_q_in = 0x%08X\n",
+ (uint8_t) offsetof(isp_reg_t, req_q_in),
+ RD_REG_DWORD(&ha->reg->req_q_in));
+ printk(KERN_INFO "0x%02X rsp_q_out = 0x%08X\n",
+ (uint8_t) offsetof(isp_reg_t, rsp_q_out),
+ RD_REG_DWORD(&ha->reg->rsp_q_out));
+ if (IS_QLA4010(ha)) {
+ printk(KERN_INFO "0x%02X ext_hw_conf = 0x%08X\n",
+ (uint8_t) offsetof(isp_reg_t, u2.isp4010.ext_hw_conf),
+ RD_REG_DWORD(&ha->reg->u2.isp4010.ext_hw_conf));
+ printk(KERN_INFO "0x%02X port_ctrl = 0x%08X\n",
+ (uint8_t) offsetof(isp_reg_t, u2.isp4010.port_ctrl),
+ RD_REG_DWORD(&ha->reg->u2.isp4010.port_ctrl));
+ printk(KERN_INFO "0x%02X port_status = 0x%08X\n",
+ (uint8_t) offsetof(isp_reg_t, u2.isp4010.port_status),
+ RD_REG_DWORD(&ha->reg->u2.isp4010.port_status));
+ printk(KERN_INFO "0x%02X req_q_out = 0x%08X\n",
+ (uint8_t) offsetof(isp_reg_t, u2.isp4010.req_q_out),
+ RD_REG_DWORD(&ha->reg->u2.isp4010.req_q_out));
+ printk(KERN_INFO "0x%02X gp_out = 0x%08X\n",
+ (uint8_t) offsetof(isp_reg_t, u2.isp4010.gp_out),
+ RD_REG_DWORD(&ha->reg->u2.isp4010.gp_out));
+ printk(KERN_INFO "0x%02X gp_in = 0x%08X\n",
+ (uint8_t) offsetof(isp_reg_t, u2.isp4010.gp_in),
+ RD_REG_DWORD(&ha->reg->u2.isp4010.gp_in));
+ printk(KERN_INFO "0x%02X port_err_status = 0x%08X\n",
+ (uint8_t) offsetof(isp_reg_t,
+ u2.isp4010.port_err_status),
+ RD_REG_DWORD(&ha->reg->u2.isp4010.port_err_status));
+ }
+
+ else if (IS_QLA4022(ha)) {
+ printk(KERN_INFO "Page 0 Registers:\n");
+ printk(KERN_INFO "0x%02X ext_hw_conf = 0x%08X\n",
+ (uint8_t) offsetof(isp_reg_t,
+ u2.isp4022.p0.ext_hw_conf),
+ RD_REG_DWORD(&ha->reg->u2.isp4022.p0.ext_hw_conf));
+ printk(KERN_INFO "0x%02X port_ctrl = 0x%08X\n",
+ (uint8_t) offsetof(isp_reg_t,
+ u2.isp4022.p0.port_ctrl),
+ RD_REG_DWORD(&ha->reg->u2.isp4022.p0.port_ctrl));
+ printk(KERN_INFO "0x%02X port_status = 0x%08X\n",
+ (uint8_t) offsetof(isp_reg_t,
+ u2.isp4022.p0.port_status),
+ RD_REG_DWORD(&ha->reg->u2.isp4022.p0.port_status));
+ printk(KERN_INFO "0x%02X gp_out = 0x%08X\n",
+ (uint8_t) offsetof(isp_reg_t, u2.isp4022.p0.gp_out),
+ RD_REG_DWORD(&ha->reg->u2.isp4022.p0.gp_out));
+ printk(KERN_INFO "0x%02X gp_in = 0x%08X\n",
+ (uint8_t) offsetof(isp_reg_t, u2.isp4022.p0.gp_in),
+ RD_REG_DWORD(&ha->reg->u2.isp4022.p0.gp_in));
+ printk(KERN_INFO "0x%02X port_err_status = 0x%08X\n",
+ (uint8_t) offsetof(isp_reg_t,
+ u2.isp4022.p0.port_err_status),
+ RD_REG_DWORD(&ha->reg->u2.isp4022.p0.port_err_status));
+ printk(KERN_INFO "Page 1 Registers:\n");
+ WRT_REG_DWORD(&ha->reg->ctrl_status,
+ HOST_MEM_CFG_PAGE &
+ SET_RMASK(CSR_SCSI_PAGE_SELECT));
+ printk(KERN_INFO "0x%02X req_q_out = 0x%08X\n",
+ (uint8_t) offsetof(isp_reg_t,
+ u2.isp4022.p1.req_q_out),
+ RD_REG_DWORD(&ha->reg->u2.isp4022.p1.req_q_out));
+ WRT_REG_DWORD(&ha->reg->ctrl_status,
+ PORT_CTRL_STAT_PAGE &
+ SET_RMASK(CSR_SCSI_PAGE_SELECT));
+ }
+}
+
+/*
+ * qla4xxx_dump_registers
+ * This routine displays ISP registers
+ *
+ * Input:
+ * ha - adapter structure pointer
+ *
+ */
kerneldoc style would be good.
+void qla4xxx_dump_mbox_registers(scsi_qla_host_t * ha)
+{
+ unsigned long flags = 0;
+ int i = 0;
+ spin_lock_irqsave(&ha->hardware_lock, flags);
+ for (i = 1; i < MBOX_REG_COUNT; i++)
+ printk(KERN_INFO " Mailbox[%d] = %08x\n", i,
+ RD_REG_DWORD(&ha->reg->mailbox[i]));
+ spin_unlock_irqrestore(&ha->hardware_lock, flags);
+}
+
+void qla4xxx_dump_registers(scsi_qla_host_t * ha)
+{
+ unsigned long flags = 0;
+ spin_lock_irqsave(&ha->hardware_lock, flags);
+ __dump_registers(ha);
+ spin_unlock_irqrestore(&ha->hardware_lock, flags);
+}
+
+void qla4xxx_dump_buffer(uint8_t * b, uint32_t size)
+{
+ uint32_t cnt;
+ uint8_t c;
+ printk(" 0 1 2 3 4 5 6 7 8 9 Ah Bh Ch Dh Eh "
+ "Fh\n");
missing printk levels.
+ printk("------------------------------------------------------------"
+ "--\n");
missing printk levels.
+ for (cnt = 0; cnt < size;) {
+ c = *b++;
+ printk("%02x", (uint32_t) c);
+ cnt++;
+ if (!(cnt % 16))
+ printk("\n");
+
+ else
+ printk(" ");
+ }
+ if (cnt % 16)
+ printk("\n");
+}
missing printk levels. maybe.
^ permalink raw reply related
* Re: [patch 2.6.16-mm2 1/9] sched throttle tree extract - ignore invalid timestamps
From: Mike Galbraith @ 2006-04-01 8:33 UTC (permalink / raw)
To: Ingo Molnar, Andrew Morton; +Cc: lkml, Peter Williams, Nick Piggin, Con Kolivas
In-Reply-To: <1143880124.7617.5.camel@homer>
On an SMP system, a task can awaken on a different cpu from where it
went to sleep. Timestamp inaccuracies can result from the attempt to
compensate for clock drift. Ignore resulting timewarps.
Signed-off-by: Mike Galbraith <efault@gmx.de>
--- linux-2.6.16-mm2/kernel/sched.c-0.fix_rt 2006-03-23 15:01:41.000000000 +0100
+++ linux-2.6.16-mm2/kernel/sched.c 2006-03-23 15:02:25.000000000 +0100
@@ -845,6 +845,15 @@ static int recalc_task_prio(task_t *p, u
unsigned long long __sleep_time = now - p->timestamp;
unsigned long sleep_time;
+ /*
+ * On SMP systems, a task can go to sleep on one CPU
+ * and wake up on another. When this happens, now can
+ * end up being less than p->timestamp for short sleeps.
+ * Ignore these, they're insignificant.
+ */
+ if (unlikely(now < p->timestamp))
+ __sleep_time = 0;
+
if (batch_task(p))
sleep_time = 0;
else {
^ permalink raw reply
* Re: [CMT 01/16] qla4xxx: driver review ql4_attr.c
From: Doug Maxey @ 2006-04-01 8:30 UTC (permalink / raw)
To: Ravi Anand; +Cc: Linux SCSI Mailing List
In general, there are several functions that appear to have no effect,
either by being empty or the code in the function looks like a
placeholder.
It would be good to have the functions empty until they are required.
Looking at it another way, since they are just placeholders, _maybe_
they could be removed then re-added with a followup patch when they
are needed.
++doug
--
diff --git a/drivers/scsi/qla4xxx/ql4_attr.c b/drivers/scsi/qla4xxx/ql4_attr.c
new file mode 100644
index 0000000..9955d0b
--- /dev/null
+++ b/drivers/scsi/qla4xxx/ql4_attr.c
@@ -0,0 +1,273 @@
+/*
+ * QLogic iSCSI HBA Driver
+ * Copyright (c) 2003-2006 QLogic Corporation
+ *
+ * See LICENSE.qla4xxx for copyright and licensing details.
+ */
+
+#include "ql4_def.h"
+#include <scsi/scsi_transport_iscsi.h>
+
+/* Host attributes. */
+
+static void qla4xxx_get_initiator_name(struct Scsi_Host *shost)
+{
+ scsi_qla_host_t *ha = to_qla_host(shost);
+
+ /* &ha->iscsi_name[0]; */
+ /* ha->ip_address[0], ha->ip_address[1], ha->ip_address[2], ha->ip_address[3]) */
+ /* ha->subnet_mask[0], ha->subnet_mask[1], ha->subnet_mask[2], ha->subnet_mask[3]) */
+ /* init_fw_cb->GatewayIPAddr[0],
+ init_fw_cb->GatewayIPAddr[1],
+ init_fw_cb->GatewayIPAddr[2],
+ init_fw_cb->GatewayIPAddr[3]) */
+
+}
This one has no callers other than the set in
qla4xxx_transport_functions(). The function has no effect as all the
code is commented out, so could be removed.
+
+static void qla4xxx_get_initiator_alias(struct Scsi_Host *shost)
+{
+ scsi_qla_host_t *ha = to_qla_host(shost);
+}
nll function.
+
+/* Target attributes. */
+static void qla4xxx_get_isid(struct scsi_target *starget)
+{
+ struct Scsi_Host *shost = dev_to_shost(starget->dev.parent);
+ scsi_qla_host_t *ha = to_qla_host(shost);
+ struct ddb_entry *ddb;
+}
null function.
make a macro or an inline that gets the struct ddb_entry from the
shost. This code is repeated in most of the funcs in this file.
+
+static void qla4xxx_get_tsih(struct scsi_target *starget)
+{
+ struct Scsi_Host *shost = dev_to_shost(starget->dev.parent);
+ scsi_qla_host_t *ha = to_qla_host(shost);
+ struct ddb_entry *ddb = qla4xxx_lookup_ddb_by_fw_index(ha, starget->id);
+}
null function.
+
+static void qla4xxx_get_ip_address(struct scsi_target *starget)
+{
+ struct Scsi_Host *shost = dev_to_shost(starget->dev.parent);
+ scsi_qla_host_t *ha = to_qla_host(shost);
+ struct ddb_entry *ddb = qla4xxx_lookup_ddb_by_fw_index(ha, starget->id);
+
+ if (ddb)
+ memcpy(&iscsi_sin_addr(starget), &ddb->ipaddress,
+ ISCSI_IPADDR_SIZE);
+}
+
+static void qla4xxx_get_port(struct scsi_target *starget)
+{
+ struct Scsi_Host *shost = dev_to_shost(starget->dev.parent);
+ scsi_qla_host_t *ha = to_qla_host(shost);
+ struct ddb_entry *ddb = qla4xxx_lookup_ddb_by_fw_index(ha, starget->id);
+
+ struct sockaddr_in *addr = (struct sockaddr_in *)&ddb->addr;
+ iscsi_port(starget) = addr->sin_port;
+}
+
+static void qla4xxx_get_tpgt(struct scsi_target *starget)
+{
+ struct Scsi_Host *shost = dev_to_shost(starget->dev.parent);
+ scsi_qla_host_t *ha = to_qla_host(shost);
+ struct ddb_entry *ddb = qla4xxx_lookup_ddb_by_fw_index(ha, starget->id);
+
+ iscsi_tpgt(starget) = ddb->portal_group_tag;
+}
+
+static void qla4xxx_get_isid(struct scsi_target *starget)
+{
+ struct Scsi_Host *shost = dev_to_shost(starget->dev.parent);
+ scsi_qla_host_t *ha = to_qla_host(shost);
+ struct ddb_entry *ddb = qla4xxx_lookup_ddb_by_fw_index(ha, starget->id);
+
+ memcpy(iscsi_isid(starget), ddb->isid, sizeof(ddb->isid));
+}
+
+static void qla4xxx_get_initial_r2t(struct scsi_target *starget)
+{
+}
null function.
+
+static void qla4xxx_get_immediate_data(struct scsi_target *starget)
+{
+}
null function.
+
+static void qla4xxx_get_header_digest(struct scsi_target *starget)
+{
+}
null function.
+
+static void qla4xxx_get_data_digest(struct scsi_target *starget)
+{
+}
null function.
+
+static void qla4xxx_get_max_burst_len(struct scsi_target *starget)
+{
+}
null function.
+
+static void qla4xxx_get_first_burst_len(struct scsi_target *starget)
+{
+}
null function.
+
+static void qla4xxx_get_max_recv_data_segment_len(struct scsi_target *starget)
+{
+}
null function.
+
+static void qla4xxx_get_starget_loss_tmo(struct scsi_target *starget)
+{
+ struct Scsi_Host *host = dev_to_shost(starget->dev.parent);
+ scsi_qla_host_t *ha = to_qla_host(host);
+
+ iscsi_starget_dev_loss_tmo(starget) = ha->port_down_retry_count + 5;
+}
+
+static void
+qla4xxx_set_starget_loss_tmo(struct scsi_target *starget, uint32_t timeout)
+{
+ struct Scsi_Host *host = dev_to_shost(starget->dev.parent);
+ scsi_qla_host_t *ha = to_qla_host(host);
+
+ if (timeout)
+ ha->port_down_retry_count = timeout;
+ else
+ ha->port_down_retry_count = 1;
+}
+
+static struct fc_function_template qla4xxx_transport_functions = {
+ .get_isid = qla4xxx_get_isid,
+ .show_isid = 1,
+ .get_tsih = qla4xxx_get_tsih,
+ .show_tsih = 1,
+ .get_port = qla4xxx_get_target_port,
+ .show_port = 1,
+ .get_tpgt = qla4xxx_get_tpgt,
+ .show_tpgt = 1,
+ .get_ip_address = qla4xxx_get_target_ip_address,
+ .show_ip_address = 1,
+ .get_initial_r2t = qla4xxx_get_initial_r2t,
+ .show_initial_r2t = 1,
+ .get_immediate_data = qla4xxx_get_immediate_data,
+ .show_immediate_data = 1,
+ .get_header_digest = qla4xxx_get_header_digest,
+ .show_header_digest = 1,
+ .get_data_digest = qla4xxx_get_data_digest,
+ .show_data_digest = 1,
+ .get_max_burst_len = qla4xxx_get_max_burst_len,
+ .show_max_burst_len = 1,
+ .get_first_burst_len = qla4xxx_get_first_burst_len,
+ .show_first_burst_len = 1,
+ .get_max_recv_data_segment_len = qla4xxx_get_max_recv_data_segment_len,
+ .show_max_recv_data_segment_len = 1,
+ .get_target_name = qla4xxx_get_target_name,
+ .show_target_name = 1,
+ .get_target_alias = qla4xxx_get_target_alias,
+ .show_target_alias = 1,
+ .get_initiator_alias = qla4xxx_get_initiator_alias,
+ .show_initiator_alias = 1,
+ .get_initiator_name = qla4xxx_get_initiator_name,
+ .show_initiator_name = 1,
+
+ .get_starget_dev_loss_tmo = qla4xxx_get_starget_loss_tmo,
+ .set_starget_dev_loss_tmo = qla4xxx_set_starget_loss_tmo,
+ .show_starget_dev_loss_tmo = 1,
+
+};
+
+struct scsi_transport_template *qla4xxx_alloc_transport_tmpl(void)
+{
+ return (iscsi_attach_transport(&qla4xxx_transport_functions));
+}
return is not a function, and does not require parens around the
expression. On the other hand, you are consistent.
+
+/* SYSFS attributes --------------------------------------------------------- */
+
+static ssize_t
+qla4xxx_sysfs_read_nvram(struct kobject *kobj, char *buf, loff_t off,
void* is the preferred data type for buf. saves the cast later.
arithmetic works the same on the
+ size_t count)
+{
+ struct scsi_qla_host *ha = to_qla_host(dev_to_shost(container_of(kobj,
+ struct device, kobj)));
+ uint16_t *witer;
+ unsigned long flags;
+ uint16_t cnt;
+
+ if (!capable(CAP_SYS_ADMIN) || off != 0 || count != sizeof(nvram_t))
+ return 0;
+
+ /* Read NVRAM. */
+ spin_lock_irqsave(&ha->hardware_lock, flags);
+ qla4xxx_lock_nvram_access(ha);
+ witer = (uint16_t *) buf;
+ for (cnt = 0; cnt < count / 2; cnt++) {
+ *witer = cpu_to_le16(qla2x00_get_nvram_word(ha,
+ cnt + ha->nvram_base));
+ witer++;
+ }
+ qla4xxx_unlock_nvram_access(ha);
+ spin_unlock_irqrestore(&ha->hardware_lock, flags);
+
+ return (count);
+}
+
+static ssize_t
+qla4xxx_sysfs_write_nvram(struct kobject *kobj, char *buf, loff_t off,
+ size_t count)
like wise on the buf data type.
+{
+ struct scsi_qla_host *ha = to_qla_host(dev_to_shost(container_of(kobj,
+ struct device, kobj)));
+ uint8_t *iter;
+ uint16_t *witer;
+ unsigned long flags;
+ uint16_t cnt;
+ uint8_t chksum;
+
+ if (!capable(CAP_SYS_ADMIN) || off != 0 || count != sizeof(nvram_t))
+ return 0;
+
+ /* Checksum NVRAM. */
+ iter = (uint8_t *) buf;
+ chksum = 0;
+ for (cnt = 0; cnt < count - 1; cnt++)
+ chksum += *iter++;
+ chksum = ~chksum + 1;
+ *iter = chksum;
+
+ /* Write NVRAM. */
+ spin_lock_irqsave(&ha->hardware_lock, flags);
+ qla4xxx_lock_nvram_access(ha);
+ qla4xxx_release_nvram_protection(ha);
+ witer = (uint16_t *) buf;
+ for (cnt = 0; cnt < count / 2; cnt++) {
+ qla4xxx_write_nvram_word(ha, cnt + ha->nvram_base,
+ cpu_to_le16(*witer));
+ witer++;
+ }
+ qla4xxx_unlock_nvram_access(ha);
+ spin_unlock_irqrestore(&ha->hardware_lock, flags);
+
+ return (count);
+}
+
+static struct bin_attribute sysfs_nvram_attr = {
+ .attr = {
+ .name = "nvram",
+ .mode = S_IRUSR | S_IWUSR,
+ .owner = THIS_MODULE,
+ },
+ .size = sizeof(nvram_t),
+ .read = qla4xxx_sysfs_read_nvram,
+ .write = qla4xxx_sysfs_write_nvram,
+};
+
+void qla4xxx_alloc_sysfs_attr(scsi_qla_host_t * ha)
+{
+ struct Scsi_Host *host = ha->host;
+
+ sysfs_create_bin_file(&host->shost_gendev.kobj, &sysfs_fw_dump_attr);
+ sysfs_create_bin_file(&host->shost_gendev.kobj, &sysfs_nvram_attr);
+}
+
+void qla4xxx_free_sysfs_attr(scsi_qla_host_t * ha)
+{
+ struct Scsi_Host *host = ha->host;
+
+ sysfs_remove_bin_file(&host->shost_gendev.kobj, &sysfs_fw_dump_attr);
+ sysfs_remove_bin_file(&host->shost_gendev.kobj, &sysfs_nvram_attr);
+}
^ permalink raw reply related
* [patch 2.6.16-mm2 0/9] sched throttle tree extract
From: Mike Galbraith @ 2006-04-01 8:28 UTC (permalink / raw)
To: Ingo Molnar, Andrew Morton; +Cc: lkml, Peter Williams, Nick Piggin, Con Kolivas
Greetings,
The following 9 patches is an extraction of my scheduler throttling tree
against 2.6.16-mm2. The patch below has already been applied, and is
only included such that anyone applying these patches to virgin source
will see no offsets.
-Mike
Signed-off-by: Mike Galbraith <efault@gmx.de>
--- linux-2.6.16-mm2/kernel/sched.c.org 2006-03-31 09:56:37.000000000 +0200
+++ linux-2.6.16-mm2/kernel/sched.c 2006-03-31 13:32:40.000000000 +0200
@@ -820,7 +820,7 @@ static void __activate_task(task_t *p, r
{
prio_array_t *target = rq->active;
- if (unlikely(batch_task(p) || expired_starving(rq)))
+ if (unlikely(batch_task(p) || (expired_starving(rq) && !rt_task(p))))
target = rq->expired;
enqueue_task(p, target);
inc_nr_running(p, rq);
^ permalink raw reply
* Re: addendum: was Re: recovering data on a failed raid-0 installation
From: Technomage @ 2006-04-01 8:23 UTC (permalink / raw)
To: linux-raid
In-Reply-To: <442E0F36.2050606@h3c.com>
On Friday 31 March 2006 22:27, Mike Hardy wrote:
> Well, honestly I'm not really sure. I've never done this as I only use
> the redundant raid levels, and when they're gone, things are a complete
> hash and there's no hope. In fact, with raid-0 (striping, right? not
> linear/append?) I believe you are in the same boat. Each large file will
> have half its contents on the disk that died. So really, there's very
> little hope.
ok. in one of the tests we did, it has proved to have written in a linear
fashion. so, at least 1 disk may have most of the data (with mdadm v. 1.6.0).
But this was not the version of mdadm that was in dispute (mdadm v.1.9.0-3).
we have not been able to prove that the version of mdadm that is in dispute
writes in a linear mode, but that is the consensus at this point. The issue
here is how the yast installer for suse creates the array, which is what we
cannot confirm at this point.
>
> Anyway, I'll try to give you pointers to what I would try anyway, with
> as much detail as I can.
>
> First, you just need to get the raid device up. It sounds like you are
> actually already doing that, but who knows. If you have one drive but
> not the other, you could make a sparse file that is the same size as the
> disk you lost. I know this is possible, but haven't done it so you'll
> have to see for yourself - I think there are examples in linux-raid
> archives in reference to testing very large raid arrays. Loopback mount
> the file as a device (losetup is he command to use here) and now you
> have a "virtual" device of the same size as the drive you lost.
it appears from the errors as detailed to me, the raid array does come up, but
as soon as xfs tries to check the array is when the trouble starts. The
errors for this have been posted here in another thread.
as for the last sentence above, when we tried something similar, we
encountered superblock problems. additionally, no valid or verifiable
secondary superblocks could be found on the test array given the conditions
to mimic the original problem.
>
> Recreate the raid array using the drive you have, and the new "virtual"
> drive in place of the one you lost. It's probably best to do this with
> non-persistent superblocks and just generally as read-only as possible
> for data preservation on the drive you have.
one small problem in the suse yast installer, "persistant superblocks" is
usually defaulted to on. and that was not changed in the original install.
>
> So now you have a raid array.
>
> For the filesystem, well, I don't know. That's a mess. I assume it's
> possible to mount the filesystem with some degree of force (probably a
> literally -force argument) as well as read-only. You may need to point
> at a different superblock, who knows?
This is xfs, it has a pretty good reputation at maintaining and retrieving
data. However, as stated above, secondary superblocks could not be found to
enable this operation.
>
> You just want to get the filesystem to mount somehow, any way you need
> to, but hopefully in a read-only mode.
>
> I would not even attempt to fsck it.
>
> At this point, you have a mostly busted filesystem on a fairly broken
> raid setup, but it might be possible to pull some data out of it, who
> knows? You could pull what looks like data but is instead garbage to
> though - if you don't have md5sums of the files you get (if you get any)
> it'll be hard to tell without checking them all.
>
> Honestly, that's as much as I can think of.
>
> I know I'm just repeating myself when I say this, but raid is no
> replacement for backups. They have different purposes, and backups are
> no less necessary. I was sorry to hear you didn't have any, because that
> probably seals the coffin on your data.
let us hope not. we still have several other options to try, including a
partially functional drive that we can "possibly" retrieve data off of.
there is also the possibility that this is related to a kernel bug (as stated
in another thread recently) and that there may not actually be anything wrong
with the drive at all.
>
> That said, it sounded like you had already tried to fsck the filesystem
> on this thing, so you may have hashed the remaining drive. It's hard to
> say. Truly bleak though...
actually, we have done nothing to the original other that to duplicate it.
same goes for the secondary drive, though there were some problems on the
laptop in question. IOW, my friend is so paranoid about the data that he
treats the drives with tender loving care (IOW no destructive tests have
been, or will be, run on the originals).
on another front, because of the aforementioned kernel bug with XFS and mdadm,
what are your thoughts on using LVM?
^ permalink raw reply
* Re: Oops: mounting floppy disk on PPC64 (power3)
From: Markus Rothe @ 2006-04-01 7:43 UTC (permalink / raw)
To: linux-kernel; +Cc: linuxppc-dev
In-Reply-To: <20060331225034.GA25663@localdomain>
[-- Attachment #1: Type: text/plain, Size: 181 bytes --]
On Friday 31 March 2006 22:50, Nathan Lynch wrote:
> Maybe you could verify with latest -git, or 2.6.17-rc1 when it's
> released?
Yes, it is fixed.
Thanks for help!
Markus Rothe
[-- Attachment #2: Type: application/pgp-signature, Size: 191 bytes --]
^ permalink raw reply
* acpi_thread_id = acpi_os_get_thread_id()
From: Brown, Len @ 2006-04-01 8:13 UTC (permalink / raw)
To: Moore, Robert; +Cc: linux-acpi
Bob,
with the new type acpi_thread_id, it seems that the thread_id grows from
32-bits
to 64-bits on a 64-bit mahcine.
acpi_os_get_thread_id() currently returns task.pid on Linux,
a 32-bit integer on both 32 and 64-bit machines.
So if acpi_os_get_thread_id() is called at interrupt level,
its return value is meaningless.
Linux doesn't define ACPI_MUTEX_DEBUG, and looks like it never will.
Is it possible to delete the concept of acpi_os_get_thread_id()?
I'm wondering at the moment if the right thing isn't to do this:
#define acpi_os_get_thread_id() (0)
thanks,
-Len
^ permalink raw reply
* Re: fsck.reiser4 segfaults
From: Sarath Menon @ 2006-04-01 8:13 UTC (permalink / raw)
To: jfeise; +Cc: Michael Weissenbacher, reiserfs-list
In-Reply-To: <442E178D.40300@gmail.com>
Me too, ;) I also found http://www.lxnaydesign.net/, useful if you
need a browser to be around too.
Here's the dmesg output when i try to mount it.
reiser4[mount(11756)]: renew_sibling_link
(fs/reiser4/tree_walk.c:441)[nikita-3532]:
WARNING: Sibling nodes on the different levels: 4 != 4
reiser4[mount(11756)]: key_warning (fs/reiser4/plugin/object.c:97)[nikita-717]:
WARNING: Error for inode 42 (-5)
The kernel version seems to be a bit old at 2.6.10-lxnay3. Should I
try with a newer kernel, with debug args maybe?
Thanks,
Sarath
On 4/1/06, Joachim Feise <jfeise@gmail.com> wrote:
> Michael Weissenbacher wrote on 03/31/06 12:21:
>
> > Hi,
> >> reiserfsprogs and libaal are both 1.0.5. I'll give you the dmesg
> >> output tommorow - I need to get a livecd with reiser4 patches - its
> >> more difficult than I initially thought ;)
> > I'm using RIPLinux, which has reiser4 support.
> > http://www.tux.org/pub/people/kent-robotti/looplinux/rip/
>
>
> Thanks for that info. I was looking for a boot disk with reiser4 for some time.
>
> -Joe
>
--
--------------------------
I presume, when you pronounce iptables, you say that you are peeing tables
^ permalink raw reply
* Re: Moving to BK
From: Jakub Narebski @ 2006-04-01 7:13 UTC (permalink / raw)
To: linux-kernel; +Cc: git
In-Reply-To: <Pine.LNX.4.64.0603312030060.27203@g5.osdl.org>
Linus Torvalds wrote:
> On Fri, 31 Mar 2006, David S. Miller wrote:
>>
>> April 1st is upon us again.
>
> I really like the new slashdot look. "OMG!!! Ponies!!!"
>
> I hope they keep it after Apr 1st.
Apr 1st begins at Mar 31st (some of Fool's Day articles on slashdot are from
Mar 31st localtime), and for some it would continue at lest to Apr 2nd ;-)
--
Jakub Narebski
Warsaw, Poland
^ permalink raw reply
* Problem with diskstats (kernel 2.6.15-gentoo-r1)
From: Toon van der Pas @ 2006-04-01 7:39 UTC (permalink / raw)
To: linux-kernel, mike.miller
Hi,
This morning I discovered a strange problem with the output of
/proc/diskstats; the cciss driver only produces the first 4 fields:
# cat /proc/diskstats
2 0 fd0 0 0 0 0 0 0 0 0 0 0 0
1 0 ram0 0 0 0 0 0 0 0 0 0 0 0
1 1 ram1 0 0 0 0 0 0 0 0 0 0 0
1 2 ram2 0 0 0 0 0 0 0 0 0 0 0
1 3 ram3 0 0 0 0 0 0 0 0 0 0 0
1 4 ram4 0 0 0 0 0 0 0 0 0 0 0
1 5 ram5 0 0 0 0 0 0 0 0 0 0 0
1 6 ram6 0 0 0 0 0 0 0 0 0 0 0
1 7 ram7 0 0 0 0 0 0 0 0 0 0 0
1 8 ram8 0 0 0 0 0 0 0 0 0 0 0
1 9 ram9 0 0 0 0 0 0 0 0 0 0 0
1 10 ram10 0 0 0 0 0 0 0 0 0 0 0
1 11 ram11 0 0 0 0 0 0 0 0 0 0 0
1 12 ram12 0 0 0 0 0 0 0 0 0 0 0
1 13 ram13 0 0 0 0 0 0 0 0 0 0 0
1 14 ram14 0 0 0 0 0 0 0 0 0 0 0
1 15 ram15 0 0 0 0 0 0 0 0 0 0 0
7 0 loop0 0 0 0 0 0 0 0 0 0 0 0
7 1 loop1 0 0 0 0 0 0 0 0 0 0 0
7 2 loop2 0 0 0 0 0 0 0 0 0 0 0
7 3 loop3 0 0 0 0 0 0 0 0 0 0 0
7 4 loop4 0 0 0 0 0 0 0 0 0 0 0
7 5 loop5 0 0 0 0 0 0 0 0 0 0 0
7 6 loop6 0 0 0 0 0 0 0 0 0 0 0
7 7 loop7 0 0 0 0 0 0 0 0 0 0 0
104 0 cciss/c0d0 847389 32332 0 2982364 1619046 4086174 0
52598252 0 12069816 55580352
104 1 cciss/c0d0p1 554 52382 7 20
104 2 cciss/c0d0p2 29 232 42 336
104 3 cciss/c0d0p3 84233 5811794 1516187 12129496
104 4 cciss/c0d0p4 795049 17425244 4190632 33525064
104 16 cciss/c0d1 86563628 212593 0 655297532 13528298 14360980 0
1485869084 502 371162916 2142684840
104 17 cciss/c0d1p1 86776123 1102284661 27890200 223121616
3 0 hda 0 0 0 0 0 0 0 0 0 0 0
254 0 dm-0 0 0 0 0 0 0 0 0 0 0 0
254 1 dm-1 0 0 0 0 0 0 0 0 0 0 0
254 2 dm-2 0 0 0 0 0 0 0 0 0 0 0
254 3 dm-3 0 0 0 0 0 0 0 0 0 0 0
254 4 dm-4 0 0 0 0 0 0 0 0 0 0 0
254 5 dm-5 0 0 0 0 0 0 0 0 0 0 0
254 6 dm-6 0 0 0 0 0 0 0 0 0 0 0
254 7 dm-7 0 0 0 0 0 0 0 0 0 0 0
Maybe the cciss maintainer can comment?
Regards,
Toon.
^ permalink raw reply
* Re: [KJ][Patch] fix kbuild warning in sisfb.o
From: Sam Ravnborg @ 2006-04-01 7:38 UTC (permalink / raw)
To: kernel-janitors
In-Reply-To: <1143810678.7834.13.camel@localhost.localdomain>
[-- Attachment #1: Type: text/plain, Size: 1690 bytes --]
On Sat, Apr 01, 2006 at 01:12:13PM +1100, Darren Jenkins" wrote:
> Sam
>
> I don't know weather you are aware of this one yet, but we have just
> found an issue where 'struct pci_device_id' should be marked
> __devinitdata (see Documentation/pci.txt) as the pci code apparently
> only uses it in the driver initialisation, but the 'struct pci_driver'
> will still hold a pointer to it, giving a kbuild warning. See below.
> This definitely looks like a false positive that should be removed.
Hi Darren.
Following patch should fix it.
It recognize that the variable is named *_driver, and in that case
it will not warn about references to .init.data (+.init.text and
.exit.text).
This is only compiletine tested since I'm a bit busy atm.
Let me know if this solves it as expected and especially if it seems
to silence warnings that is not false positives.
Sam
diff --git a/scripts/mod/modpost.c b/scripts/mod/modpost.c
index 0b92ddf..81448e5 100644
--- a/scripts/mod/modpost.c
+++ b/scripts/mod/modpost.c
@@ -492,7 +492,7 @@ static int strrcmp(const char *s, const
* These functions may often be marked __init and we do not want to
* warn here.
* the pattern is identified by:
- * tosec = .init.text | .exit.text
+ * tosec = .init.text | .exit.text | .init.data
* fromsec = .data
* atsym = *_driver, *_ops, *_probe, *probe_one
**/
@@ -522,7 +522,8 @@ static int secref_whitelist(const char *
/* Check for pattern 2 */
if ((strcmp(tosec, ".init.text") != 0) &&
- (strcmp(tosec, ".exit.text") != 0))
+ (strcmp(tosec, ".exit.text") != 0) &&
+ (strcmp(tosec, ".init.data") != 0))
f2 = 0;
if (strcmp(fromsec, ".data") != 0)
f2 = 0;
[-- Attachment #2: Type: text/plain, Size: 168 bytes --]
_______________________________________________
Kernel-janitors mailing list
Kernel-janitors@lists.osdl.org
https://lists.osdl.org/mailman/listinfo/kernel-janitors
^ permalink raw reply related
* Re: [parisc-linux] Strange newest LAB msg?
From: Helge Deller @ 2006-04-01 7:35 UTC (permalink / raw)
To: parisc-linux; +Cc: Matthew Wilcox
In-Reply-To: <20060401070236.GC23508@colo.lackof.org>
On Saturday 01 April 2006 09:02, Grant Grundler wrote:
> On Fri, Mar 31, 2006 at 08:54:48AM -0700, Matthew Wilcox wrote:
> >
> > Just so nobody else has to scratch their head looking at two
> > almost-identical dumps, the message Joel means is
> >
> > > Mar 31 11:45:39 patst006 kernel: allocation failed: out of vmalloc space - use
> > > vmalloc=<size> to increase size.
>
> Ah - thanks. I saw that but wasn't sure it was the cause of discussion.
>
> > Either we're leaking vmalloc space, we allocate too much of it, or we
> > need to drastically increase it the amount of it we have available.
>
> It's odd that vmalloc fails so early in the boot sequence.
> At least the last 10 (of 14) PCI busses fail with the
> "allocation failed" message.
> Could this somehow be related to the IOREMAP changes?
I'm pretty sure.
We never vmalloc'ed IOmem before.
Helge
_______________________________________________
parisc-linux mailing list
parisc-linux@lists.parisc-linux.org
http://lists.parisc-linux.org/mailman/listinfo/parisc-linux
^ permalink raw reply
* Re: Moving to BK
From: Jakub Narebski @ 2006-04-01 7:13 UTC (permalink / raw)
To: git; +Cc: linux-kernel
In-Reply-To: <Pine.LNX.4.64.0603312030060.27203@g5.osdl.org>
Linus Torvalds wrote:
> On Fri, 31 Mar 2006, David S. Miller wrote:
>>
>> April 1st is upon us again.
>
> I really like the new slashdot look. "OMG!!! Ponies!!!"
>
> I hope they keep it after Apr 1st.
Apr 1st begins at Mar 31st (some of Fool's Day articles on slashdot are from
Mar 31st localtime), and for some it would continue at lest to Apr 2nd ;-)
--
Jakub Narebski
Warsaw, Poland
^ permalink raw reply
* Re: [parisc-linux] Strange newest LAB msg?
From: Grant Grundler @ 2006-04-01 7:02 UTC (permalink / raw)
To: Matthew Wilcox; +Cc: Parisc List
In-Reply-To: <20060331155448.GP13590@parisc-linux.org>
On Fri, Mar 31, 2006 at 08:54:48AM -0700, Matthew Wilcox wrote:
>
> Just so nobody else has to scratch their head looking at two
> almost-identical dumps, the message Joel means is
>
> > Mar 31 11:45:39 patst006 kernel: allocation failed: out of vmalloc space - use
> > vmalloc=<size> to increase size.
Ah - thanks. I saw that but wasn't sure it was the cause of discussion.
> Either we're leaking vmalloc space, we allocate too much of it, or we
> need to drastically increase it the amount of it we have available.
It's odd that vmalloc fails so early in the boot sequence.
At least the last 10 (of 14) PCI busses fail with the
"allocation failed" message.
Could this somehow be related to the IOREMAP changes?
grant
_______________________________________________
parisc-linux mailing list
parisc-linux@lists.parisc-linux.org
http://lists.parisc-linux.org/mailman/listinfo/parisc-linux
^ permalink raw reply
page: next (older) | prev (newer) | latest
- recent:[subjects (threaded)|topics (new)|topics (active)]
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.