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
30224392
Commit
30224392
authored
Mar 24, 2008
by
Krzysztof Hałasa
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
WAN: remove SCA support from SCA-II drivers
Signed-off-by:
Krzysztof Hałasa
<
khc@pm.waw.pl
>
parent
88597364
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
45 additions
and
261 deletions
+45
-261
drivers/net/wan/hd64572.c
drivers/net/wan/hd64572.c
+43
-253
drivers/net/wan/pc300too.c
drivers/net/wan/pc300too.c
+1
-4
drivers/net/wan/pci200syn.c
drivers/net/wan/pci200syn.c
+1
-4
No files found.
drivers/net/wan/hd64572.c
View file @
30224392
/*
* Hitachi
SCA HD64570 and HD64572 common
driver for Linux
* Hitachi
(now Renesas) SCA-II HD64572
driver for Linux
*
* Copyright (C) 1998-2003 Krzysztof Halasa <khc@pm.waw.pl>
*
...
...
@@ -7,9 +7,7 @@
* under the terms of version 2 of the GNU General Public License
* as published by the Free Software Foundation.
*
* Sources of information:
* Hitachi HD64570 SCA User's Manual
* Hitachi HD64572 SCA-II User's Manual
* Source of information: HD64572 SCA-II User's Manual
*
* We use the following SCA memory map:
*
...
...
@@ -26,33 +24,26 @@
* tx_ring_buffers * HDLC_MAX_MRU = logical channel #0 TX buffers (if used)
*/
#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/slab.h>
#include <linux/jiffies.h>
#include <linux/types.h>
#include <linux/bitops.h>
#include <linux/errno.h>
#include <linux/fcntl.h>
#include <linux/
interrupt
.h>
#include <linux/
hdlc
.h>
#include <linux/in.h>
#include <linux/string.h>
#include <linux/errno.h>
#include <linux/init.h>
#include <linux/interrupt.h>
#include <linux/ioport.h>
#include <linux/bitops.h>
#include <asm/system.h>
#include <asm/uaccess.h>
#include <asm/io.h>
#include <linux/jiffies.h>
#include <linux/kernel.h>
#include <linux/module.h>
#include <linux/netdevice.h>
#include <linux/skbuff.h>
#include <linux/
hdlc
.h>
#i
f (!defined (__HD64570_H) && !defined (__HD64572_H)) || \
(defined (__HD64570_H) && defined (__HD64572_H))
#
error Either hd64570.h or hd64572.h must be included
#
endif
#include <linux/slab.h>
#include <linux/
string
.h>
#include <linux/types.h>
#i
nclude <asm/io.h>
#include <asm/system.h>
#
include <asm/uaccess.h>
#
include "hd64572.h"
#define get_msci(port) (phy_node(port) ? MSCI1_OFFSET : MSCI0_OFFSET)
#define get_dmac_rx(port) (phy_node(port) ? DMAC1RX_OFFSET : DMAC0RX_OFFSET)
...
...
@@ -62,16 +53,6 @@
#define SCA_INTR_DMAC_RX(node) (node ? 0x20 : 0x02)
#define SCA_INTR_DMAC_TX(node) (node ? 0x40 : 0x04)
#ifdef __HD64570_H
/* HD64570 */
#define sca_outa(value, reg, card) sca_outw(value, reg, card)
#define sca_ina(reg, card) sca_inw(reg, card)
#define writea(value, ptr) writew(value, ptr)
#else
/* HD64572 */
#define sca_outa(value, reg, card) sca_outl(value, reg, card)
#define sca_ina(reg, card) sca_inl(reg, card)
#define writea(value, ptr) writel(value, ptr)
#endif
static
inline
struct
net_device
*
port_to_dev
(
port_t
*
port
)
{
...
...
@@ -81,19 +62,6 @@ static inline struct net_device *port_to_dev(port_t *port)
static
inline
int
sca_intr_status
(
card_t
*
card
)
{
u8
result
=
0
;
#ifdef __HD64570_H
/* HD64570 */
u8
isr0
=
sca_in
(
ISR0
,
card
);
u8
isr1
=
sca_in
(
ISR1
,
card
);
if
(
isr1
&
0x03
)
result
|=
SCA_INTR_DMAC_RX
(
0
);
if
(
isr1
&
0x0C
)
result
|=
SCA_INTR_DMAC_TX
(
0
);
if
(
isr1
&
0x30
)
result
|=
SCA_INTR_DMAC_RX
(
1
);
if
(
isr1
&
0xC0
)
result
|=
SCA_INTR_DMAC_TX
(
1
);
if
(
isr0
&
0x0F
)
result
|=
SCA_INTR_MSCI
(
0
);
if
(
isr0
&
0xF0
)
result
|=
SCA_INTR_MSCI
(
1
);
#else
/* HD64572 */
u32
isr0
=
sca_inl
(
ISR0
,
card
);
if
(
isr0
&
0x0000000F
)
result
|=
SCA_INTR_DMAC_RX
(
0
);
...
...
@@ -103,8 +71,6 @@ static inline int sca_intr_status(card_t *card)
if
(
isr0
&
0x003E0000
)
result
|=
SCA_INTR_MSCI
(
0
);
if
(
isr0
&
0x3E000000
)
result
|=
SCA_INTR_MSCI
(
1
);
#endif
/* HD64570 vs HD64572 */
if
(
!
(
result
&
SCA_INTR_DMAC_TX
(
0
)))
if
(
sca_in
(
DSR_TX
(
0
),
card
)
&
DSR_EOM
)
result
|=
SCA_INTR_DMAC_TX
(
0
);
...
...
@@ -127,7 +93,6 @@ static inline u16 next_desc(port_t *port, u16 desc, int transmit)
}
static
inline
u16
desc_abs_number
(
port_t
*
port
,
u16
desc
,
int
transmit
)
{
u16
rx_buffs
=
port_to_card
(
port
)
->
rx_ring_buffers
;
...
...
@@ -139,7 +104,6 @@ static inline u16 desc_abs_number(port_t *port, u16 desc, int transmit)
}
static
inline
u16
desc_offset
(
port_t
*
port
,
u16
desc
,
int
transmit
)
{
/* Descriptor offset always fits in 16 bytes */
...
...
@@ -147,20 +111,14 @@ static inline u16 desc_offset(port_t *port, u16 desc, int transmit)
}
static
inline
pkt_desc
__iomem
*
desc_address
(
port_t
*
port
,
u16
desc
,
int
transmit
)
static
inline
pkt_desc
__iomem
*
desc_address
(
port_t
*
port
,
u16
desc
,
int
transmit
)
{
#ifdef PAGE0_ALWAYS_MAPPED
return
(
pkt_desc
__iomem
*
)(
win0base
(
port_to_card
(
port
))
+
desc_offset
(
port
,
desc
,
transmit
));
#else
return
(
pkt_desc
__iomem
*
)(
winbase
(
port_to_card
(
port
))
+
desc_offset
(
port
,
desc
,
transmit
));
#endif
+
desc_offset
(
port
,
desc
,
transmit
));
}
static
inline
u32
buffer_offset
(
port_t
*
port
,
u16
desc
,
int
transmit
)
{
return
port_to_card
(
port
)
->
buff_offset
+
...
...
@@ -186,7 +144,7 @@ static inline void sca_set_carrier(port_t *port)
}
static
void
sca_init_
sync_
port
(
port_t
*
port
)
static
void
sca_init_port
(
port_t
*
port
)
{
card_t
*
card
=
port_to_card
(
port
);
int
transmit
,
i
;
...
...
@@ -195,10 +153,6 @@ static void sca_init_sync_port(port_t *port)
port
->
txin
=
0
;
port
->
txlast
=
0
;
#if !defined(PAGE0_ALWAYS_MAPPED) && !defined(ALL_PAGES_ALWAYS_MAPPED)
openwin
(
card
,
0
);
#endif
for
(
transmit
=
0
;
transmit
<
2
;
transmit
++
)
{
u16
dmac
=
transmit
?
get_dmac_tx
(
port
)
:
get_dmac_rx
(
port
);
u16
buffs
=
transmit
?
card
->
tx_ring_buffers
...
...
@@ -209,7 +163,7 @@ static void sca_init_sync_port(port_t *port)
u16
chain_off
=
desc_offset
(
port
,
i
+
1
,
transmit
);
u32
buff_off
=
buffer_offset
(
port
,
i
,
transmit
);
write
a
(
chain_off
,
&
desc
->
cp
);
write
l
(
chain_off
,
&
desc
->
cp
);
writel
(
buff_off
,
&
desc
->
bp
);
writew
(
0
,
&
desc
->
len
);
writeb
(
0
,
&
desc
->
stat
);
...
...
@@ -222,16 +176,13 @@ static void sca_init_sync_port(port_t *port)
sca_out
(
DCR_ABORT
,
transmit
?
DCR_TX
(
phy_node
(
port
))
:
DCR_RX
(
phy_node
(
port
)),
card
);
#ifdef __HD64570_H
sca_out
(
0
,
dmac
+
CPB
,
card
);
/* pointer base */
#endif
/* current desc addr */
sca_out
a
(
desc_offset
(
port
,
0
,
transmit
),
dmac
+
CDAL
,
card
);
sca_out
l
(
desc_offset
(
port
,
0
,
transmit
),
dmac
+
CDAL
,
card
);
if
(
!
transmit
)
sca_out
a
(
desc_offset
(
port
,
buffs
-
1
,
transmit
),
sca_out
l
(
desc_offset
(
port
,
buffs
-
1
,
transmit
),
dmac
+
EDAL
,
card
);
else
sca_out
a
(
desc_offset
(
port
,
0
,
transmit
),
dmac
+
EDAL
,
sca_out
l
(
desc_offset
(
port
,
0
,
transmit
),
dmac
+
EDAL
,
card
);
/* clear frame end interrupt counter */
...
...
@@ -258,8 +209,6 @@ static void sca_init_sync_port(port_t *port)
}
#ifdef NEED_SCA_MSCI_INTR
/* MSCI interrupt service */
static
inline
void
sca_msci_intr
(
port_t
*
port
)
{
...
...
@@ -279,20 +228,15 @@ static inline void sca_msci_intr(port_t *port)
if
(
stat
&
ST1_CDCD
)
sca_set_carrier
(
port
);
}
#endif
static
inline
void
sca_rx
(
card_t
*
card
,
port_t
*
port
,
pkt_desc
__iomem
*
desc
,
u16
rxin
)
static
inline
void
sca_rx
(
card_t
*
card
,
port_t
*
port
,
pkt_desc
__iomem
*
desc
,
u16
rxin
)
{
struct
net_device
*
dev
=
port_to_dev
(
port
);
struct
sk_buff
*
skb
;
u16
len
;
u32
buff
;
#ifndef ALL_PAGES_ALWAYS_MAPPED
u32
maxlen
;
u8
page
;
#endif
len
=
readw
(
&
desc
->
len
);
skb
=
dev_alloc_skb
(
len
);
...
...
@@ -302,25 +246,8 @@ static inline void sca_rx(card_t *card, port_t *port, pkt_desc __iomem *desc, u1
}
buff
=
buffer_offset
(
port
,
rxin
,
0
);
#ifndef ALL_PAGES_ALWAYS_MAPPED
page
=
buff
/
winsize
(
card
);
buff
=
buff
%
winsize
(
card
);
maxlen
=
winsize
(
card
)
-
buff
;
openwin
(
card
,
page
);
if
(
len
>
maxlen
)
{
memcpy_fromio
(
skb
->
data
,
winbase
(
card
)
+
buff
,
maxlen
);
openwin
(
card
,
page
+
1
);
memcpy_fromio
(
skb
->
data
+
maxlen
,
winbase
(
card
),
len
-
maxlen
);
}
else
#endif
memcpy_fromio
(
skb
->
data
,
winbase
(
card
)
+
buff
,
len
);
#if !defined(PAGE0_ALWAYS_MAPPED) && !defined(ALL_PAGES_ALWAYS_MAPPED)
/* select pkt_desc table page back */
openwin
(
card
,
0
);
#endif
skb_put
(
skb
,
len
);
#ifdef DEBUG_PKT
printk
(
KERN_DEBUG
"%s RX(%i):"
,
dev
->
name
,
skb
->
len
);
...
...
@@ -333,7 +260,6 @@ static inline void sca_rx(card_t *card, port_t *port, pkt_desc __iomem *desc, u1
}
/* Receive DMA interrupt service */
static
inline
void
sca_rx_intr
(
port_t
*
port
)
{
...
...
@@ -353,7 +279,7 @@ static inline void sca_rx_intr(port_t *port)
while
(
1
)
{
u32
desc_off
=
desc_offset
(
port
,
port
->
rxin
,
0
);
pkt_desc
__iomem
*
desc
;
u32
cda
=
sca_in
a
(
dmac
+
CDAL
,
card
);
u32
cda
=
sca_in
l
(
dmac
+
CDAL
,
card
);
if
((
cda
>=
desc_off
)
&&
(
cda
<
desc_off
+
sizeof
(
pkt_desc
)))
break
;
/* No frame received */
...
...
@@ -377,7 +303,7 @@ static inline void sca_rx_intr(port_t *port)
sca_rx
(
card
,
port
,
desc
,
port
->
rxin
);
/* Set new error descriptor address */
sca_out
a
(
desc_off
,
dmac
+
EDAL
,
card
);
sca_out
l
(
desc_off
,
dmac
+
EDAL
,
card
);
port
->
rxin
=
next_desc
(
port
,
port
->
rxin
,
0
);
}
...
...
@@ -386,7 +312,6 @@ static inline void sca_rx_intr(port_t *port)
}
/* Transmit DMA interrupt service */
static
inline
void
sca_tx_intr
(
port_t
*
port
)
{
...
...
@@ -407,7 +332,7 @@ static inline void sca_tx_intr(port_t *port)
pkt_desc
__iomem
*
desc
;
u32
desc_off
=
desc_offset
(
port
,
port
->
txlast
,
1
);
u32
cda
=
sca_in
a
(
dmac
+
CDAL
,
card
);
u32
cda
=
sca_in
l
(
dmac
+
CDAL
,
card
);
if
((
cda
>=
desc_off
)
&&
(
cda
<
desc_off
+
sizeof
(
pkt_desc
)))
break
;
/* Transmitter is/will_be sending this frame */
...
...
@@ -423,7 +348,6 @@ static inline void sca_tx_intr(port_t *port)
}
static
irqreturn_t
sca_intr
(
int
irq
,
void
*
dev_id
)
{
card_t
*
card
=
dev_id
;
...
...
@@ -431,10 +355,6 @@ static irqreturn_t sca_intr(int irq, void* dev_id)
u8
stat
;
int
handled
=
0
;
#ifndef ALL_PAGES_ALWAYS_MAPPED
u8
page
=
sca_get_page
(
card
);
#endif
while
((
stat
=
sca_intr_status
(
card
))
!=
0
)
{
handled
=
1
;
for
(
i
=
0
;
i
<
2
;
i
++
)
{
...
...
@@ -452,14 +372,10 @@ static irqreturn_t sca_intr(int irq, void* dev_id)
}
}
#ifndef ALL_PAGES_ALWAYS_MAPPED
openwin
(
card
,
page
);
/* Restore original page */
#endif
return
IRQ_RETVAL
(
handled
);
}
static
void
sca_set_port
(
port_t
*
port
)
{
card_t
*
card
=
port_to_card
(
port
);
...
...
@@ -497,12 +413,8 @@ static void sca_set_port(port_t *port)
port
->
tmc
=
tmc
;
/* baud divisor - time constant*/
#ifdef __HD64570_H
sca_out
(
port
->
tmc
,
msci
+
TMC
,
card
);
#else
sca_out
(
port
->
tmc
,
msci
+
TMCR
,
card
);
sca_out
(
port
->
tmc
,
msci
+
TMCT
,
card
);
#endif
/* Set BRG bits */
sca_out
(
port
->
rxs
,
msci
+
RXS
,
card
);
...
...
@@ -518,7 +430,6 @@ static void sca_set_port(port_t *port)
}
static
void
sca_open
(
struct
net_device
*
dev
)
{
port_t
*
port
=
dev_to_port
(
dev
);
...
...
@@ -540,11 +451,7 @@ static void sca_open(struct net_device *dev)
switch
(
port
->
parity
)
{
case
PARITY_CRC16_PR0
:
md0
=
MD0_HDLC
|
MD0_CRC_16_0
;
break
;
case
PARITY_CRC16_PR1
:
md0
=
MD0_HDLC
|
MD0_CRC_16
;
break
;
#ifdef __HD64570_H
case
PARITY_CRC16_PR0_CCITT
:
md0
=
MD0_HDLC
|
MD0_CRC_ITU_0
;
break
;
#else
case
PARITY_CRC32_PR1_CCITT
:
md0
=
MD0_HDLC
|
MD0_CRC_ITU32
;
break
;
#endif
case
PARITY_CRC16_PR1_CCITT
:
md0
=
MD0_HDLC
|
MD0_CRC_ITU
;
break
;
default:
md0
=
MD0_HDLC
|
MD0_CRC_NONE
;
}
...
...
@@ -554,26 +461,13 @@ static void sca_open(struct net_device *dev)
sca_out
(
0x00
,
msci
+
MD1
,
card
);
/* no address field check */
sca_out
(
md2
,
msci
+
MD2
,
card
);
sca_out
(
0x7E
,
msci
+
IDL
,
card
);
/* flag character 0x7E */
#ifdef __HD64570_H
sca_out
(
CTL_IDLE
,
msci
+
CTL
,
card
);
#else
/* Skip the rest of underrun frame */
sca_out
(
CTL_IDLE
|
CTL_URCT
|
CTL_URSKP
,
msci
+
CTL
,
card
);
#endif
#ifdef __HD64570_H
/* Allow at least 8 bytes before requesting RX DMA operation */
/* TX with higher priority and possibly with shorter transfers */
sca_out
(
0x07
,
msci
+
RRC
,
card
);
/* +1=RXRDY/DMA activation condition*/
sca_out
(
0x10
,
msci
+
TRC0
,
card
);
/* = TXRDY/DMA activation condition*/
sca_out
(
0x14
,
msci
+
TRC1
,
card
);
/* +1=TXRDY/DMA deactiv condition */
#else
sca_out
(
0x0F
,
msci
+
RNR
,
card
);
/* +1=RX DMA activation condition */
sca_out
(
0x3C
,
msci
+
TFS
,
card
);
/* +1 = TX start */
sca_out
(
0x38
,
msci
+
TCR
,
card
);
/* =Critical TX DMA activ condition */
sca_out
(
0x38
,
msci
+
TNR0
,
card
);
/* =TX DMA activation condition */
sca_out
(
0x3F
,
msci
+
TNR1
,
card
);
/* +1=TX DMA deactivation condition*/
#endif
/* We're using the following interrupts:
- TXINT (DMAC completed all transmisions, underrun or DCD change)
...
...
@@ -582,30 +476,15 @@ static void sca_open(struct net_device *dev)
sca_set_carrier
(
port
);
#ifdef __HD64570_H
/* MSCI TX INT and RX INT A IRQ enable */
sca_out
(
IE0_TXINT
|
IE0_RXINTA
,
msci
+
IE0
,
card
);
sca_out
(
IE1_UDRN
|
IE1_CDCD
,
msci
+
IE1
,
card
);
sca_out
(
sca_in
(
IER0
,
card
)
|
(
phy_node
(
port
)
?
0xC0
:
0x0C
),
IER0
,
card
);
/* TXINT and RXINT */
/* enable DMA IRQ */
sca_out
(
sca_in
(
IER1
,
card
)
|
(
phy_node
(
port
)
?
0xF0
:
0x0F
),
IER1
,
card
);
#else
/* MSCI TXINT and RXINTA interrupt enable */
sca_outl
(
IE0_TXINT
|
IE0_RXINTA
|
IE0_UDRN
|
IE0_CDCD
,
msci
+
IE0
,
card
);
/* DMA & MSCI IRQ enable */
sca_outl
(
sca_inl
(
IER0
,
card
)
|
(
phy_node
(
port
)
?
0x0A006600
:
0x000A0066
),
IER0
,
card
);
#endif
#ifdef __HD64570_H
sca_out
(
port
->
tmc
,
msci
+
TMC
,
card
);
/* Restore registers */
#else
sca_out
(
port
->
tmc
,
msci
+
TMCR
,
card
);
sca_out
(
port
->
tmc
,
msci
+
TMCT
,
card
);
#endif
sca_out
(
port
->
rxs
,
msci
+
RXS
,
card
);
sca_out
(
port
->
txs
,
msci
+
TXS
,
card
);
sca_out
(
CMD_TX_ENABLE
,
msci
+
CMD
,
card
);
...
...
@@ -615,7 +494,6 @@ static void sca_open(struct net_device *dev)
}
static
void
sca_close
(
struct
net_device
*
dev
)
{
port_t
*
port
=
dev_to_port
(
dev
);
...
...
@@ -623,23 +501,14 @@ static void sca_close(struct net_device *dev)
/* reset channel */
sca_out
(
CMD_RESET
,
get_msci
(
port
)
+
CMD
,
port_to_card
(
port
));
#ifdef __HD64570_H
/* disable MSCI interrupts */
sca_out
(
sca_in
(
IER0
,
card
)
&
(
phy_node
(
port
)
?
0x0F
:
0xF0
),
IER0
,
card
);
/* disable DMA interrupts */
sca_out
(
sca_in
(
IER1
,
card
)
&
(
phy_node
(
port
)
?
0x0F
:
0xF0
),
IER1
,
card
);
#else
/* disable DMA & MSCI IRQ */
sca_outl
(
sca_inl
(
IER0
,
card
)
&
(
phy_node
(
port
)
?
0x00FF00FF
:
0xFF00FF00
),
IER0
,
card
);
#endif
netif_stop_queue
(
dev
);
}
static
int
sca_attach
(
struct
net_device
*
dev
,
unsigned
short
encoding
,
unsigned
short
parity
)
{
...
...
@@ -653,11 +522,7 @@ static int sca_attach(struct net_device *dev, unsigned short encoding,
if
(
parity
!=
PARITY_NONE
&&
parity
!=
PARITY_CRC16_PR0
&&
parity
!=
PARITY_CRC16_PR1
&&
#ifdef __HD64570_H
parity
!=
PARITY_CRC16_PR0_CCITT
&&
#else
parity
!=
PARITY_CRC32_PR1_CCITT
&&
#endif
parity
!=
PARITY_CRC16_PR1_CCITT
)
return
-
EINVAL
;
...
...
@@ -667,34 +532,25 @@ static int sca_attach(struct net_device *dev, unsigned short encoding,
}
#ifdef DEBUG_RINGS
static
void
sca_dump_rings
(
struct
net_device
*
dev
)
{
port_t
*
port
=
dev_to_port
(
dev
);
card_t
*
card
=
port_to_card
(
port
);
u16
cnt
;
#if !defined(PAGE0_ALWAYS_MAPPED) && !defined(ALL_PAGES_ALWAYS_MAPPED)
u8
page
;
#endif
#if !defined(PAGE0_ALWAYS_MAPPED) && !defined(ALL_PAGES_ALWAYS_MAPPED)
page
=
sca_get_page
(
card
);
openwin
(
card
,
0
);
#endif
printk
(
KERN_DEBUG
"RX ring: CDA=%u EDA=%u DSR=%02X in=%u %sactive"
,
sca_in
a
(
get_dmac_rx
(
port
)
+
CDAL
,
card
),
sca_in
a
(
get_dmac_rx
(
port
)
+
EDAL
,
card
),
sca_in
l
(
get_dmac_rx
(
port
)
+
CDAL
,
card
),
sca_in
l
(
get_dmac_rx
(
port
)
+
EDAL
,
card
),
sca_in
(
DSR_RX
(
phy_node
(
port
)),
card
),
port
->
rxin
,
sca_in
(
DSR_RX
(
phy_node
(
port
)),
card
)
&
DSR_DE
?
""
:
"in"
);
sca_in
(
DSR_RX
(
phy_node
(
port
)),
card
)
&
DSR_DE
?
""
:
"in"
);
for
(
cnt
=
0
;
cnt
<
port_to_card
(
port
)
->
rx_ring_buffers
;
cnt
++
)
printk
(
" %02X"
,
readb
(
&
(
desc_address
(
port
,
cnt
,
0
)
->
stat
)));
printk
(
"
\n
"
KERN_DEBUG
"TX ring: CDA=%u EDA=%u DSR=%02X in=%u "
"last=%u %sactive"
,
sca_in
a
(
get_dmac_tx
(
port
)
+
CDAL
,
card
),
sca_in
a
(
get_dmac_tx
(
port
)
+
EDAL
,
card
),
sca_in
l
(
get_dmac_tx
(
port
)
+
CDAL
,
card
),
sca_in
l
(
get_dmac_tx
(
port
)
+
EDAL
,
card
),
sca_in
(
DSR_TX
(
phy_node
(
port
)),
card
),
port
->
txin
,
port
->
txlast
,
sca_in
(
DSR_TX
(
phy_node
(
port
)),
card
)
&
DSR_DE
?
""
:
"in"
);
...
...
@@ -702,12 +558,8 @@ static void sca_dump_rings(struct net_device *dev)
printk
(
" %02X"
,
readb
(
&
(
desc_address
(
port
,
cnt
,
1
)
->
stat
)));
printk
(
"
\n
"
);
printk
(
KERN_DEBUG
"MSCI: MD: %02x %02x %02x, "
"ST: %02x %02x %02x %02x"
#ifdef __HD64572_H
" %02x"
#endif
", FST: %02x CST: %02x %02x
\n
"
,
printk
(
KERN_DEBUG
"MSCI: MD: %02x %02x %02x,"
" ST: %02x %02x %02x %02x %02x, FST: %02x CST: %02x %02x
\n
"
,
sca_in
(
get_msci
(
port
)
+
MD0
,
card
),
sca_in
(
get_msci
(
port
)
+
MD1
,
card
),
sca_in
(
get_msci
(
port
)
+
MD2
,
card
),
...
...
@@ -715,52 +567,28 @@ static void sca_dump_rings(struct net_device *dev)
sca_in
(
get_msci
(
port
)
+
ST1
,
card
),
sca_in
(
get_msci
(
port
)
+
ST2
,
card
),
sca_in
(
get_msci
(
port
)
+
ST3
,
card
),
#ifdef __HD64572_H
sca_in
(
get_msci
(
port
)
+
ST4
,
card
),
#endif
sca_in
(
get_msci
(
port
)
+
FST
,
card
),
sca_in
(
get_msci
(
port
)
+
CST0
,
card
),
sca_in
(
get_msci
(
port
)
+
CST1
,
card
));
#ifdef __HD64572_H
printk
(
KERN_DEBUG
"ILAR: %02x ISR: %08x %08x
\n
"
,
sca_in
(
ILAR
,
card
),
sca_inl
(
ISR0
,
card
),
sca_inl
(
ISR1
,
card
));
#else
printk
(
KERN_DEBUG
"ISR: %02x %02x %02x
\n
"
,
sca_in
(
ISR0
,
card
),
sca_in
(
ISR1
,
card
),
sca_in
(
ISR2
,
card
));
#endif
#if !defined(PAGE0_ALWAYS_MAPPED) && !defined(ALL_PAGES_ALWAYS_MAPPED)
openwin
(
card
,
page
);
/* Restore original page */
#endif
}
#endif
/* DEBUG_RINGS */
static
int
sca_xmit
(
struct
sk_buff
*
skb
,
struct
net_device
*
dev
)
{
port_t
*
port
=
dev_to_port
(
dev
);
card_t
*
card
=
port_to_card
(
port
);
pkt_desc
__iomem
*
desc
;
u32
buff
,
len
;
#ifndef ALL_PAGES_ALWAYS_MAPPED
u8
page
;
u32
maxlen
;
#endif
spin_lock_irq
(
&
port
->
lock
);
desc
=
desc_address
(
port
,
port
->
txin
+
1
,
1
);
if
(
readb
(
&
desc
->
stat
))
{
/* allow 1 packet gap */
/* should never happen - previous xmit should stop queue */
#ifdef DEBUG_PKT
printk
(
KERN_DEBUG
"%s: transmitter buffer full
\n
"
,
dev
->
name
);
#endif
netif_stop_queue
(
dev
);
spin_unlock_irq
(
&
port
->
lock
);
return
1
;
/* request packet to be queued */
}
BUG_ON
(
readb
(
&
desc
->
stat
));
/* previous xmit should stop queue */
#ifdef DEBUG_PKT
printk
(
KERN_DEBUG
"%s TX(%i):"
,
dev
->
name
,
skb
->
len
);
...
...
@@ -770,30 +598,14 @@ static int sca_xmit(struct sk_buff *skb, struct net_device *dev)
desc
=
desc_address
(
port
,
port
->
txin
,
1
);
buff
=
buffer_offset
(
port
,
port
->
txin
,
1
);
len
=
skb
->
len
;
#ifndef ALL_PAGES_ALWAYS_MAPPED
page
=
buff
/
winsize
(
card
);
buff
=
buff
%
winsize
(
card
);
maxlen
=
winsize
(
card
)
-
buff
;
openwin
(
card
,
page
);
if
(
len
>
maxlen
)
{
memcpy_toio
(
winbase
(
card
)
+
buff
,
skb
->
data
,
maxlen
);
openwin
(
card
,
page
+
1
);
memcpy_toio
(
winbase
(
card
),
skb
->
data
+
maxlen
,
len
-
maxlen
);
}
else
#endif
memcpy_toio
(
winbase
(
card
)
+
buff
,
skb
->
data
,
len
);
memcpy_toio
(
winbase
(
card
)
+
buff
,
skb
->
data
,
len
);
#if !defined(PAGE0_ALWAYS_MAPPED) && !defined(ALL_PAGES_ALWAYS_MAPPED)
openwin
(
card
,
0
);
/* select pkt_desc table page back */
#endif
writew
(
len
,
&
desc
->
len
);
writeb
(
ST_TX_EOM
,
&
desc
->
stat
);
dev
->
trans_start
=
jiffies
;
port
->
txin
=
next_desc
(
port
,
port
->
txin
,
1
);
sca_out
a
(
desc_offset
(
port
,
port
->
txin
,
1
),
sca_out
l
(
desc_offset
(
port
,
port
->
txin
,
1
),
get_dmac_tx
(
port
)
+
EDAL
,
card
);
sca_out
(
DSR_DE
,
DSR_TX
(
phy_node
(
port
)),
card
);
/* Enable TX DMA */
...
...
@@ -809,46 +621,24 @@ static int sca_xmit(struct sk_buff *skb, struct net_device *dev)
}
#ifdef NEED_DETECT_RAM
static
u32
__devinit
sca_detect_ram
(
card_t
*
card
,
u8
__iomem
*
rambase
,
u32
ramsize
)
static
u32
__devinit
sca_detect_ram
(
card_t
*
card
,
u8
__iomem
*
rambase
,
u32
ramsize
)
{
/* Round RAM size to 32 bits, fill from end to start */
u32
i
=
ramsize
&=
~
3
;
#ifndef ALL_PAGES_ALWAYS_MAPPED
u32
size
=
winsize
(
card
);
openwin
(
card
,
(
i
-
4
)
/
size
);
/* select last window */
#endif
do
{
i
-=
4
;
#ifndef ALL_PAGES_ALWAYS_MAPPED
if
((
i
+
4
)
%
size
==
0
)
openwin
(
card
,
i
/
size
);
writel
(
i
^
0x12345678
,
rambase
+
i
%
size
);
#else
writel
(
i
^
0x12345678
,
rambase
+
i
);
#endif
}
while
(
i
>
0
);
}
while
(
i
>
0
);
for
(
i
=
0
;
i
<
ramsize
;
i
+=
4
)
{
#ifndef ALL_PAGES_ALWAYS_MAPPED
if
(
i
%
size
==
0
)
openwin
(
card
,
i
/
size
);
if
(
readl
(
rambase
+
i
%
size
)
!=
(
i
^
0x12345678
))
break
;
#else
if
(
readl
(
rambase
+
i
)
!=
(
i
^
0x12345678
))
break
;
#endif
}
return
i
;
}
#endif
/* NEED_DETECT_RAM */
static
void
__devinit
sca_init
(
card_t
*
card
,
int
wait_states
)
...
...
drivers/net/wan/pc300too.c
View file @
30224392
...
...
@@ -45,9 +45,6 @@ static const char* devname = "PC300";
#define PC300_PLX_SIZE 0x80
/* PLX control window size (128 B) */
#define PC300_SCA_SIZE 0x400
/* SCA window size (1 KB) */
#define ALL_PAGES_ALWAYS_MAPPED
#define NEED_DETECT_RAM
#define NEED_SCA_MSCI_INTR
#define MAX_TX_BUFFERS 10
static
int
pci_clock_freq
=
33000000
;
...
...
@@ -491,7 +488,7 @@ static int __devinit pc300_pci_init_one(struct pci_dev *pdev,
pc300_pci_remove_one
(
pdev
);
return
-
ENOBUFS
;
}
sca_init_
sync_port
(
port
);
/* Set up SCA memory */
sca_init_
port
(
port
);
/* Set up SCA memory */
printk
(
KERN_INFO
"%s: PC300 node %d
\n
"
,
dev
->
name
,
port
->
phy_node
);
...
...
drivers/net/wan/pci200syn.c
View file @
30224392
...
...
@@ -41,9 +41,6 @@ static const char* devname = "PCI200SYN";
#define PCI200SYN_PLX_SIZE 0x80
/* PLX control window size (128b) */
#define PCI200SYN_SCA_SIZE 0x400
/* SCA window size (1Kb) */
#define ALL_PAGES_ALWAYS_MAPPED
#define NEED_DETECT_RAM
#define NEED_SCA_MSCI_INTR
#define MAX_TX_BUFFERS 10
static
int
pci_clock_freq
=
33000000
;
...
...
@@ -433,7 +430,7 @@ static int __devinit pci200_pci_init_one(struct pci_dev *pdev,
pci200_pci_remove_one
(
pdev
);
return
-
ENOBUFS
;
}
sca_init_
sync_port
(
port
);
/* Set up SCA memory */
sca_init_
port
(
port
);
/* Set up SCA memory */
printk
(
KERN_INFO
"%s: PCI200SYN node %d
\n
"
,
dev
->
name
,
port
->
phy_node
);
...
...
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