Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
L
linux
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Kirill Smelkov
linux
Commits
81ebcc6d
Commit
81ebcc6d
authored
Apr 24, 2003
by
Justin T. Gibbs
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Aic7xxx and Aic79xx Driver Updates
o Adapt to new IRQ handler declaration/behavior for 2.5.X
parent
412e802d
Changes
7
Hide whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
103 additions
and
55 deletions
+103
-55
drivers/scsi/aic7xxx/aic79xx_inline.h
drivers/scsi/aic7xxx/aic79xx_inline.h
+20
-20
drivers/scsi/aic7xxx/aic79xx_osm.c
drivers/scsi/aic7xxx/aic79xx_osm.c
+5
-3
drivers/scsi/aic7xxx/aic79xx_osm.h
drivers/scsi/aic7xxx/aic79xx_osm.h
+3
-2
drivers/scsi/aic7xxx/aic7xxx_inline.h
drivers/scsi/aic7xxx/aic7xxx_inline.h
+19
-18
drivers/scsi/aic7xxx/aic7xxx_osm.c
drivers/scsi/aic7xxx/aic7xxx_osm.c
+5
-5
drivers/scsi/aic7xxx/aic7xxx_osm.h
drivers/scsi/aic7xxx/aic7xxx_osm.h
+3
-2
drivers/scsi/aic7xxx/aiclib.h
drivers/scsi/aic7xxx/aiclib.h
+48
-5
No files found.
drivers/scsi/aic7xxx/aic79xx_inline.h
View file @
81ebcc6d
...
...
@@ -37,7 +37,7 @@
* IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGES.
*
* $Id: //depot/aic7xxx/aic7xxx/aic79xx_inline.h#4
5
$
* $Id: //depot/aic7xxx/aic7xxx/aic79xx_inline.h#4
6
$
*
* $FreeBSD$
*/
...
...
@@ -805,7 +805,7 @@ ahd_get_sense_bufaddr(struct ahd_softc *ahd, struct scb *scb)
static
__inline
void
ahd_sync_qoutfifo
(
struct
ahd_softc
*
ahd
,
int
op
);
static
__inline
void
ahd_sync_tqinfifo
(
struct
ahd_softc
*
ahd
,
int
op
);
static
__inline
u_int
ahd_check_cmdcmpltqueues
(
struct
ahd_softc
*
ahd
);
static
__inline
void
ahd_intr
(
struct
ahd_softc
*
ahd
);
static
__inline
int
ahd_intr
(
struct
ahd_softc
*
ahd
);
static
__inline
void
ahd_sync_qoutfifo
(
struct
ahd_softc
*
ahd
,
int
op
)
...
...
@@ -864,7 +864,7 @@ ahd_check_cmdcmpltqueues(struct ahd_softc *ahd)
/*
* Catch an interrupt from the adapter
*/
static
__inline
void
static
__inline
int
ahd_intr
(
struct
ahd_softc
*
ahd
)
{
u_int
intstat
;
...
...
@@ -876,7 +876,7 @@ ahd_intr(struct ahd_softc *ahd)
* so just return. This is likely just a shared
* interrupt.
*/
return
;
return
(
0
)
;
}
/*
...
...
@@ -924,28 +924,28 @@ ahd_intr(struct ahd_softc *ahd)
#endif
}
if
(
intstat
==
0xFF
&&
(
ahd
->
features
&
AHD_REMOVABLE
)
!=
0
)
/* Hot eject */
return
;
if
((
intstat
&
INT_PEND
)
==
0
)
return
;
return
(
0
)
;
if
(
intstat
&
HWERRINT
)
{
/*
* Handle statuses that may invalidate our cached
* copy of INTSTAT separately.
*/
if
(
intstat
==
0xFF
&&
(
ahd
->
features
&
AHD_REMOVABLE
)
!=
0
)
{
/* Hot eject. Do nothing */
}
else
if
(
intstat
&
HWERRINT
)
{
ahd_handle_hwerrint
(
ahd
);
return
;
}
if
((
intstat
&
(
PCIINT
|
SPLTINT
))
!=
0
)
{
}
else
if
((
intstat
&
(
PCIINT
|
SPLTINT
))
!=
0
)
{
ahd
->
bus_intr
(
ahd
);
return
;
}
}
else
{
if
((
intstat
&
SEQINT
)
!=
0
)
ahd_handle_seqint
(
ahd
,
intstat
);
if
((
intstat
&
SEQINT
)
!=
0
)
ahd_handle_seqint
(
ahd
,
intstat
);
if
((
intstat
&
SCSIINT
)
!=
0
)
ahd_handle_scsiint
(
ahd
,
intstat
);
if
((
intstat
&
SCSIINT
)
!=
0
)
ahd_handle_scsiint
(
ahd
,
intstat
);
}
return
(
1
);
}
#endif
/* _AIC79XX_INLINE_H_ */
drivers/scsi/aic7xxx/aic79xx_osm.c
View file @
81ebcc6d
/*
* Adaptec AIC79xx device driver for Linux.
*
* $Id: //depot/aic7xxx/linux/drivers/scsi/aic7xxx/aic79xx_osm.c#15
6
$
* $Id: //depot/aic7xxx/linux/drivers/scsi/aic7xxx/aic79xx_osm.c#15
7
$
*
* --------------------------------------------------------------------------
* Copyright (c) 1994-2000 Justin T. Gibbs.
...
...
@@ -4206,19 +4206,21 @@ ahd_linux_run_device_queue(struct ahd_softc *ahd, struct ahd_linux_device *dev)
/*
* SCSI controller interrupt handler.
*/
void
AIC_LINUX_IRQRETURN_T
ahd_linux_isr
(
int
irq
,
void
*
dev_id
,
struct
pt_regs
*
regs
)
{
struct
ahd_softc
*
ahd
;
u_long
flags
;
int
ours
;
ahd
=
(
struct
ahd_softc
*
)
dev_id
;
ahd_lock
(
ahd
,
&
flags
);
ahd_intr
(
ahd
);
ours
=
ahd_intr
(
ahd
);
if
(
ahd_linux_next_device_to_run
(
ahd
)
!=
NULL
)
ahd_schedule_runq
(
ahd
);
ahd_linux_run_complete_queue
(
ahd
);
ahd_unlock
(
ahd
,
&
flags
);
AIC_LINUX_IRQRETURN
(
ours
);
}
void
...
...
drivers/scsi/aic7xxx/aic79xx_osm.h
View file @
81ebcc6d
...
...
@@ -36,7 +36,7 @@
* IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGES.
*
* $Id: //depot/aic7xxx/linux/drivers/scsi/aic7xxx/aic79xx_osm.h#12
8
$
* $Id: //depot/aic7xxx/linux/drivers/scsi/aic7xxx/aic79xx_osm.h#12
9
$
*
*/
#ifndef _AIC79XX_LINUX_H_
...
...
@@ -1211,7 +1211,8 @@ void ahd_platform_set_tags(struct ahd_softc *ahd,
int
ahd_platform_abort_scbs
(
struct
ahd_softc
*
ahd
,
int
target
,
char
channel
,
int
lun
,
u_int
tag
,
role_t
role
,
uint32_t
status
);
void
ahd_linux_isr
(
int
irq
,
void
*
dev_id
,
struct
pt_regs
*
regs
);
AIC_LINUX_IRQRETURN_T
ahd_linux_isr
(
int
irq
,
void
*
dev_id
,
struct
pt_regs
*
regs
);
void
ahd_platform_flushwork
(
struct
ahd_softc
*
ahd
);
int
ahd_softc_comp
(
struct
ahd_softc
*
,
struct
ahd_softc
*
);
void
ahd_done
(
struct
ahd_softc
*
,
struct
scb
*
);
...
...
drivers/scsi/aic7xxx/aic7xxx_inline.h
View file @
81ebcc6d
...
...
@@ -37,7 +37,7 @@
* IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGES.
*
* $Id: //depot/aic7xxx/aic7xxx/aic7xxx_inline.h#4
0
$
* $Id: //depot/aic7xxx/aic7xxx/aic7xxx_inline.h#4
1
$
*
* $FreeBSD$
*/
...
...
@@ -500,7 +500,7 @@ ahc_get_sense_bufaddr(struct ahc_softc *ahc, struct scb *scb)
static
__inline
void
ahc_sync_qoutfifo
(
struct
ahc_softc
*
ahc
,
int
op
);
static
__inline
void
ahc_sync_tqinfifo
(
struct
ahc_softc
*
ahc
,
int
op
);
static
__inline
u_int
ahc_check_cmdcmpltqueues
(
struct
ahc_softc
*
ahc
);
static
__inline
void
ahc_intr
(
struct
ahc_softc
*
ahc
);
static
__inline
int
ahc_intr
(
struct
ahc_softc
*
ahc
);
static
__inline
void
ahc_sync_qoutfifo
(
struct
ahc_softc
*
ahc
,
int
op
)
...
...
@@ -558,7 +558,7 @@ ahc_check_cmdcmpltqueues(struct ahc_softc *ahc)
/*
* Catch an interrupt from the adapter
*/
static
__inline
void
static
__inline
int
ahc_intr
(
struct
ahc_softc
*
ahc
)
{
u_int
intstat
;
...
...
@@ -570,7 +570,7 @@ ahc_intr(struct ahc_softc *ahc)
* so just return. This is likely just a shared
* interrupt.
*/
return
;
return
(
0
)
;
}
/*
* Instead of directly reading the interrupt status register,
...
...
@@ -604,10 +604,6 @@ ahc_intr(struct ahc_softc *ahc)
#endif
}
if
(
intstat
==
0xFF
&&
(
ahc
->
features
&
AHC_REMOVABLE
)
!=
0
)
/* Hot eject */
return
;
if
((
intstat
&
INT_PEND
)
==
0
)
{
#if AHC_PCI_CONFIG > 0
if
(
ahc
->
unsolicited_ints
>
500
)
{
...
...
@@ -618,24 +614,29 @@ ahc_intr(struct ahc_softc *ahc)
}
#endif
ahc
->
unsolicited_ints
++
;
return
;
return
(
0
)
;
}
ahc
->
unsolicited_ints
=
0
;
if
(
intstat
&
BRKADRINT
)
{
/*
* Handle statuses that may invalidate our cached
* copy of INTSTAT separately.
*/
if
(
intstat
==
0xFF
&&
(
ahc
->
features
&
AHC_REMOVABLE
)
!=
0
)
{
/* Hot eject. Do nothing */
}
else
if
(
intstat
&
BRKADRINT
)
{
ahc_handle_brkadrint
(
ahc
);
/* Fatal error, no more interrupts to handle. */
return
;
}
}
else
if
((
intstat
&
(
SEQINT
|
SCSIINT
))
!=
0
)
{
if
((
intstat
&
(
SEQINT
|
SCSIINT
))
!=
0
)
ahc_pause_bug_fix
(
ahc
);
if
((
intstat
&
SEQINT
)
!=
0
)
ahc_handle_seqint
(
ahc
,
intstat
);
if
((
intstat
&
SEQINT
)
!=
0
)
ahc_handle_seqint
(
ahc
,
intstat
);
if
((
intstat
&
SCSIINT
)
!=
0
)
ahc_handle_scsiint
(
ahc
,
intstat
);
if
((
intstat
&
SCSIINT
)
!=
0
)
ahc_handle_scsiint
(
ahc
,
intstat
);
}
return
(
1
);
}
#endif
/* _AIC7XXX_INLINE_H_ */
drivers/scsi/aic7xxx/aic7xxx_osm.c
View file @
81ebcc6d
/*
* Adaptec AIC7xxx device driver for Linux.
*
* $Id: //depot/aic7xxx/linux/drivers/scsi/aic7xxx/aic7xxx_osm.c#21
7
$
* $Id: //depot/aic7xxx/linux/drivers/scsi/aic7xxx/aic7xxx_osm.c#21
8
$
*
* Copyright (c) 1994 John Aycock
* The University of Calgary Department of Computer Science.
...
...
@@ -3877,21 +3877,21 @@ ahc_linux_run_device_queue(struct ahc_softc *ahc, struct ahc_linux_device *dev)
/*
* SCSI controller interrupt handler.
*/
irqreturn_t
AIC_LINUX_IRQRETURN_T
ahc_linux_isr
(
int
irq
,
void
*
dev_id
,
struct
pt_regs
*
regs
)
{
struct
ahc_softc
*
ahc
;
u_long
flags
;
int
ours
;
ahc
=
(
struct
ahc_softc
*
)
dev_id
;
ahc_lock
(
ahc
,
&
flags
);
ahc_intr
(
ahc
);
ours
=
ahc_intr
(
ahc
);
if
(
ahc_linux_next_device_to_run
(
ahc
)
!=
NULL
)
ahc_schedule_runq
(
ahc
);
ahc_linux_run_complete_queue
(
ahc
);
ahc_unlock
(
ahc
,
&
flags
);
/* FIXME! Was it really ours? */
return
IRQ_HANDLED
;
AIC_LINUX_IRQRETURN
(
ours
);
}
void
...
...
drivers/scsi/aic7xxx/aic7xxx_osm.h
View file @
81ebcc6d
...
...
@@ -53,7 +53,7 @@
* IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGES.
*
* $Id: //depot/aic7xxx/linux/drivers/scsi/aic7xxx/aic7xxx_osm.h#13
8
$
* $Id: //depot/aic7xxx/linux/drivers/scsi/aic7xxx/aic7xxx_osm.h#13
9
$
*
*/
#ifndef _AIC7XXX_LINUX_H_
...
...
@@ -1163,7 +1163,8 @@ void ahc_platform_set_tags(struct ahc_softc *ahc,
int
ahc_platform_abort_scbs
(
struct
ahc_softc
*
ahc
,
int
target
,
char
channel
,
int
lun
,
u_int
tag
,
role_t
role
,
uint32_t
status
);
irqreturn_t
ahc_linux_isr
(
int
irq
,
void
*
dev_id
,
struct
pt_regs
*
regs
);
AIC_LINUX_IRQRETURN_T
ahc_linux_isr
(
int
irq
,
void
*
dev_id
,
struct
pt_regs
*
regs
);
void
ahc_platform_flushwork
(
struct
ahc_softc
*
ahc
);
int
ahc_softc_comp
(
struct
ahc_softc
*
,
struct
ahc_softc
*
);
void
ahc_done
(
struct
ahc_softc
*
,
struct
scb
*
);
...
...
drivers/scsi/aic7xxx/aiclib.h
View file @
81ebcc6d
...
...
@@ -15,15 +15,58 @@
* Ported to run under 386BSD by Julian Elischer (julian@tfs.com) Sept 1992
*
* $FreeBSD: src/sys/cam/scsi/scsi_all.h,v 1.21 2002/10/08 17:12:44 ken Exp $
*
* Copyright (c) 2003 Adaptec Inc.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions, and the following disclaimer,
* without modification.
* 2. Redistributions in binary form must reproduce at minimum a disclaimer
* substantially similar to the "NO WARRANTY" disclaimer below
* ("Disclaimer") and any redistribution must be conditioned upon
* including a substantially similar Disclaimer requirement for further
* binary redistribution.
* 3. Neither the names of the above-listed copyright holders nor the names
* of any contributors may be used to endorse or promote products derived
* from this software without specific prior written permission.
*
* Alternatively, this software may be distributed under the terms of the
* GNU General Public License ("GPL") version 2 as published by the Free
* Software Foundation.
*
* NO WARRANTY
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
* HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
* IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGES.
*
* $Id$
*/
#ifndef _AICLIB_H
#define _AICLIB_H
/*
*
SCSI general interface description
*
Linux Interrupt Support.
*/
#ifndef _SCSI_SCSI_ALL_H
#define _SCSI_SCSI_ALL_H 1
#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,5,0)
#define AIC_LINUX_IRQRETURN_T irqreturn_t
#define AIC_LINUX_IRQRETURN(ours) return (IRQ_RETVAL(ours))
#else
#define AIC_LINUX_IRQRETURN_T void
#define AIC_LINUX_IRQRETURN(ours) return
#endif
/*
* SCSI command format
...
...
@@ -1003,4 +1046,4 @@ scsi_4btoul(uint8_t *bytes)
return
(
rv
);
}
#endif
/*_
SCSI_SCSI_ALL_H
*/
#endif
/*_
AICLIB_H
*/
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment