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
ae2b1120
Commit
ae2b1120
authored
Jan 10, 2004
by
Stephen Hemminger
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
[PATCH] (4/6) skisa -- probe2
Convert the SK-NET TMS380 ISA card to the new probe2 format.
parent
b6091b87
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
89 additions
and
101 deletions
+89
-101
drivers/net/Space.c
drivers/net/Space.c
+4
-4
drivers/net/tokenring/skisa.c
drivers/net/tokenring/skisa.c
+85
-97
No files found.
drivers/net/Space.c
View file @
ae2b1120
...
...
@@ -410,11 +410,14 @@ static void __init ethif_probe2(int unit)
#ifdef CONFIG_TR
/* Token-ring device probe */
extern
int
ibmtr_probe
(
struct
net_device
*
);
extern
int
sk_isa_probe
(
struct
net_device
*
);
extern
struct
net_device
*
sk_isa_probe
(
int
unit
);
extern
struct
net_device
*
proteon_probe
(
int
unit
);
extern
struct
net_device
*
smctr_probe
(
int
unit
);
static
struct
devprobe2
tr_probes2
[]
__initdata
=
{
#ifdef CONFIG_SKISA
{
sk_isa_probe
,
0
},
#endif
#ifdef CONFIG_PROTEON
{
proteon_probe
,
0
},
#endif
...
...
@@ -438,9 +441,6 @@ static __init int trif_probe(int unit)
if
(
#ifdef CONFIG_IBMTR
ibmtr_probe
(
dev
)
==
0
||
#endif
#ifdef CONFIG_SKISA
sk_isa_probe
(
dev
)
==
0
||
#endif
0
)
err
=
register_netdev
(
dev
);
...
...
drivers/net/tokenring/skisa.c
View file @
ae2b1120
...
...
@@ -56,7 +56,7 @@ static unsigned int portlist[] __initdata = {
/* A zero-terminated list of IRQs to be probed.
* Used again after initial probe for sktr_chipset_init, called from sktr_open.
*/
static
unsigned
short
irqlist
[]
=
{
static
const
unsigned
short
irqlist
[]
=
{
3
,
5
,
9
,
10
,
11
,
12
,
15
,
0
};
...
...
@@ -69,7 +69,6 @@ static int dmalist[] __initdata = {
static
char
isa_cardname
[]
=
"SK NET TR 4/16 ISA
\0
"
;
int
sk_isa_probe
(
struct
net_device
*
dev
);
static
int
sk_isa_open
(
struct
net_device
*
dev
);
static
int
sk_isa_close
(
struct
net_device
*
dev
);
static
void
sk_isa_read_eeprom
(
struct
net_device
*
dev
);
...
...
@@ -95,17 +94,14 @@ static void sk_isa_sifwritew(struct net_device *dev, unsigned short val, unsigne
outw
(
val
,
dev
->
base_addr
+
reg
);
}
struct
sk_isa_card
{
struct
net_device
*
dev
;
struct
sk_isa_card
*
next
;
};
static
struct
sk_isa_card
*
sk_isa_card_list
;
static
int
__init
sk_isa_probe1
(
int
ioaddr
)
static
int
__init
sk_isa_probe1
(
struct
net_device
*
dev
,
int
ioaddr
)
{
unsigned
char
old
,
chk1
,
chk2
;
if
(
!
request_region
(
ioaddr
,
SK_ISA_IO_EXTENT
,
isa_cardname
))
return
-
ENODEV
;
old
=
inb
(
ioaddr
+
SIFADR
);
/* Get the old SIFADR value */
chk1
=
0
;
/* Begin with check value 0 */
...
...
@@ -122,8 +118,10 @@ static int __init sk_isa_probe1(int ioaddr)
chk2
=
inb
(
ioaddr
+
SIFADD
);
chk2
^=
0x0FE
;
if
(
chk1
!=
chk2
)
return
(
-
1
);
/* No adapter */
if
(
chk1
!=
chk2
)
{
release_region
(
ioaddr
,
SK_ISA_IO_EXTENT
);
return
-
ENODEV
;
}
chk1
-=
2
;
}
while
(
chk1
!=
0
);
/* Repeat 128 times (all byte values) */
...
...
@@ -131,58 +129,45 @@ static int __init sk_isa_probe1(int ioaddr)
/* Restore the SIFADR value */
outb
(
old
,
ioaddr
+
SIFADR
);
return
(
0
);
dev
->
base_addr
=
ioaddr
;
return
0
;
}
int
__init
sk_isa_probe
(
struct
net_device
*
dev
)
struct
net_device
*
__init
sk_isa_probe
(
int
unit
)
{
static
int
versionprinted
;
struct
net_device
*
dev
=
alloc_trdev
(
sizeof
(
struct
net_local
))
;
struct
net_local
*
tp
;
int
i
,
j
;
struct
sk_isa_card
*
card
;
static
int
versionprinted
;
const
unsigned
*
port
;
int
j
,
err
=
0
;
#ifndef MODULE
netdev_boot_setup_check
(
dev
);
tr_setup
(
dev
);
#endif
if
(
!
dev
)
return
ERR_PTR
(
-
ENOMEM
);
SET_MODULE_OWNER
(
dev
);
if
(
!
dev
->
base_addr
)
{
for
(
i
=
0
;
portlist
[
i
];
i
++
)
{
if
(
!
request_region
(
portlist
[
i
],
SK_ISA_IO_EXTENT
,
isa_cardname
))
continue
;
if
(
sk_isa_probe1
(
portlist
[
i
]))
{
release_region
(
dev
->
base_addr
,
SK_ISA_IO_EXTENT
);
continue
;
}
if
(
unit
>=
0
)
{
sprintf
(
dev
->
name
,
"tr%d"
,
unit
);
netdev_boot_setup_check
(
dev
);
}
dev
->
base_addr
=
portlist
[
i
];
break
;
SET_MODULE_OWNER
(
dev
);
if
(
dev
->
base_addr
)
/* probe specific location */
err
=
sk_isa_probe1
(
dev
,
dev
->
base_addr
);
else
{
for
(
port
=
portlist
;
*
port
;
port
++
)
{
err
=
sk_isa_probe1
(
dev
,
*
port
);
if
(
!
err
)
break
;
}
if
(
!
dev
->
base_addr
)
return
-
1
;
}
else
{
if
(
!
request_region
(
dev
->
base_addr
,
SK_ISA_IO_EXTENT
,
isa_cardname
))
return
-
1
;
if
(
sk_isa_probe1
(
dev
->
base_addr
))
{
release_region
(
dev
->
base_addr
,
SK_ISA_IO_EXTENT
);
return
-
1
;
}
}
if
(
err
)
goto
out4
;
/* At this point we have found a valid card. */
if
(
versionprinted
++
==
0
)
printk
(
KERN_DEBUG
"%s"
,
version
);
err
=
-
EIO
;
if
(
tmsdev_init
(
dev
,
ISA_MAX_ADDRESS
,
NULL
))
goto
out4
;
...
...
@@ -284,14 +269,11 @@ int __init sk_isa_probe(struct net_device *dev)
printk
(
KERN_DEBUG
"%s: IO: %#4lx IRQ: %d DMA: %d
\n
"
,
dev
->
name
,
dev
->
base_addr
,
dev
->
irq
,
dev
->
dma
);
/* Enlist in the card list */
card
=
kmalloc
(
sizeof
(
struct
sk_isa_card
),
GFP_KERNEL
);
if
(
!
card
)
err
=
register_netdev
(
dev
);
if
(
err
)
goto
out
;
card
->
next
=
sk_isa_card_list
;
sk_isa_card_list
=
card
;
card
->
dev
=
dev
;
return
0
;
return
dev
;
out:
free_dma
(
dev
->
dma
);
out2:
...
...
@@ -300,7 +282,8 @@ int __init sk_isa_probe(struct net_device *dev)
tmsdev_term
(
dev
);
out4:
release_region
(
dev
->
base_addr
,
SK_ISA_IO_EXTENT
);
return
-
1
;
free_netdev
(
dev
);
return
ERR_PTR
(
err
);
}
/*
...
...
@@ -373,6 +356,8 @@ static int sk_isa_close(struct net_device *dev)
#define ISATR_MAX_ADAPTERS 3
static
struct
net_device
*
sk_isa_dev
[
ISATR_MAX_ADAPTERS
];
static
int
io
[
ISATR_MAX_ADAPTERS
];
static
int
irq
[
ISATR_MAX_ADAPTERS
];
static
int
dma
[
ISATR_MAX_ADAPTERS
];
...
...
@@ -383,50 +368,54 @@ MODULE_PARM(io, "1-" __MODULE_STRING(ISATR_MAX_ADAPTERS) "i");
MODULE_PARM
(
irq
,
"1-"
__MODULE_STRING
(
ISATR_MAX_ADAPTERS
)
"i"
);
MODULE_PARM
(
dma
,
"1-"
__MODULE_STRING
(
ISATR_MAX_ADAPTERS
)
"i"
);
static
int
__init
setup_card
(
unsigned
long
io
,
unsigned
irq
,
unsigned
char
dma
)
static
struct
net_device
*
__init
setup_card
(
unsigned
long
io
,
unsigned
irq
,
unsigned
char
dma
)
{
int
res
=
-
ENOMEM
;
struct
sk_isa_card
*
this_card
;
struct
net_device
*
dev
=
alloc_trdev
(
0
);
if
(
dev
)
{
dev
->
base_addr
=
io
;
dev
->
irq
=
irq
;
dev
->
dma
=
dma
;
res
=
-
ENODEV
;
if
(
sk_isa_probe
(
dev
)
==
0
)
{
res
=
register_netdev
(
dev
);
if
(
!
res
)
return
0
;
release_region
(
dev
->
base_addr
,
SK_ISA_IO_EXTENT
);
free_irq
(
dev
->
irq
,
dev
);
free_dma
(
dev
->
dma
);
tmsdev_term
(
dev
);
this_card
=
sk_isa_card_list
;
sk_isa_card_list
=
this_card
->
next
;
kfree
(
this_card
);
}
kfree
(
dev
);
}
return
res
;
struct
net_device
*
dev
=
alloc_trdev
(
sizeof
(
struct
net_local
));
int
err
;
if
(
!
dev
)
return
ERR_PTR
(
-
ENOMEM
);
dev
->
base_addr
=
io
;
dev
->
irq
=
irq
;
dev
->
dma
=
dma
;
err
=
sk_isa_probe1
(
dev
,
io
);
if
(
err
)
goto
out
;
err
=
register_netdev
(
dev
);
if
(
err
)
goto
out1
;
return
dev
;
out1:
release_region
(
dev
->
base_addr
,
SK_ISA_IO_EXTENT
);
free_irq
(
dev
->
irq
,
dev
);
free_dma
(
dev
->
dma
);
tmsdev_term
(
dev
);
out:
free_netdev
(
dev
);
return
ERR_PTR
(
err
);
}
int
init_module
(
void
)
{
struct
net_device
*
dev
;
int
i
,
num
;
num
=
0
;
if
(
io
[
0
])
{
/* Only probe addresses from command line */
for
(
i
=
0
;
i
<
ISATR_MAX_ADAPTERS
;
i
++
)
{
if
(
io
[
i
]
&&
setup_card
(
io
[
i
],
irq
[
i
],
dma
[
i
])
==
0
)
num
++
;
}
}
else
{
for
(
i
=
0
;
num
<
ISATR_MAX_ADAPTERS
&&
portlist
[
i
];
i
++
)
{
if
(
setup_card
(
portlist
[
i
],
irq
[
num
],
dma
[
num
])
==
0
)
num
++
;
for
(
i
=
0
;
i
<
ISATR_MAX_ADAPTERS
;
i
++
)
{
if
(
io
[
0
])
/* Only probe addresses from command line */
dev
=
setup_card
(
io
[
i
],
irq
[
i
],
dma
[
i
]);
else
dev
=
sk_isa_probe
(
-
1
);
if
(
!
IS_ERR
(
dev
))
{
sk_isa_dev
[
i
]
=
dev
;
++
num
;
}
}
printk
(
KERN_NOTICE
"skisa.c: %d cards found.
\n
"
,
num
);
/* Probe for cards. */
if
(
num
==
0
)
{
...
...
@@ -438,11 +427,13 @@ int init_module(void)
void
cleanup_module
(
void
)
{
struct
net_device
*
dev
;
struct
sk_isa_card
*
this_card
;
int
i
;
for
(
i
=
0
;
i
<
ISATR_MAX_ADAPTERS
;
i
++
)
{
struct
net_device
*
dev
=
sk_isa_dev
[
i
];
while
(
sk_isa_card_list
)
{
dev
=
sk_isa_card_list
->
dev
;
if
(
!
dev
)
continue
;
unregister_netdev
(
dev
);
release_region
(
dev
->
base_addr
,
SK_ISA_IO_EXTENT
);
...
...
@@ -450,9 +441,6 @@ void cleanup_module(void)
free_dma
(
dev
->
dma
);
tmsdev_term
(
dev
);
free_netdev
(
dev
);
this_card
=
sk_isa_card_list
;
sk_isa_card_list
=
this_card
->
next
;
kfree
(
this_card
);
}
}
#endif
/* MODULE */
...
...
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