git://git.onelab.eu
/
linux-2.6.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
fedora core 6 1.2949 + vserver 2.2.0
[linux-2.6.git]
/
drivers
/
net
/
wan
/
c101.c
diff --git
a/drivers/net/wan/c101.c
b/drivers/net/wan/c101.c
index
7f47180
..
6b63b35
100644
(file)
--- 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.
*
* under the terms of version 2 of the GNU General Public License
* as published by the Free Software Foundation.
*
- * For information see
http://hq.pm.waw.pl/hdlc/
+ * For information see
<http://www.kernel.org/pub/linux/utils/net/hdlc/>
*
* Sources of information:
* Hitachi HD64570 SCA User's Manual
*
* Sources of information:
* Hitachi HD64570 SCA User's Manual
@@
-56,7
+56,7
@@
static char *hw; /* pointer to hw=xxx command line string */
typedef struct card_s {
struct net_device *dev;
spinlock_t lock; /* TX lock */
typedef struct card_s {
struct net_device *dev;
spinlock_t lock; /* TX lock */
- u8
*win0base;
/* ISA window base address */
+ u8
__iomem *win0base;
/* ISA window base address */
u32 phy_winbase; /* ISA physical base address */
sync_serial_settings settings;
int rxpart; /* partial frame received, next frame invalid*/
u32 phy_winbase; /* ISA physical base address */
sync_serial_settings settings;
int rxpart; /* partial frame received, next frame invalid*/
@@
-113,33
+113,37
@@
static inline void openwin(card_t *card, u8 page)
}
}
-#
define close_windows(card) {} /* no hardware support */
+#
include "hd6457x.c"
-#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)
{
static void sca_msci_intr(port_t *port)
{
- 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 */
+ u8 stat = sca_in(MSCI0_OFFSET + ST1, port); /* read MSCI ST1 status */
- /* Reset MSCI TX underrun status bit */
- sca_out(stat &
ST1_UDRN, MSCI0_OFFSET + ST1, card
);
+ /* Reset MSCI TX underrun
and CDCD (ignored)
status bit */
+ sca_out(stat &
(ST1_UDRN | ST1_CDCD), MSCI0_OFFSET + ST1, port
);
if (stat & ST1_UDRN) {
if (stat & ST1_UDRN) {
- struct net_device_stats *stats = hdlc_stats(
dev
);
+ struct net_device_stats *stats = hdlc_stats(
port_to_dev(port)
);
stats->tx_errors++; /* TX Underrun error detected */
stats->tx_fifo_errors++;
}
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 */
/* Reset MSCI CDCD status bit - uses ch#2 DCD input */
- sca_out(stat & ST1_CDCD, MSCI1_OFFSET + ST1,
card
);
+ sca_out(stat & ST1_CDCD, MSCI1_OFFSET + ST1,
port
);
if (stat & ST1_CDCD)
if (stat & ST1_CDCD)
- hdlc_set_carrier(!(sca_in(MSCI1_OFFSET + ST3, card) & ST3_DCD),
- dev);
+ set_carrier(port);
}
}
@@
-193,8
+197,7
@@
static int c101_open(struct net_device *dev)
sca_out(IE1_UDRN, MSCI0_OFFSET + IE1, port);
sca_out(IE0_TXINT, MSCI0_OFFSET + IE0, port);
sca_out(IE1_UDRN, MSCI0_OFFSET + IE1, port);
sca_out(IE0_TXINT, MSCI0_OFFSET + IE0, 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));
+ set_carrier(port);
/* enable MSCI1 CDCD interrupt */
sca_out(IE1_CDCD, MSCI1_OFFSET + IE1, port);
/* enable MSCI1 CDCD interrupt */
sca_out(IE1_CDCD, MSCI1_OFFSET + IE1, port);
@@
-220,7
+223,8
@@
static int c101_close(struct net_device *dev)
static int c101_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd)
{
const size_t size = sizeof(sync_serial_settings);
static int c101_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd)
{
const size_t size = sizeof(sync_serial_settings);
- sync_serial_settings new_line, *line = ifr->ifr_settings.ifs_ifsu.sync;
+ sync_serial_settings new_line;
+ sync_serial_settings __user *line = ifr->ifr_settings.ifs_ifsu.sync;
port_t *port = dev_to_port(dev);
#ifdef DEBUG_RINGS
port_t *port = dev_to_port(dev);
#ifdef DEBUG_RINGS
@@
-328,21
+332,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);
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);
}
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);
}
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 -E
BUSY
;
+ return -E
FAULT
;
}
card->tx_ring_buffers = TX_RING_BUFFERS;
}
card->tx_ring_buffers = TX_RING_BUFFERS;
@@
-380,7
+384,7
@@
static int __init c101_run(unsigned long irq, unsigned long winbase)
}
sca_init_sync_port(card); /* Set up C101 memory */
}
sca_init_sync_port(card); /* Set up C101 memory */
-
hdlc_set_carrier(!(sca_in(MSCI1_OFFSET + ST3, card) & ST3_DCD), dev
);
+
set_carrier(card
);
printk(KERN_INFO "%s: Moxa C101 on IRQ%u,"
" using %u TX + %u RX packets rings\n",
printk(KERN_INFO "%s: Moxa C101 on IRQ%u,"
" using %u TX + %u RX packets rings\n",
@@
-445,4
+449,5
@@
module_exit(c101_cleanup);
MODULE_AUTHOR("Krzysztof Halasa <khc@pm.waw.pl>");
MODULE_DESCRIPTION("Moxa C101 serial port driver");
MODULE_LICENSE("GPL v2");
MODULE_AUTHOR("Krzysztof Halasa <khc@pm.waw.pl>");
MODULE_DESCRIPTION("Moxa C101 serial port driver");
MODULE_LICENSE("GPL v2");
-module_param(hw, charp, 0444); /* hw=irq,ram:irq,... */
+module_param(hw, charp, 0444);
+MODULE_PARM_DESC(hw, "irq,ram:irq,...");