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
nexedi
linux
Commits
308fd19d
Commit
308fd19d
authored
Feb 13, 2005
by
Jeff Garzik
Browse files
Options
Browse Files
Download
Plain Diff
Merge pobox.com:/garz/repo/netdev-2.6/dscc4
into pobox.com:/garz/repo/net-drivers-2.6
parents
bcbdd32c
3adae6e3
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
61 additions
and
56 deletions
+61
-56
drivers/net/wan/dscc4.c
drivers/net/wan/dscc4.c
+61
-56
No files found.
drivers/net/wan/dscc4.c
View file @
308fd19d
...
...
@@ -691,7 +691,7 @@ static void dscc4_free1(struct pci_dev *pdev)
root
=
ppriv
->
root
;
for
(
i
=
0
;
i
<
dev_per_card
;
i
++
)
unregister_hdlc_device
(
dscc4_to_dev
(
&
root
[
i
]
));
unregister_hdlc_device
(
dscc4_to_dev
(
root
+
i
));
pci_set_drvdata
(
pdev
,
NULL
);
...
...
@@ -706,33 +706,36 @@ static int __devinit dscc4_init_one(struct pci_dev *pdev,
{
struct
dscc4_pci_priv
*
priv
;
struct
dscc4_dev_priv
*
dpriv
;
static
int
cards_found
=
0
;
void
__iomem
*
ioaddr
;
int
i
;
int
i
,
rc
;
printk
(
KERN_DEBUG
"%s"
,
version
);
if
(
pci_enable_device
(
pdev
))
goto
err_out
;
if
(
!
request_mem_region
(
pci_resource_start
(
pdev
,
0
),
pci_resource_len
(
pdev
,
0
),
"registers"
))
{
rc
=
pci_enable_device
(
pdev
);
if
(
rc
<
0
)
goto
out
;
rc
=
pci_request_region
(
pdev
,
0
,
"registers"
);
if
(
rc
<
0
)
{
printk
(
KERN_ERR
"%s: can't reserve MMIO region (regs)
\n
"
,
DRV_NAME
);
goto
err_
out
;
goto
err_
disable_0
;
}
if
(
!
request_mem_region
(
pci_resource_start
(
pdev
,
1
),
pci_resource_len
(
pdev
,
1
),
"LBI interface"
)
)
{
rc
=
pci_request_region
(
pdev
,
1
,
"LBI interface"
);
if
(
rc
<
0
)
{
printk
(
KERN_ERR
"%s: can't reserve MMIO region (lbi)
\n
"
,
DRV_NAME
);
goto
err_
out_free_mmio_region0
;
goto
err_
free_mmio_region_1
;
}
ioaddr
=
ioremap
(
pci_resource_start
(
pdev
,
0
),
pci_resource_len
(
pdev
,
0
));
if
(
!
ioaddr
)
{
printk
(
KERN_ERR
"%s: cannot remap MMIO region %lx @ %lx
\n
"
,
DRV_NAME
,
pci_resource_len
(
pdev
,
0
),
pci_resource_start
(
pdev
,
0
));
goto
err_out_free_mmio_region
;
rc
=
-
EIO
;
goto
err_free_mmio_regions_2
;
}
printk
(
KERN_DEBUG
"Siemens DSCC4, MMIO at %#lx (regs), %#lx (lbi), IRQ %d
\n
"
,
pci_resource_start
(
pdev
,
0
),
...
...
@@ -742,14 +745,16 @@ static int __devinit dscc4_init_one(struct pci_dev *pdev,
pci_write_config_byte
(
pdev
,
PCI_LATENCY_TIMER
,
0xf8
);
pci_set_master
(
pdev
);
if
(
dscc4_found1
(
pdev
,
ioaddr
))
goto
err_out_iounmap
;
rc
=
dscc4_found1
(
pdev
,
ioaddr
);
if
(
rc
<
0
)
goto
err_iounmap_3
;
priv
=
(
struct
dscc4_pci_priv
*
)
pci_get_drvdata
(
pdev
);
priv
=
pci_get_drvdata
(
pdev
);
if
(
request_irq
(
pdev
->
irq
,
&
dscc4_irq
,
SA_SHIRQ
,
DRV_NAME
,
priv
->
root
)){
rc
=
request_irq
(
pdev
->
irq
,
dscc4_irq
,
SA_SHIRQ
,
DRV_NAME
,
priv
->
root
);
if
(
rc
<
0
)
{
printk
(
KERN_WARNING
"%s: IRQ %d busy
\n
"
,
DRV_NAME
,
pdev
->
irq
);
goto
err_
out_free1
;
goto
err_
release_4
;
}
/* power up/little endian/dma core controlled via lrda/ltda */
...
...
@@ -769,9 +774,11 @@ static int __devinit dscc4_init_one(struct pci_dev *pdev,
priv
->
iqcfg
=
(
u32
*
)
pci_alloc_consistent
(
pdev
,
IRQ_RING_SIZE
*
sizeof
(
u32
),
&
priv
->
iqcfg_dma
);
if
(
!
priv
->
iqcfg
)
goto
err_
out_free_irq
;
goto
err_
free_irq_5
;
writel
(
priv
->
iqcfg_dma
,
ioaddr
+
IQCFG
);
rc
=
-
ENOMEM
;
/*
* SCC 0-3 private rx/tx irq structures
* IQRX/TXi needs to be set soon. Learned it the hard way...
...
...
@@ -781,7 +788,7 @@ static int __devinit dscc4_init_one(struct pci_dev *pdev,
dpriv
->
iqtx
=
(
u32
*
)
pci_alloc_consistent
(
pdev
,
IRQ_RING_SIZE
*
sizeof
(
u32
),
&
dpriv
->
iqtx_dma
);
if
(
!
dpriv
->
iqtx
)
goto
err_
out_free_iqtx
;
goto
err_
free_iqtx_6
;
writel
(
dpriv
->
iqtx_dma
,
ioaddr
+
IQTX0
+
i
*
4
);
}
for
(
i
=
0
;
i
<
dev_per_card
;
i
++
)
{
...
...
@@ -789,7 +796,7 @@ static int __devinit dscc4_init_one(struct pci_dev *pdev,
dpriv
->
iqrx
=
(
u32
*
)
pci_alloc_consistent
(
pdev
,
IRQ_RING_SIZE
*
sizeof
(
u32
),
&
dpriv
->
iqrx_dma
);
if
(
!
dpriv
->
iqrx
)
goto
err_
out_free_iqrx
;
goto
err_
free_iqrx_7
;
writel
(
dpriv
->
iqrx_dma
,
ioaddr
+
IQRX0
+
i
*
4
);
}
...
...
@@ -804,17 +811,18 @@ static int __devinit dscc4_init_one(struct pci_dev *pdev,
writel
(
0xff200001
,
ioaddr
+
GCMDR
);
cards_found
++
;
return
0
;
rc
=
0
;
out:
return
rc
;
err_
out_free_iqrx
:
err_
free_iqrx_7
:
while
(
--
i
>=
0
)
{
dpriv
=
priv
->
root
+
i
;
pci_free_consistent
(
pdev
,
IRQ_RING_SIZE
*
sizeof
(
u32
),
dpriv
->
iqrx
,
dpriv
->
iqrx_dma
);
}
i
=
dev_per_card
;
err_
out_free_iqtx
:
err_
free_iqtx_6
:
while
(
--
i
>=
0
)
{
dpriv
=
priv
->
root
+
i
;
pci_free_consistent
(
pdev
,
IRQ_RING_SIZE
*
sizeof
(
u32
),
...
...
@@ -822,20 +830,19 @@ static int __devinit dscc4_init_one(struct pci_dev *pdev,
}
pci_free_consistent
(
pdev
,
IRQ_RING_SIZE
*
sizeof
(
u32
),
priv
->
iqcfg
,
priv
->
iqcfg_dma
);
err_
out_free_irq
:
err_
free_irq_5
:
free_irq
(
pdev
->
irq
,
priv
->
root
);
err_
out_free1
:
err_
release_4
:
dscc4_free1
(
pdev
);
err_
out_iounmap
:
err_
iounmap_3
:
iounmap
(
ioaddr
);
err_out_free_mmio_region:
release_mem_region
(
pci_resource_start
(
pdev
,
1
),
pci_resource_len
(
pdev
,
1
));
err_out_free_mmio_region0:
release_mem_region
(
pci_resource_start
(
pdev
,
0
),
pci_resource_len
(
pdev
,
0
));
err_out:
return
-
ENODEV
;
err_free_mmio_regions_2:
pci_release_region
(
pdev
,
1
);
err_free_mmio_region_1:
pci_release_region
(
pdev
,
0
);
err_disable_0:
pci_disable_device
(
pdev
);
goto
out
;
};
/*
...
...
@@ -882,8 +889,7 @@ static int dscc4_found1(struct pci_dev *pdev, void __iomem *ioaddr)
struct
dscc4_dev_priv
*
root
;
int
i
,
ret
=
-
ENOMEM
;
root
=
(
struct
dscc4_dev_priv
*
)
kmalloc
(
dev_per_card
*
sizeof
(
*
root
),
GFP_KERNEL
);
root
=
kmalloc
(
dev_per_card
*
sizeof
(
*
root
),
GFP_KERNEL
);
if
(
!
root
)
{
printk
(
KERN_ERR
"%s: can't allocate data
\n
"
,
DRV_NAME
);
goto
err_out
;
...
...
@@ -892,22 +898,17 @@ static int dscc4_found1(struct pci_dev *pdev, void __iomem *ioaddr)
for
(
i
=
0
;
i
<
dev_per_card
;
i
++
)
{
root
[
i
].
dev
=
alloc_hdlcdev
(
root
+
i
);
if
(
!
root
[
i
].
dev
)
{
while
(
i
--
)
free_netdev
(
root
[
i
].
dev
);
if
(
!
root
[
i
].
dev
)
goto
err_free_dev
;
}
}
ppriv
=
(
struct
dscc4_pci_priv
*
)
kmalloc
(
sizeof
(
*
ppriv
),
GFP_KERNEL
);
ppriv
=
kmalloc
(
sizeof
(
*
ppriv
),
GFP_KERNEL
);
if
(
!
ppriv
)
{
printk
(
KERN_ERR
"%s: can't allocate private data
\n
"
,
DRV_NAME
);
goto
err_free_dev
2
;
goto
err_free_dev
;
}
memset
(
ppriv
,
0
,
sizeof
(
struct
dscc4_pci_priv
));
ret
=
dscc4_set_quartz
(
root
,
quartz
);
if
(
ret
<
0
)
goto
err_free_priv
;
ppriv
->
root
=
root
;
spin_lock_init
(
&
ppriv
->
lock
);
...
...
@@ -951,20 +952,24 @@ static int dscc4_found1(struct pci_dev *pdev, void __iomem *ioaddr)
goto
err_unregister
;
}
}
ret
=
dscc4_set_quartz
(
root
,
quartz
);
if
(
ret
<
0
)
goto
err_unregister
;
pci_set_drvdata
(
pdev
,
ppriv
);
return
ret
;
err_unregister:
while
(
--
i
>=
0
)
{
while
(
i
--
>
0
)
{
dscc4_release_ring
(
root
+
i
);
unregister_hdlc_device
(
dscc4_to_dev
(
&
root
[
i
]
));
unregister_hdlc_device
(
dscc4_to_dev
(
root
+
i
));
}
err_free_priv:
kfree
(
ppriv
);
err_free_dev2:
for
(
i
=
0
;
i
<
dev_per_card
;
i
++
)
free_netdev
(
root
[
i
].
dev
);
i
=
dev_per_card
;
err_free_dev:
while
(
i
--
>
0
)
free_netdev
(
root
[
i
].
dev
);
kfree
(
root
);
err_out:
return
ret
;
...
...
@@ -1998,10 +2003,10 @@ static void __devexit dscc4_remove_one(struct pci_dev *pdev)
iounmap
(
ioaddr
);
release_mem_region
(
pci_resource_start
(
pdev
,
1
),
pci_resource_len
(
pdev
,
1
)
);
release_mem_region
(
pci_resource_start
(
pdev
,
0
),
pci_resource_len
(
pdev
,
0
)
);
pci_release_region
(
pdev
,
1
);
pci_release_region
(
pdev
,
0
);
pci_disable_device
(
pdev
);
}
static
int
dscc4_hdlc_attach
(
struct
net_device
*
dev
,
unsigned
short
encoding
,
...
...
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