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
3f9b23fa
Commit
3f9b23fa
authored
Dec 01, 2002
by
Alan Cox
Committed by
James Bottomley
Dec 01, 2002
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
[PATCH] update qlogic stub to match qlogic updates
parent
b2cfd2fb
Changes
1
Show whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
272 additions
and
278 deletions
+272
-278
drivers/scsi/pcmcia/qlogic_stub.c
drivers/scsi/pcmcia/qlogic_stub.c
+272
-278
No files found.
drivers/scsi/pcmcia/qlogic_stub.c
View file @
3f9b23fa
...
...
@@ -50,8 +50,6 @@
#include <../drivers/scsi/qlogicfas.h>
#define qlogic_reset(h) qlogicfas_reset(h, 0)
#include <pcmcia/version.h>
#include <pcmcia/cs_types.h>
#include <pcmcia/cs.h>
...
...
@@ -65,8 +63,7 @@ extern void qlogicfas_preset(int port, int irq);
static
int
pc_debug
=
PCMCIA_DEBUG
;
MODULE_PARM
(
pc_debug
,
"i"
);
#define DEBUG(n, args...) if (pc_debug>(n)) printk(KERN_DEBUG args)
static
char
*
version
=
"qlogic_cs.c 1.79 2000/06/12 21:27:26 (David Hinds)"
;
static
char
*
version
=
"qlogic_cs.c 1.79-ac 2002/10/26 (David Hinds)"
;
#else
#define DEBUG(n, args...)
#endif
...
...
@@ -76,7 +73,7 @@ static char *version =
/* Parameters that can be set with 'insmod' */
/* Bit map of interrupts to choose from */
static
u
_
int
irq_mask
=
0xdeb8
;
static
u
nsigned
int
irq_mask
=
0xdeb8
;
static
int
irq_list
[
4
]
=
{
-
1
};
MODULE_PARM
(
irq_mask
,
"i"
);
...
...
@@ -86,19 +83,20 @@ MODULE_PARM(irq_list, "1-4i");
typedef
struct
scsi_info_t
{
dev_link_t
link
;
u_short
manf_id
;
unsigned
short
manf_id
;
int
ndev
;
dev_node_t
node
[
8
];
}
scsi_info_t
;
static
void
qlogic_release
(
u_long
arg
);
static
int
qlogic_event
(
event_t
event
,
int
priority
,
event_callback_args_t
*
args
);
static
int
qlogic_event
(
event_t
event
,
int
priority
,
event_callback_args_t
*
args
);
static
dev_link_t
*
qlogic_attach
(
void
);
static
void
qlogic_detach
(
dev_link_t
*
);
static
Scsi_Host_Template
driver_template
=
QLOGICFAS
;
/* Import our driver template */
extern
Scsi_Host_Template
qlogicfas_driver_template
;
#define driver_template qlogicfas_driver_template
static
dev_link_t
*
dev_list
=
NULL
;
...
...
@@ -125,17 +123,19 @@ static dev_link_t *qlogic_attach(void)
/* Create new SCSI device */
info
=
kmalloc
(
sizeof
(
*
info
),
GFP_KERNEL
);
if
(
!
info
)
return
NULL
;
if
(
!
info
)
return
NULL
;
memset
(
info
,
0
,
sizeof
(
*
info
));
link
=
&
info
->
link
;
link
->
priv
=
info
;
link
=
&
info
->
link
;
link
->
priv
=
info
;
link
->
release
.
function
=
&
qlogic_release
;
link
->
release
.
data
=
(
u_long
)
link
;
link
->
release
.
data
=
(
u_long
)
link
;
link
->
io
.
NumPorts1
=
16
;
link
->
io
.
Attributes1
=
IO_DATA_PATH_WIDTH_AUTO
;
link
->
io
.
IOAddrLines
=
10
;
link
->
irq
.
Attributes
=
IRQ_TYPE_EXCLUSIVE
;
link
->
irq
.
IRQInfo1
=
IRQ_INFO2_VALID
|
IRQ_LEVEL_ID
;
link
->
irq
.
IRQInfo1
=
IRQ_INFO2_VALID
|
IRQ_LEVEL_ID
;
if
(
irq_list
[
0
]
==
-
1
)
link
->
irq
.
IRQInfo2
=
irq_mask
;
else
...
...
@@ -152,10 +152,7 @@ static dev_link_t *qlogic_attach(void)
client_reg
.
dev_info
=
&
dev_info
;
client_reg
.
Attributes
=
INFO_IO_CLIENT
|
INFO_CARD_SHARE
;
client_reg
.
event_handler
=
&
qlogic_event
;
client_reg
.
EventMask
=
CS_EVENT_RESET_REQUEST
|
CS_EVENT_CARD_RESET
|
CS_EVENT_CARD_INSERTION
|
CS_EVENT_CARD_REMOVAL
|
CS_EVENT_PM_SUSPEND
|
CS_EVENT_PM_RESUME
;
client_reg
.
EventMask
=
CS_EVENT_RESET_REQUEST
|
CS_EVENT_CARD_RESET
|
CS_EVENT_CARD_INSERTION
|
CS_EVENT_CARD_REMOVAL
|
CS_EVENT_PM_SUSPEND
|
CS_EVENT_PM_RESUME
;
client_reg
.
Version
=
0x0210
;
client_reg
.
event_callback_args
.
client_data
=
link
;
ret
=
CardServices
(
RegisterClient
,
&
link
->
handle
,
&
client_reg
);
...
...
@@ -170,7 +167,7 @@ static dev_link_t *qlogic_attach(void)
/*====================================================================*/
static
void
qlogic_detach
(
dev_link_t
*
link
)
static
void
qlogic_detach
(
dev_link_t
*
link
)
{
dev_link_t
**
linkp
;
...
...
@@ -178,13 +175,14 @@ static void qlogic_detach(dev_link_t *link)
/* Locate device structure */
for
(
linkp
=
&
dev_list
;
*
linkp
;
linkp
=
&
(
*
linkp
)
->
next
)
if
(
*
linkp
==
link
)
break
;
if
(
*
linkp
==
link
)
break
;
if
(
*
linkp
==
NULL
)
return
;
del_timer
(
&
link
->
release
);
del_timer_sync
(
&
link
->
release
);
if
(
link
->
state
&
DEV_CONFIG
)
{
qlogic_release
((
u_long
)
link
);
qlogic_release
((
u_long
)
link
);
if
(
link
->
state
&
DEV_STALE_CONFIG
)
{
link
->
state
|=
DEV_STALE_LINK
;
return
;
...
...
@@ -208,21 +206,21 @@ while ((last_ret=CardServices(last_fn=(fn), args))!=0) goto cs_failed
#define CFG_CHECK(fn, args...) \
if (CardServices(fn, args) != 0) goto next_entry
static
void
qlogic_config
(
dev_link_t
*
link
)
static
void
qlogic_config
(
dev_link_t
*
link
)
{
client_handle_t
handle
=
link
->
handle
;
scsi_info_t
*
info
=
link
->
priv
;
tuple_t
tuple
;
cisparse_t
parse
;
int
i
,
last_ret
,
last_fn
;
u_
short
tuple_data
[
32
];
unsigned
short
tuple_data
[
32
];
Scsi_Device
*
dev
;
dev_node_t
**
tail
,
*
node
;
struct
Scsi_Host
*
host
;
DEBUG
(
0
,
"qlogic_config(0x%p)
\n
"
,
link
);
tuple
.
TupleData
=
(
cisdata_t
*
)
tuple_data
;
tuple
.
TupleData
=
(
cisdata_t
*
)
tuple_data
;
tuple
.
TupleDataMax
=
64
;
tuple
.
TupleOffset
=
0
;
tuple
.
DesiredTuple
=
CISTPL_CONFIG
;
...
...
@@ -232,8 +230,7 @@ static void qlogic_config(dev_link_t *link)
link
->
conf
.
ConfigBase
=
parse
.
config
.
base
;
tuple
.
DesiredTuple
=
CISTPL_MANFID
;
if
((
CardServices
(
GetFirstTuple
,
handle
,
&
tuple
)
==
CS_SUCCESS
)
&&
(
CardServices
(
GetTupleData
,
handle
,
&
tuple
)
==
CS_SUCCESS
))
if
((
CardServices
(
GetFirstTuple
,
handle
,
&
tuple
)
==
CS_SUCCESS
)
&&
(
CardServices
(
GetTupleData
,
handle
,
&
tuple
)
==
CS_SUCCESS
))
info
->
manf_id
=
le16_to_cpu
(
tuple
.
TupleData
[
0
]);
/* Configure card */
...
...
@@ -250,7 +247,8 @@ static void qlogic_config(dev_link_t *link)
link
->
io
.
NumPorts1
=
parse
.
cftable_entry
.
io
.
win
[
0
].
len
;
if
(
link
->
io
.
BasePort1
!=
0
)
{
i
=
CardServices
(
RequestIO
,
handle
,
&
link
->
io
);
if
(
i
==
CS_SUCCESS
)
break
;
if
(
i
==
CS_SUCCESS
)
break
;
}
next_entry:
CS_CHECK
(
GetNextTuple
,
handle
,
&
tuple
);
...
...
@@ -259,13 +257,11 @@ static void qlogic_config(dev_link_t *link)
CS_CHECK
(
RequestIRQ
,
handle
,
&
link
->
irq
);
CS_CHECK
(
RequestConfiguration
,
handle
,
&
link
->
conf
);
if
((
info
->
manf_id
==
MANFID_MACNICA
)
||
(
info
->
manf_id
==
MANFID_PIONEER
)
||
(
info
->
manf_id
==
0x0098
))
{
if
((
info
->
manf_id
==
MANFID_MACNICA
)
||
(
info
->
manf_id
==
MANFID_PIONEER
)
||
(
info
->
manf_id
==
0x0098
))
{
/* set ATAcmd */
outb
(
0xb4
,
link
->
io
.
BasePort1
+
0xd
);
outb
(
0x24
,
link
->
io
.
BasePort1
+
0x9
);
outb
(
0x04
,
link
->
io
.
BasePort1
+
0xd
);
outb
(
0xb4
,
link
->
io
.
BasePort1
+
0xd
);
outb
(
0x24
,
link
->
io
.
BasePort1
+
0x9
);
outb
(
0x04
,
link
->
io
.
BasePort1
+
0xd
);
}
/* A bad hack... */
...
...
@@ -273,7 +269,7 @@ static void qlogic_config(dev_link_t *link)
/* The KXL-810AN has a bigger IO port window */
if
(
link
->
io
.
NumPorts1
==
32
)
qlogicfas_preset
(
link
->
io
.
BasePort1
+
16
,
link
->
irq
.
AssignedIRQ
);
qlogicfas_preset
(
link
->
io
.
BasePort1
+
16
,
link
->
irq
.
AssignedIRQ
);
else
qlogicfas_preset
(
link
->
io
.
BasePort1
,
link
->
irq
.
AssignedIRQ
);
...
...
@@ -281,14 +277,12 @@ static void qlogic_config(dev_link_t *link)
tail
=
&
link
->
dev
;
info
->
ndev
=
0
;
for
(
host
=
scsi_host_get_next
(
NULL
);
host
;
host
=
scsi_host_get_next
(
host
))
for
(
host
=
scsi_host_get_next
(
NULL
);
host
;
host
=
scsi_host_get_next
(
host
))
if
(
host
->
hostt
==
&
driver_template
)
list_for_each_entry
(
dev
,
&
host
->
my_devices
,
siblings
)
{
u_long
arg
[
2
],
id
;
kernel_scsi_ioctl
(
dev
,
SCSI_IOCTL_GET_IDLUN
,
arg
);
id
=
(
arg
[
0
]
&
0x0f
)
+
((
arg
[
0
]
>>
4
)
&
0xf0
)
+
((
arg
[
0
]
>>
8
)
&
0xf00
)
+
((
arg
[
0
]
>>
12
)
&
0xf000
);
id
=
(
arg
[
0
]
&
0x0f
)
+
((
arg
[
0
]
>>
4
)
&
0xf0
)
+
((
arg
[
0
]
>>
8
)
&
0xf00
)
+
((
arg
[
0
]
>>
12
)
&
0xf000
);
node
=
&
info
->
node
[
info
->
ndev
];
node
->
minor
=
0
;
switch
(
dev
->
type
)
{
...
...
@@ -311,7 +305,8 @@ static void qlogic_config(dev_link_t *link)
sprintf
(
node
->
dev_name
,
"sg#%04lx"
,
id
);
break
;
}
*
tail
=
node
;
tail
=
&
node
->
next
;
*
tail
=
node
;
tail
=
&
node
->
next
;
info
->
ndev
++
;
}
*
tail
=
NULL
;
...
...
@@ -323,7 +318,7 @@ static void qlogic_config(dev_link_t *link)
cs_failed:
cs_error
(
link
->
handle
,
last_fn
,
last_ret
);
qlogic_release
((
u_long
)
link
);
qlogic_release
((
u_long
)
link
);
return
;
}
/* qlogic_config */
...
...
@@ -332,7 +327,7 @@ static void qlogic_config(dev_link_t *link)
static
void
qlogic_release
(
u_long
arg
)
{
dev_link_t
*
link
=
(
dev_link_t
*
)
arg
;
dev_link_t
*
link
=
(
dev_link_t
*
)
arg
;
DEBUG
(
0
,
"qlogic_release(0x%p)
\n
"
,
link
);
...
...
@@ -357,8 +352,7 @@ static void qlogic_release(u_long arg)
/*====================================================================*/
static
int
qlogic_event
(
event_t
event
,
int
priority
,
event_callback_args_t
*
args
)
static
int
qlogic_event
(
event_t
event
,
int
priority
,
event_callback_args_t
*
args
)
{
dev_link_t
*
link
=
args
->
client_data
;
...
...
@@ -368,7 +362,7 @@ static int qlogic_event(event_t event, int priority,
case
CS_EVENT_CARD_REMOVAL
:
link
->
state
&=
~
DEV_PRESENT
;
if
(
link
->
state
&
DEV_CONFIG
)
mod_timer
(
&
link
->
release
,
jiffies
+
HZ
/
20
);
mod_timer
(
&
link
->
release
,
jiffies
+
HZ
/
20
);
break
;
case
CS_EVENT_CARD_INSERTION
:
link
->
state
|=
DEV_PRESENT
|
DEV_CONFIG_PENDING
;
...
...
@@ -388,14 +382,13 @@ static int qlogic_event(event_t event, int priority,
if
(
link
->
state
&
DEV_CONFIG
)
{
scsi_info_t
*
info
=
link
->
priv
;
CardServices
(
RequestConfiguration
,
link
->
handle
,
&
link
->
conf
);
if
((
info
->
manf_id
==
MANFID_MACNICA
)
||
(
info
->
manf_id
==
MANFID_PIONEER
)
||
(
info
->
manf_id
==
0x0098
))
{
outb
(
0x80
,
link
->
io
.
BasePort1
+
0xd
);
outb
(
0x24
,
link
->
io
.
BasePort1
+
0x9
);
outb
(
0x04
,
link
->
io
.
BasePort1
+
0xd
);
if
((
info
->
manf_id
==
MANFID_MACNICA
)
||
(
info
->
manf_id
==
MANFID_PIONEER
)
||
(
info
->
manf_id
==
0x0098
))
{
outb
(
0x80
,
link
->
io
.
BasePort1
+
0xd
);
outb
(
0x24
,
link
->
io
.
BasePort1
+
0x9
);
outb
(
0x04
,
link
->
io
.
BasePort1
+
0xd
);
}
qlogic_reset
(
NULL
);
/* Ugggglllyyyy!!! */
driver_template
.
eh_bus_reset_handler
(
NULL
);
}
break
;
}
...
...
@@ -404,20 +397,21 @@ static int qlogic_event(event_t event, int priority,
/*====================================================================*/
static
int
__init
init_qlogic_cs
(
void
)
{
static
int
__init
init_qlogic_cs
(
void
)
{
servinfo_t
serv
;
DEBUG
(
0
,
"%s
\n
"
,
version
);
CardServices
(
GetCardServicesInfo
,
&
serv
);
if
(
serv
.
Revision
!=
CS_RELEASE_CODE
)
{
printk
(
KERN_NOTICE
"qlogic_cs: Card Services release "
"does not match!
\n
"
);
printk
(
KERN_NOTICE
"qlogic_cs: Card Services release "
"does not match!
\n
"
);
return
-
1
;
}
register_pccard_driver
(
&
dev_info
,
&
qlogic_attach
,
&
qlogic_detach
);
return
0
;
}
static
void
__exit
exit_qlogic_cs
(
void
)
{
static
void
__exit
exit_qlogic_cs
(
void
)
{
DEBUG
(
0
,
"qlogic_cs: unloading
\n
"
);
unregister_pccard_driver
(
&
dev_info
);
while
(
dev_list
!=
NULL
)
...
...
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