X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=drivers%2Fnet%2Fwan%2Fc101.c;fp=drivers%2Fnet%2Fwan%2Fc101.c;h=43d854ace2333a6f52341ba31b3c5f002700d0dd;hb=64ba3f394c830ec48a1c31b53dcae312c56f1604;hp=6b63b350cd5216498d179f591b7cf7376493d9ba;hpb=be1e6109ac94a859551f8e1774eb9a8469fe055c;p=linux-2.6.git
diff --git a/drivers/net/wan/c101.c b/drivers/net/wan/c101.c
index 6b63b350c..43d854ace 100644
--- a/drivers/net/wan/c101.c
+++ b/drivers/net/wan/c101.c
@@ -7,7 +7,7 @@
* under the terms of version 2 of the GNU General Public License
* as published by the Free Software Foundation.
*
- * For information see
+ * For information see http://hq.pm.waw.pl/hdlc/
*
* Sources of information:
* Hitachi HD64570 SCA User's Manual
@@ -116,34 +116,27 @@ static inline void openwin(card_t *card, u8 page)
#include "hd6457x.c"
-static inline void set_carrier(port_t *port)
-{
- if (!(sca_in(MSCI1_OFFSET + ST3, port) & ST3_DCD))
- netif_carrier_on(port_to_dev(port));
- else
- netif_carrier_off(port_to_dev(port));
-}
-
-
static void sca_msci_intr(port_t *port)
{
- u8 stat = sca_in(MSCI0_OFFSET + ST1, port); /* read MSCI ST1 status */
+ struct net_device *dev = port_to_dev(port);
+ card_t* card = port_to_card(port);
+ u8 stat = sca_in(MSCI1_OFFSET + ST1, card); /* read MSCI ST1 status */
- /* Reset MSCI TX underrun and CDCD (ignored) status bit */
- sca_out(stat & (ST1_UDRN | ST1_CDCD), MSCI0_OFFSET + ST1, port);
+ /* Reset MSCI TX underrun status bit */
+ sca_out(stat & ST1_UDRN, MSCI0_OFFSET + ST1, card);
if (stat & ST1_UDRN) {
- struct net_device_stats *stats = hdlc_stats(port_to_dev(port));
+ struct net_device_stats *stats = hdlc_stats(dev);
stats->tx_errors++; /* TX Underrun error detected */
stats->tx_fifo_errors++;
}
- stat = sca_in(MSCI1_OFFSET + ST1, port); /* read MSCI1 ST1 status */
/* Reset MSCI CDCD status bit - uses ch#2 DCD input */
- sca_out(stat & ST1_CDCD, MSCI1_OFFSET + ST1, port);
+ sca_out(stat & ST1_CDCD, MSCI1_OFFSET + ST1, card);
if (stat & ST1_CDCD)
- set_carrier(port);
+ hdlc_set_carrier(!(sca_in(MSCI1_OFFSET + ST3, card) & ST3_DCD),
+ dev);
}
@@ -197,7 +190,8 @@ static int c101_open(struct net_device *dev)
sca_out(IE1_UDRN, MSCI0_OFFSET + IE1, port);
sca_out(IE0_TXINT, MSCI0_OFFSET + IE0, port);
- set_carrier(port);
+ hdlc_set_carrier(!(sca_in(MSCI1_OFFSET + ST3, port) & ST3_DCD), dev);
+ printk(KERN_DEBUG "0x%X\n", sca_in(MSCI1_OFFSET + ST3, port));
/* enable MSCI1 CDCD interrupt */
sca_out(IE1_CDCD, MSCI1_OFFSET + IE1, port);
@@ -332,21 +326,21 @@ static int __init c101_run(unsigned long irq, unsigned long winbase)
if (request_irq(irq, sca_intr, 0, devname, card)) {
printk(KERN_ERR "c101: could not allocate IRQ\n");
c101_destroy_card(card);
- return -EBUSY;
+ return(-EBUSY);
}
card->irq = irq;
if (!request_mem_region(winbase, C101_MAPPED_RAM_SIZE, devname)) {
printk(KERN_ERR "c101: could not request RAM window\n");
c101_destroy_card(card);
- return -EBUSY;
+ return(-EBUSY);
}
card->phy_winbase = winbase;
card->win0base = ioremap(winbase, C101_MAPPED_RAM_SIZE);
if (!card->win0base) {
printk(KERN_ERR "c101: could not map I/O address\n");
c101_destroy_card(card);
- return -EFAULT;
+ return -EBUSY;
}
card->tx_ring_buffers = TX_RING_BUFFERS;
@@ -384,7 +378,7 @@ static int __init c101_run(unsigned long irq, unsigned long winbase)
}
sca_init_sync_port(card); /* Set up C101 memory */
- set_carrier(card);
+ hdlc_set_carrier(!(sca_in(MSCI1_OFFSET + ST3, card) & ST3_DCD), dev);
printk(KERN_INFO "%s: Moxa C101 on IRQ%u,"
" using %u TX + %u RX packets rings\n",
@@ -449,5 +443,4 @@ module_exit(c101_cleanup);
MODULE_AUTHOR("Krzysztof Halasa ");
MODULE_DESCRIPTION("Moxa C101 serial port driver");
MODULE_LICENSE("GPL v2");
-module_param(hw, charp, 0444);
-MODULE_PARM_DESC(hw, "irq,ram:irq,...");
+module_param(hw, charp, 0444); /* hw=irq,ram:irq,... */