Staging: delete generic_serial drivers
No one has steped up to claim them, so as described in commit
4c37705877 (tty: move obsolete and broken
generic_serial drivers to drivers/staging/generic_serial/), they are now
deleted from the system.
Cc: Arnd Bergmann <arnd@arndb.de>
Cc: Alan Cox <alan@lxorguk.ukuu.org.uk>
Cc: Jiri Slaby <jslaby@suse.cz>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
This commit is contained in:
parent
8eb26942ae
commit
bb2a97e9cc
54 changed files with 0 additions and 20318 deletions
|
|
@ -26,8 +26,6 @@ if STAGING
|
|||
|
||||
source "drivers/staging/tty/Kconfig"
|
||||
|
||||
source "drivers/staging/generic_serial/Kconfig"
|
||||
|
||||
source "drivers/staging/et131x/Kconfig"
|
||||
|
||||
source "drivers/staging/slicoss/Kconfig"
|
||||
|
|
|
|||
|
|
@ -4,7 +4,6 @@
|
|||
obj-$(CONFIG_STAGING) += staging.o
|
||||
|
||||
obj-y += tty/
|
||||
obj-y += generic_serial/
|
||||
obj-$(CONFIG_ET131X) += et131x/
|
||||
obj-$(CONFIG_SLICOSS) += slicoss/
|
||||
obj-$(CONFIG_VIDEO_GO7007) += go7007/
|
||||
|
|
|
|||
|
|
@ -1,45 +0,0 @@
|
|||
config A2232
|
||||
tristate "Commodore A2232 serial support (EXPERIMENTAL)"
|
||||
depends on EXPERIMENTAL && ZORRO && BROKEN
|
||||
---help---
|
||||
This option supports the 2232 7-port serial card shipped with the
|
||||
Amiga 2000 and other Zorro-bus machines, dating from 1989. At
|
||||
a max of 19,200 bps, the ports are served by a 6551 ACIA UART chip
|
||||
each, plus a 8520 CIA, and a master 6502 CPU and buffer as well. The
|
||||
ports were connected with 8 pin DIN connectors on the card bracket,
|
||||
for which 8 pin to DB25 adapters were supplied. The card also had
|
||||
jumpers internally to toggle various pinning configurations.
|
||||
|
||||
This driver can be built as a module; but then "generic_serial"
|
||||
will also be built as a module. This has to be loaded before
|
||||
"ser_a2232". If you want to do this, answer M here.
|
||||
|
||||
config SX
|
||||
tristate "Specialix SX (and SI) card support"
|
||||
depends on SERIAL_NONSTANDARD && (PCI || EISA || ISA) && BROKEN
|
||||
help
|
||||
This is a driver for the SX and SI multiport serial cards.
|
||||
Please read the file <file:Documentation/serial/sx.txt> for details.
|
||||
|
||||
This driver can only be built as a module ( = code which can be
|
||||
inserted in and removed from the running kernel whenever you want).
|
||||
The module will be called sx. If you want to do that, say M here.
|
||||
|
||||
config RIO
|
||||
tristate "Specialix RIO system support"
|
||||
depends on SERIAL_NONSTANDARD && BROKEN
|
||||
help
|
||||
This is a driver for the Specialix RIO, a smart serial card which
|
||||
drives an outboard box that can support up to 128 ports. Product
|
||||
information is at <http://www.perle.com/support/documentation.html#multiport>.
|
||||
There are both ISA and PCI versions.
|
||||
|
||||
config RIO_OLDPCI
|
||||
bool "Support really old RIO/PCI cards"
|
||||
depends on RIO
|
||||
help
|
||||
Older RIO PCI cards need some initialization-time configuration to
|
||||
determine the IRQ and some control addresses. If you have a RIO and
|
||||
this doesn't seem to work, try setting this to Y.
|
||||
|
||||
|
||||
|
|
@ -1,6 +0,0 @@
|
|||
obj-$(CONFIG_MVME147_SCC) += generic_serial.o vme_scc.o
|
||||
obj-$(CONFIG_MVME162_SCC) += generic_serial.o vme_scc.o
|
||||
obj-$(CONFIG_BVME6000_SCC) += generic_serial.o vme_scc.o
|
||||
obj-$(CONFIG_A2232) += ser_a2232.o generic_serial.o
|
||||
obj-$(CONFIG_SX) += sx.o generic_serial.o
|
||||
obj-$(CONFIG_RIO) += rio/ generic_serial.o
|
||||
|
|
@ -1,6 +0,0 @@
|
|||
These are a few tty/serial drivers that either do not build,
|
||||
or work if they do build, or if they seem to work, are for obsolete
|
||||
hardware, or are full of unfixable races and no one uses them anymore.
|
||||
|
||||
If no one steps up to adopt any of these drivers, they will be removed
|
||||
in the 2.6.41 release.
|
||||
|
|
@ -1,844 +0,0 @@
|
|||
/*
|
||||
* generic_serial.c
|
||||
*
|
||||
* Copyright (C) 1998/1999 R.E.Wolff@BitWizard.nl
|
||||
*
|
||||
* written for the SX serial driver.
|
||||
* Contains the code that should be shared over all the serial drivers.
|
||||
*
|
||||
* Credit for the idea to do it this way might go to Alan Cox.
|
||||
*
|
||||
*
|
||||
* Version 0.1 -- December, 1998. Initial version.
|
||||
* Version 0.2 -- March, 1999. Some more routines. Bugfixes. Etc.
|
||||
* Version 0.5 -- August, 1999. Some more fixes. Reformat for Linus.
|
||||
*
|
||||
* BitWizard is actively maintaining this file. We sometimes find
|
||||
* that someone submitted changes to this file. We really appreciate
|
||||
* your help, but please submit changes through us. We're doing our
|
||||
* best to be responsive. -- REW
|
||||
* */
|
||||
|
||||
#include <linux/module.h>
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/tty.h>
|
||||
#include <linux/sched.h>
|
||||
#include <linux/serial.h>
|
||||
#include <linux/mm.h>
|
||||
#include <linux/generic_serial.h>
|
||||
#include <linux/interrupt.h>
|
||||
#include <linux/tty_flip.h>
|
||||
#include <linux/delay.h>
|
||||
#include <linux/gfp.h>
|
||||
#include <asm/uaccess.h>
|
||||
|
||||
#define DEBUG
|
||||
|
||||
static int gs_debug;
|
||||
|
||||
#ifdef DEBUG
|
||||
#define gs_dprintk(f, str...) if (gs_debug & f) printk (str)
|
||||
#else
|
||||
#define gs_dprintk(f, str...) /* nothing */
|
||||
#endif
|
||||
|
||||
#define func_enter() gs_dprintk (GS_DEBUG_FLOW, "gs: enter %s\n", __func__)
|
||||
#define func_exit() gs_dprintk (GS_DEBUG_FLOW, "gs: exit %s\n", __func__)
|
||||
|
||||
#define RS_EVENT_WRITE_WAKEUP 1
|
||||
|
||||
module_param(gs_debug, int, 0644);
|
||||
|
||||
|
||||
int gs_put_char(struct tty_struct * tty, unsigned char ch)
|
||||
{
|
||||
struct gs_port *port;
|
||||
|
||||
func_enter ();
|
||||
|
||||
port = tty->driver_data;
|
||||
|
||||
if (!port) return 0;
|
||||
|
||||
if (! (port->port.flags & ASYNC_INITIALIZED)) return 0;
|
||||
|
||||
/* Take a lock on the serial tranmit buffer! */
|
||||
mutex_lock(& port->port_write_mutex);
|
||||
|
||||
if (port->xmit_cnt >= SERIAL_XMIT_SIZE - 1) {
|
||||
/* Sorry, buffer is full, drop character. Update statistics???? -- REW */
|
||||
mutex_unlock(&port->port_write_mutex);
|
||||
return 0;
|
||||
}
|
||||
|
||||
port->xmit_buf[port->xmit_head++] = ch;
|
||||
port->xmit_head &= SERIAL_XMIT_SIZE - 1;
|
||||
port->xmit_cnt++; /* Characters in buffer */
|
||||
|
||||
mutex_unlock(&port->port_write_mutex);
|
||||
func_exit ();
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
> Problems to take into account are:
|
||||
> -1- Interrupts that empty part of the buffer.
|
||||
> -2- page faults on the access to userspace.
|
||||
> -3- Other processes that are also trying to do a "write".
|
||||
*/
|
||||
|
||||
int gs_write(struct tty_struct * tty,
|
||||
const unsigned char *buf, int count)
|
||||
{
|
||||
struct gs_port *port;
|
||||
int c, total = 0;
|
||||
int t;
|
||||
|
||||
func_enter ();
|
||||
|
||||
port = tty->driver_data;
|
||||
|
||||
if (!port) return 0;
|
||||
|
||||
if (! (port->port.flags & ASYNC_INITIALIZED))
|
||||
return 0;
|
||||
|
||||
/* get exclusive "write" access to this port (problem 3) */
|
||||
/* This is not a spinlock because we can have a disk access (page
|
||||
fault) in copy_from_user */
|
||||
mutex_lock(& port->port_write_mutex);
|
||||
|
||||
while (1) {
|
||||
|
||||
c = count;
|
||||
|
||||
/* This is safe because we "OWN" the "head". No one else can
|
||||
change the "head": we own the port_write_mutex. */
|
||||
/* Don't overrun the end of the buffer */
|
||||
t = SERIAL_XMIT_SIZE - port->xmit_head;
|
||||
if (t < c) c = t;
|
||||
|
||||
/* This is safe because the xmit_cnt can only decrease. This
|
||||
would increase "t", so we might copy too little chars. */
|
||||
/* Don't copy past the "head" of the buffer */
|
||||
t = SERIAL_XMIT_SIZE - 1 - port->xmit_cnt;
|
||||
if (t < c) c = t;
|
||||
|
||||
/* Can't copy more? break out! */
|
||||
if (c <= 0) break;
|
||||
|
||||
memcpy (port->xmit_buf + port->xmit_head, buf, c);
|
||||
|
||||
port -> xmit_cnt += c;
|
||||
port -> xmit_head = (port->xmit_head + c) & (SERIAL_XMIT_SIZE -1);
|
||||
buf += c;
|
||||
count -= c;
|
||||
total += c;
|
||||
}
|
||||
mutex_unlock(& port->port_write_mutex);
|
||||
|
||||
gs_dprintk (GS_DEBUG_WRITE, "write: interrupts are %s\n",
|
||||
(port->port.flags & GS_TX_INTEN)?"enabled": "disabled");
|
||||
|
||||
if (port->xmit_cnt &&
|
||||
!tty->stopped &&
|
||||
!tty->hw_stopped &&
|
||||
!(port->port.flags & GS_TX_INTEN)) {
|
||||
port->port.flags |= GS_TX_INTEN;
|
||||
port->rd->enable_tx_interrupts (port);
|
||||
}
|
||||
func_exit ();
|
||||
return total;
|
||||
}
|
||||
|
||||
|
||||
|
||||
int gs_write_room(struct tty_struct * tty)
|
||||
{
|
||||
struct gs_port *port = tty->driver_data;
|
||||
int ret;
|
||||
|
||||
func_enter ();
|
||||
ret = SERIAL_XMIT_SIZE - port->xmit_cnt - 1;
|
||||
if (ret < 0)
|
||||
ret = 0;
|
||||
func_exit ();
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
int gs_chars_in_buffer(struct tty_struct *tty)
|
||||
{
|
||||
struct gs_port *port = tty->driver_data;
|
||||
func_enter ();
|
||||
|
||||
func_exit ();
|
||||
return port->xmit_cnt;
|
||||
}
|
||||
|
||||
|
||||
static int gs_real_chars_in_buffer(struct tty_struct *tty)
|
||||
{
|
||||
struct gs_port *port;
|
||||
func_enter ();
|
||||
|
||||
port = tty->driver_data;
|
||||
|
||||
if (!port->rd) return 0;
|
||||
if (!port->rd->chars_in_buffer) return 0;
|
||||
|
||||
func_exit ();
|
||||
return port->xmit_cnt + port->rd->chars_in_buffer (port);
|
||||
}
|
||||
|
||||
|
||||
static int gs_wait_tx_flushed (void * ptr, unsigned long timeout)
|
||||
{
|
||||
struct gs_port *port = ptr;
|
||||
unsigned long end_jiffies;
|
||||
int jiffies_to_transmit, charsleft = 0, rv = 0;
|
||||
int rcib;
|
||||
|
||||
func_enter();
|
||||
|
||||
gs_dprintk (GS_DEBUG_FLUSH, "port=%p.\n", port);
|
||||
if (port) {
|
||||
gs_dprintk (GS_DEBUG_FLUSH, "xmit_cnt=%x, xmit_buf=%p, tty=%p.\n",
|
||||
port->xmit_cnt, port->xmit_buf, port->port.tty);
|
||||
}
|
||||
|
||||
if (!port || port->xmit_cnt < 0 || !port->xmit_buf) {
|
||||
gs_dprintk (GS_DEBUG_FLUSH, "ERROR: !port, !port->xmit_buf or prot->xmit_cnt < 0.\n");
|
||||
func_exit();
|
||||
return -EINVAL; /* This is an error which we don't know how to handle. */
|
||||
}
|
||||
|
||||
rcib = gs_real_chars_in_buffer(port->port.tty);
|
||||
|
||||
if(rcib <= 0) {
|
||||
gs_dprintk (GS_DEBUG_FLUSH, "nothing to wait for.\n");
|
||||
func_exit();
|
||||
return rv;
|
||||
}
|
||||
/* stop trying: now + twice the time it would normally take + seconds */
|
||||
if (timeout == 0) timeout = MAX_SCHEDULE_TIMEOUT;
|
||||
end_jiffies = jiffies;
|
||||
if (timeout != MAX_SCHEDULE_TIMEOUT)
|
||||
end_jiffies += port->baud?(2 * rcib * 10 * HZ / port->baud):0;
|
||||
end_jiffies += timeout;
|
||||
|
||||
gs_dprintk (GS_DEBUG_FLUSH, "now=%lx, end=%lx (%ld).\n",
|
||||
jiffies, end_jiffies, end_jiffies-jiffies);
|
||||
|
||||
/* the expression is actually jiffies < end_jiffies, but that won't
|
||||
work around the wraparound. Tricky eh? */
|
||||
while ((charsleft = gs_real_chars_in_buffer (port->port.tty)) &&
|
||||
time_after (end_jiffies, jiffies)) {
|
||||
/* Units check:
|
||||
chars * (bits/char) * (jiffies /sec) / (bits/sec) = jiffies!
|
||||
check! */
|
||||
|
||||
charsleft += 16; /* Allow 16 chars more to be transmitted ... */
|
||||
jiffies_to_transmit = port->baud?(1 + charsleft * 10 * HZ / port->baud):0;
|
||||
/* ^^^ Round up.... */
|
||||
if (jiffies_to_transmit <= 0) jiffies_to_transmit = 1;
|
||||
|
||||
gs_dprintk (GS_DEBUG_FLUSH, "Expect to finish in %d jiffies "
|
||||
"(%d chars).\n", jiffies_to_transmit, charsleft);
|
||||
|
||||
msleep_interruptible(jiffies_to_msecs(jiffies_to_transmit));
|
||||
if (signal_pending (current)) {
|
||||
gs_dprintk (GS_DEBUG_FLUSH, "Signal pending. Bombing out: ");
|
||||
rv = -EINTR;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
gs_dprintk (GS_DEBUG_FLUSH, "charsleft = %d.\n", charsleft);
|
||||
set_current_state (TASK_RUNNING);
|
||||
|
||||
func_exit();
|
||||
return rv;
|
||||
}
|
||||
|
||||
|
||||
|
||||
void gs_flush_buffer(struct tty_struct *tty)
|
||||
{
|
||||
struct gs_port *port;
|
||||
unsigned long flags;
|
||||
|
||||
func_enter ();
|
||||
|
||||
port = tty->driver_data;
|
||||
|
||||
if (!port) return;
|
||||
|
||||
/* XXX Would the write semaphore do? */
|
||||
spin_lock_irqsave (&port->driver_lock, flags);
|
||||
port->xmit_cnt = port->xmit_head = port->xmit_tail = 0;
|
||||
spin_unlock_irqrestore (&port->driver_lock, flags);
|
||||
|
||||
tty_wakeup(tty);
|
||||
func_exit ();
|
||||
}
|
||||
|
||||
|
||||
void gs_flush_chars(struct tty_struct * tty)
|
||||
{
|
||||
struct gs_port *port;
|
||||
|
||||
func_enter ();
|
||||
|
||||
port = tty->driver_data;
|
||||
|
||||
if (!port) return;
|
||||
|
||||
if (port->xmit_cnt <= 0 || tty->stopped || tty->hw_stopped ||
|
||||
!port->xmit_buf) {
|
||||
func_exit ();
|
||||
return;
|
||||
}
|
||||
|
||||
/* Beats me -- REW */
|
||||
port->port.flags |= GS_TX_INTEN;
|
||||
port->rd->enable_tx_interrupts (port);
|
||||
func_exit ();
|
||||
}
|
||||
|
||||
|
||||
void gs_stop(struct tty_struct * tty)
|
||||
{
|
||||
struct gs_port *port;
|
||||
|
||||
func_enter ();
|
||||
|
||||
port = tty->driver_data;
|
||||
|
||||
if (!port) return;
|
||||
|
||||
if (port->xmit_cnt &&
|
||||
port->xmit_buf &&
|
||||
(port->port.flags & GS_TX_INTEN) ) {
|
||||
port->port.flags &= ~GS_TX_INTEN;
|
||||
port->rd->disable_tx_interrupts (port);
|
||||
}
|
||||
func_exit ();
|
||||
}
|
||||
|
||||
|
||||
void gs_start(struct tty_struct * tty)
|
||||
{
|
||||
struct gs_port *port;
|
||||
|
||||
port = tty->driver_data;
|
||||
|
||||
if (!port) return;
|
||||
|
||||
if (port->xmit_cnt &&
|
||||
port->xmit_buf &&
|
||||
!(port->port.flags & GS_TX_INTEN) ) {
|
||||
port->port.flags |= GS_TX_INTEN;
|
||||
port->rd->enable_tx_interrupts (port);
|
||||
}
|
||||
func_exit ();
|
||||
}
|
||||
|
||||
|
||||
static void gs_shutdown_port (struct gs_port *port)
|
||||
{
|
||||
unsigned long flags;
|
||||
|
||||
func_enter();
|
||||
|
||||
if (!port) return;
|
||||
|
||||
if (!(port->port.flags & ASYNC_INITIALIZED))
|
||||
return;
|
||||
|
||||
spin_lock_irqsave(&port->driver_lock, flags);
|
||||
|
||||
if (port->xmit_buf) {
|
||||
free_page((unsigned long) port->xmit_buf);
|
||||
port->xmit_buf = NULL;
|
||||
}
|
||||
|
||||
if (port->port.tty)
|
||||
set_bit(TTY_IO_ERROR, &port->port.tty->flags);
|
||||
|
||||
port->rd->shutdown_port (port);
|
||||
|
||||
port->port.flags &= ~ASYNC_INITIALIZED;
|
||||
spin_unlock_irqrestore(&port->driver_lock, flags);
|
||||
|
||||
func_exit();
|
||||
}
|
||||
|
||||
|
||||
void gs_hangup(struct tty_struct *tty)
|
||||
{
|
||||
struct gs_port *port;
|
||||
unsigned long flags;
|
||||
|
||||
func_enter ();
|
||||
|
||||
port = tty->driver_data;
|
||||
tty = port->port.tty;
|
||||
if (!tty)
|
||||
return;
|
||||
|
||||
gs_shutdown_port (port);
|
||||
spin_lock_irqsave(&port->port.lock, flags);
|
||||
port->port.flags &= ~(ASYNC_NORMAL_ACTIVE|GS_ACTIVE);
|
||||
port->port.tty = NULL;
|
||||
port->port.count = 0;
|
||||
spin_unlock_irqrestore(&port->port.lock, flags);
|
||||
|
||||
wake_up_interruptible(&port->port.open_wait);
|
||||
func_exit ();
|
||||
}
|
||||
|
||||
|
||||
int gs_block_til_ready(void *port_, struct file * filp)
|
||||
{
|
||||
struct gs_port *gp = port_;
|
||||
struct tty_port *port = &gp->port;
|
||||
DECLARE_WAITQUEUE(wait, current);
|
||||
int retval;
|
||||
int do_clocal = 0;
|
||||
int CD;
|
||||
struct tty_struct *tty;
|
||||
unsigned long flags;
|
||||
|
||||
func_enter ();
|
||||
|
||||
if (!port) return 0;
|
||||
|
||||
tty = port->tty;
|
||||
|
||||
gs_dprintk (GS_DEBUG_BTR, "Entering gs_block_till_ready.\n");
|
||||
/*
|
||||
* If the device is in the middle of being closed, then block
|
||||
* until it's done, and then try again.
|
||||
*/
|
||||
if (tty_hung_up_p(filp) || port->flags & ASYNC_CLOSING) {
|
||||
interruptible_sleep_on(&port->close_wait);
|
||||
if (port->flags & ASYNC_HUP_NOTIFY)
|
||||
return -EAGAIN;
|
||||
else
|
||||
return -ERESTARTSYS;
|
||||
}
|
||||
|
||||
gs_dprintk (GS_DEBUG_BTR, "after hung up\n");
|
||||
|
||||
/*
|
||||
* If non-blocking mode is set, or the port is not enabled,
|
||||
* then make the check up front and then exit.
|
||||
*/
|
||||
if ((filp->f_flags & O_NONBLOCK) ||
|
||||
(tty->flags & (1 << TTY_IO_ERROR))) {
|
||||
port->flags |= ASYNC_NORMAL_ACTIVE;
|
||||
return 0;
|
||||
}
|
||||
|
||||
gs_dprintk (GS_DEBUG_BTR, "after nonblock\n");
|
||||
|
||||
if (C_CLOCAL(tty))
|
||||
do_clocal = 1;
|
||||
|
||||
/*
|
||||
* Block waiting for the carrier detect and the line to become
|
||||
* free (i.e., not in use by the callout). While we are in
|
||||
* this loop, port->count is dropped by one, so that
|
||||
* rs_close() knows when to free things. We restore it upon
|
||||
* exit, either normal or abnormal.
|
||||
*/
|
||||
retval = 0;
|
||||
|
||||
add_wait_queue(&port->open_wait, &wait);
|
||||
|
||||
gs_dprintk (GS_DEBUG_BTR, "after add waitq.\n");
|
||||
spin_lock_irqsave(&port->lock, flags);
|
||||
if (!tty_hung_up_p(filp)) {
|
||||
port->count--;
|
||||
}
|
||||
port->blocked_open++;
|
||||
spin_unlock_irqrestore(&port->lock, flags);
|
||||
while (1) {
|
||||
CD = tty_port_carrier_raised(port);
|
||||
gs_dprintk (GS_DEBUG_BTR, "CD is now %d.\n", CD);
|
||||
set_current_state (TASK_INTERRUPTIBLE);
|
||||
if (tty_hung_up_p(filp) ||
|
||||
!(port->flags & ASYNC_INITIALIZED)) {
|
||||
if (port->flags & ASYNC_HUP_NOTIFY)
|
||||
retval = -EAGAIN;
|
||||
else
|
||||
retval = -ERESTARTSYS;
|
||||
break;
|
||||
}
|
||||
if (!(port->flags & ASYNC_CLOSING) &&
|
||||
(do_clocal || CD))
|
||||
break;
|
||||
gs_dprintk (GS_DEBUG_BTR, "signal_pending is now: %d (%lx)\n",
|
||||
(int)signal_pending (current), *(long*)(¤t->blocked));
|
||||
if (signal_pending(current)) {
|
||||
retval = -ERESTARTSYS;
|
||||
break;
|
||||
}
|
||||
schedule();
|
||||
}
|
||||
gs_dprintk (GS_DEBUG_BTR, "Got out of the loop. (%d)\n",
|
||||
port->blocked_open);
|
||||
set_current_state (TASK_RUNNING);
|
||||
remove_wait_queue(&port->open_wait, &wait);
|
||||
|
||||
spin_lock_irqsave(&port->lock, flags);
|
||||
if (!tty_hung_up_p(filp)) {
|
||||
port->count++;
|
||||
}
|
||||
port->blocked_open--;
|
||||
if (retval == 0)
|
||||
port->flags |= ASYNC_NORMAL_ACTIVE;
|
||||
spin_unlock_irqrestore(&port->lock, flags);
|
||||
func_exit ();
|
||||
return retval;
|
||||
}
|
||||
|
||||
|
||||
void gs_close(struct tty_struct * tty, struct file * filp)
|
||||
{
|
||||
unsigned long flags;
|
||||
struct gs_port *port;
|
||||
|
||||
func_enter ();
|
||||
|
||||
port = tty->driver_data;
|
||||
|
||||
if (!port) return;
|
||||
|
||||
if (!port->port.tty) {
|
||||
/* This seems to happen when this is called from vhangup. */
|
||||
gs_dprintk (GS_DEBUG_CLOSE, "gs: Odd: port->port.tty is NULL\n");
|
||||
port->port.tty = tty;
|
||||
}
|
||||
|
||||
spin_lock_irqsave(&port->port.lock, flags);
|
||||
|
||||
if (tty_hung_up_p(filp)) {
|
||||
spin_unlock_irqrestore(&port->port.lock, flags);
|
||||
if (port->rd->hungup)
|
||||
port->rd->hungup (port);
|
||||
func_exit ();
|
||||
return;
|
||||
}
|
||||
|
||||
if ((tty->count == 1) && (port->port.count != 1)) {
|
||||
printk(KERN_ERR "gs: gs_close port %p: bad port count;"
|
||||
" tty->count is 1, port count is %d\n", port, port->port.count);
|
||||
port->port.count = 1;
|
||||
}
|
||||
if (--port->port.count < 0) {
|
||||
printk(KERN_ERR "gs: gs_close port %p: bad port count: %d\n", port, port->port.count);
|
||||
port->port.count = 0;
|
||||
}
|
||||
|
||||
if (port->port.count) {
|
||||
gs_dprintk(GS_DEBUG_CLOSE, "gs_close port %p: count: %d\n", port, port->port.count);
|
||||
spin_unlock_irqrestore(&port->port.lock, flags);
|
||||
func_exit ();
|
||||
return;
|
||||
}
|
||||
port->port.flags |= ASYNC_CLOSING;
|
||||
|
||||
/*
|
||||
* Now we wait for the transmit buffer to clear; and we notify
|
||||
* the line discipline to only process XON/XOFF characters.
|
||||
*/
|
||||
tty->closing = 1;
|
||||
/* if (port->closing_wait != ASYNC_CLOSING_WAIT_NONE)
|
||||
tty_wait_until_sent(tty, port->closing_wait); */
|
||||
|
||||
/*
|
||||
* At this point we stop accepting input. To do this, we
|
||||
* disable the receive line status interrupts, and tell the
|
||||
* interrupt driver to stop checking the data ready bit in the
|
||||
* line status register.
|
||||
*/
|
||||
|
||||
spin_lock(&port->driver_lock);
|
||||
port->rd->disable_rx_interrupts (port);
|
||||
spin_unlock(&port->driver_lock);
|
||||
spin_unlock_irqrestore(&port->port.lock, flags);
|
||||
|
||||
/* close has no way of returning "EINTR", so discard return value */
|
||||
if (port->closing_wait != ASYNC_CLOSING_WAIT_NONE)
|
||||
gs_wait_tx_flushed (port, port->closing_wait);
|
||||
|
||||
port->port.flags &= ~GS_ACTIVE;
|
||||
|
||||
gs_flush_buffer(tty);
|
||||
|
||||
tty_ldisc_flush(tty);
|
||||
tty->closing = 0;
|
||||
|
||||
spin_lock_irqsave(&port->driver_lock, flags);
|
||||
port->event = 0;
|
||||
port->rd->close (port);
|
||||
port->rd->shutdown_port (port);
|
||||
spin_unlock_irqrestore(&port->driver_lock, flags);
|
||||
|
||||
spin_lock_irqsave(&port->port.lock, flags);
|
||||
port->port.tty = NULL;
|
||||
|
||||
if (port->port.blocked_open) {
|
||||
if (port->close_delay) {
|
||||
spin_unlock_irqrestore(&port->port.lock, flags);
|
||||
msleep_interruptible(jiffies_to_msecs(port->close_delay));
|
||||
spin_lock_irqsave(&port->port.lock, flags);
|
||||
}
|
||||
wake_up_interruptible(&port->port.open_wait);
|
||||
}
|
||||
port->port.flags &= ~(ASYNC_NORMAL_ACTIVE|ASYNC_CLOSING | ASYNC_INITIALIZED);
|
||||
spin_unlock_irqrestore(&port->port.lock, flags);
|
||||
wake_up_interruptible(&port->port.close_wait);
|
||||
|
||||
func_exit ();
|
||||
}
|
||||
|
||||
|
||||
void gs_set_termios (struct tty_struct * tty,
|
||||
struct ktermios * old_termios)
|
||||
{
|
||||
struct gs_port *port;
|
||||
int baudrate, tmp, rv;
|
||||
struct ktermios *tiosp;
|
||||
|
||||
func_enter();
|
||||
|
||||
port = tty->driver_data;
|
||||
|
||||
if (!port) return;
|
||||
if (!port->port.tty) {
|
||||
/* This seems to happen when this is called after gs_close. */
|
||||
gs_dprintk (GS_DEBUG_TERMIOS, "gs: Odd: port->port.tty is NULL\n");
|
||||
port->port.tty = tty;
|
||||
}
|
||||
|
||||
|
||||
tiosp = tty->termios;
|
||||
|
||||
if (gs_debug & GS_DEBUG_TERMIOS) {
|
||||
gs_dprintk (GS_DEBUG_TERMIOS, "termios structure (%p):\n", tiosp);
|
||||
}
|
||||
|
||||
if(old_termios && (gs_debug & GS_DEBUG_TERMIOS)) {
|
||||
if(tiosp->c_iflag != old_termios->c_iflag) printk("c_iflag changed\n");
|
||||
if(tiosp->c_oflag != old_termios->c_oflag) printk("c_oflag changed\n");
|
||||
if(tiosp->c_cflag != old_termios->c_cflag) printk("c_cflag changed\n");
|
||||
if(tiosp->c_lflag != old_termios->c_lflag) printk("c_lflag changed\n");
|
||||
if(tiosp->c_line != old_termios->c_line) printk("c_line changed\n");
|
||||
if(!memcmp(tiosp->c_cc, old_termios->c_cc, NCC)) printk("c_cc changed\n");
|
||||
}
|
||||
|
||||
baudrate = tty_get_baud_rate(tty);
|
||||
|
||||
if ((tiosp->c_cflag & CBAUD) == B38400) {
|
||||
if ( (port->port.flags & ASYNC_SPD_MASK) == ASYNC_SPD_HI)
|
||||
baudrate = 57600;
|
||||
else if ((port->port.flags & ASYNC_SPD_MASK) == ASYNC_SPD_VHI)
|
||||
baudrate = 115200;
|
||||
else if ((port->port.flags & ASYNC_SPD_MASK) == ASYNC_SPD_SHI)
|
||||
baudrate = 230400;
|
||||
else if ((port->port.flags & ASYNC_SPD_MASK) == ASYNC_SPD_WARP)
|
||||
baudrate = 460800;
|
||||
else if ((port->port.flags & ASYNC_SPD_MASK) == ASYNC_SPD_CUST)
|
||||
baudrate = (port->baud_base / port->custom_divisor);
|
||||
}
|
||||
|
||||
/* I recommend using THIS instead of the mess in termios (and
|
||||
duplicating the above code). Next we should create a clean
|
||||
interface towards this variable. If your card supports arbitrary
|
||||
baud rates, (e.g. CD1400 or 16550 based cards) then everything
|
||||
will be very easy..... */
|
||||
port->baud = baudrate;
|
||||
|
||||
/* Two timer ticks seems enough to wakeup something like SLIP driver */
|
||||
/* Baudrate/10 is cps. Divide by HZ to get chars per tick. */
|
||||
tmp = (baudrate / 10 / HZ) * 2;
|
||||
|
||||
if (tmp < 0) tmp = 0;
|
||||
if (tmp >= SERIAL_XMIT_SIZE) tmp = SERIAL_XMIT_SIZE-1;
|
||||
|
||||
port->wakeup_chars = tmp;
|
||||
|
||||
/* We should really wait for the characters to be all sent before
|
||||
changing the settings. -- CAL */
|
||||
rv = gs_wait_tx_flushed (port, MAX_SCHEDULE_TIMEOUT);
|
||||
if (rv < 0) return /* rv */;
|
||||
|
||||
rv = port->rd->set_real_termios(port);
|
||||
if (rv < 0) return /* rv */;
|
||||
|
||||
if ((!old_termios ||
|
||||
(old_termios->c_cflag & CRTSCTS)) &&
|
||||
!( tiosp->c_cflag & CRTSCTS)) {
|
||||
tty->stopped = 0;
|
||||
gs_start(tty);
|
||||
}
|
||||
|
||||
#ifdef tytso_patch_94Nov25_1726
|
||||
/* This "makes sense", Why is it commented out? */
|
||||
|
||||
if (!(old_termios->c_cflag & CLOCAL) &&
|
||||
(tty->termios->c_cflag & CLOCAL))
|
||||
wake_up_interruptible(&port->gs.open_wait);
|
||||
#endif
|
||||
|
||||
func_exit();
|
||||
return /* 0 */;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/* Must be called with interrupts enabled */
|
||||
int gs_init_port(struct gs_port *port)
|
||||
{
|
||||
unsigned long flags;
|
||||
|
||||
func_enter ();
|
||||
|
||||
if (port->port.flags & ASYNC_INITIALIZED) {
|
||||
func_exit ();
|
||||
return 0;
|
||||
}
|
||||
if (!port->xmit_buf) {
|
||||
/* We may sleep in get_zeroed_page() */
|
||||
unsigned long tmp;
|
||||
|
||||
tmp = get_zeroed_page(GFP_KERNEL);
|
||||
spin_lock_irqsave (&port->driver_lock, flags);
|
||||
if (port->xmit_buf)
|
||||
free_page (tmp);
|
||||
else
|
||||
port->xmit_buf = (unsigned char *) tmp;
|
||||
spin_unlock_irqrestore(&port->driver_lock, flags);
|
||||
if (!port->xmit_buf) {
|
||||
func_exit ();
|
||||
return -ENOMEM;
|
||||
}
|
||||
}
|
||||
|
||||
spin_lock_irqsave (&port->driver_lock, flags);
|
||||
if (port->port.tty)
|
||||
clear_bit(TTY_IO_ERROR, &port->port.tty->flags);
|
||||
mutex_init(&port->port_write_mutex);
|
||||
port->xmit_cnt = port->xmit_head = port->xmit_tail = 0;
|
||||
spin_unlock_irqrestore(&port->driver_lock, flags);
|
||||
gs_set_termios(port->port.tty, NULL);
|
||||
spin_lock_irqsave (&port->driver_lock, flags);
|
||||
port->port.flags |= ASYNC_INITIALIZED;
|
||||
port->port.flags &= ~GS_TX_INTEN;
|
||||
|
||||
spin_unlock_irqrestore(&port->driver_lock, flags);
|
||||
func_exit ();
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
int gs_setserial(struct gs_port *port, struct serial_struct __user *sp)
|
||||
{
|
||||
struct serial_struct sio;
|
||||
|
||||
if (copy_from_user(&sio, sp, sizeof(struct serial_struct)))
|
||||
return(-EFAULT);
|
||||
|
||||
if (!capable(CAP_SYS_ADMIN)) {
|
||||
if ((sio.baud_base != port->baud_base) ||
|
||||
(sio.close_delay != port->close_delay) ||
|
||||
((sio.flags & ~ASYNC_USR_MASK) !=
|
||||
(port->port.flags & ~ASYNC_USR_MASK)))
|
||||
return(-EPERM);
|
||||
}
|
||||
|
||||
port->port.flags = (port->port.flags & ~ASYNC_USR_MASK) |
|
||||
(sio.flags & ASYNC_USR_MASK);
|
||||
|
||||
port->baud_base = sio.baud_base;
|
||||
port->close_delay = sio.close_delay;
|
||||
port->closing_wait = sio.closing_wait;
|
||||
port->custom_divisor = sio.custom_divisor;
|
||||
|
||||
gs_set_termios (port->port.tty, NULL);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
/*****************************************************************************/
|
||||
|
||||
/*
|
||||
* Generate the serial struct info.
|
||||
*/
|
||||
|
||||
int gs_getserial(struct gs_port *port, struct serial_struct __user *sp)
|
||||
{
|
||||
struct serial_struct sio;
|
||||
|
||||
memset(&sio, 0, sizeof(struct serial_struct));
|
||||
sio.flags = port->port.flags;
|
||||
sio.baud_base = port->baud_base;
|
||||
sio.close_delay = port->close_delay;
|
||||
sio.closing_wait = port->closing_wait;
|
||||
sio.custom_divisor = port->custom_divisor;
|
||||
sio.hub6 = 0;
|
||||
|
||||
/* If you want you can override these. */
|
||||
sio.type = PORT_UNKNOWN;
|
||||
sio.xmit_fifo_size = -1;
|
||||
sio.line = -1;
|
||||
sio.port = -1;
|
||||
sio.irq = -1;
|
||||
|
||||
if (port->rd->getserial)
|
||||
port->rd->getserial (port, &sio);
|
||||
|
||||
if (copy_to_user(sp, &sio, sizeof(struct serial_struct)))
|
||||
return -EFAULT;
|
||||
return 0;
|
||||
|
||||
}
|
||||
|
||||
|
||||
void gs_got_break(struct gs_port *port)
|
||||
{
|
||||
func_enter ();
|
||||
|
||||
tty_insert_flip_char(port->port.tty, 0, TTY_BREAK);
|
||||
tty_schedule_flip(port->port.tty);
|
||||
if (port->port.flags & ASYNC_SAK) {
|
||||
do_SAK (port->port.tty);
|
||||
}
|
||||
|
||||
func_exit ();
|
||||
}
|
||||
|
||||
|
||||
EXPORT_SYMBOL(gs_put_char);
|
||||
EXPORT_SYMBOL(gs_write);
|
||||
EXPORT_SYMBOL(gs_write_room);
|
||||
EXPORT_SYMBOL(gs_chars_in_buffer);
|
||||
EXPORT_SYMBOL(gs_flush_buffer);
|
||||
EXPORT_SYMBOL(gs_flush_chars);
|
||||
EXPORT_SYMBOL(gs_stop);
|
||||
EXPORT_SYMBOL(gs_start);
|
||||
EXPORT_SYMBOL(gs_hangup);
|
||||
EXPORT_SYMBOL(gs_block_til_ready);
|
||||
EXPORT_SYMBOL(gs_close);
|
||||
EXPORT_SYMBOL(gs_set_termios);
|
||||
EXPORT_SYMBOL(gs_init_port);
|
||||
EXPORT_SYMBOL(gs_setserial);
|
||||
EXPORT_SYMBOL(gs_getserial);
|
||||
EXPORT_SYMBOL(gs_got_break);
|
||||
|
||||
MODULE_LICENSE("GPL");
|
||||
|
|
@ -1,12 +0,0 @@
|
|||
#
|
||||
# Makefile for the linux rio-subsystem.
|
||||
#
|
||||
# (C) R.E.Wolff@BitWizard.nl
|
||||
#
|
||||
# This file is GPL. See other files for the full Blurb. I'm lazy today.
|
||||
#
|
||||
|
||||
obj-$(CONFIG_RIO) += rio.o
|
||||
|
||||
rio-y := rio_linux.o rioinit.o rioboot.o riocmd.o rioctrl.o riointr.o \
|
||||
rioparam.o rioroute.o riotable.o riotty.o
|
||||
|
|
@ -1,132 +0,0 @@
|
|||
/*
|
||||
** -----------------------------------------------------------------------------
|
||||
**
|
||||
** Perle Specialix driver for Linux
|
||||
** Ported from existing RIO Driver for SCO sources.
|
||||
*
|
||||
* (C) 1990 - 2000 Specialix International Ltd., Byfleet, Surrey, UK.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
**
|
||||
** Module : board.h
|
||||
** SID : 1.2
|
||||
** Last Modified : 11/6/98 11:34:07
|
||||
** Retrieved : 11/6/98 11:34:20
|
||||
**
|
||||
** ident @(#)board.h 1.2
|
||||
**
|
||||
** -----------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
#ifndef __rio_board_h__
|
||||
#define __rio_board_h__
|
||||
|
||||
/*
|
||||
** board.h contains the definitions for the *hardware* of the host cards.
|
||||
** It describes the memory overlay for the dual port RAM area.
|
||||
*/
|
||||
|
||||
#define DP_SRAM1_SIZE 0x7C00
|
||||
#define DP_SRAM2_SIZE 0x0200
|
||||
#define DP_SRAM3_SIZE 0x7000
|
||||
#define DP_SCRATCH_SIZE 0x1000
|
||||
#define DP_PARMMAP_ADDR 0x01FE /* offset into SRAM2 */
|
||||
#define DP_STARTUP_ADDR 0x01F8 /* offset into SRAM2 */
|
||||
|
||||
/*
|
||||
** The shape of the Host Control area, at offset 0x7C00, Write Only
|
||||
*/
|
||||
struct s_Ctrl {
|
||||
u8 DpCtl; /* 7C00 */
|
||||
u8 Dp_Unused2_[127];
|
||||
u8 DpIntSet; /* 7C80 */
|
||||
u8 Dp_Unused3_[127];
|
||||
u8 DpTpuReset; /* 7D00 */
|
||||
u8 Dp_Unused4_[127];
|
||||
u8 DpIntReset; /* 7D80 */
|
||||
u8 Dp_Unused5_[127];
|
||||
};
|
||||
|
||||
/*
|
||||
** The PROM data area on the host (0x7C00), Read Only
|
||||
*/
|
||||
struct s_Prom {
|
||||
u16 DpSlxCode[2];
|
||||
u16 DpRev;
|
||||
u16 Dp_Unused6_;
|
||||
u16 DpUniq[4];
|
||||
u16 DpJahre;
|
||||
u16 DpWoche;
|
||||
u16 DpHwFeature[5];
|
||||
u16 DpOemId;
|
||||
u16 DpSiggy[16];
|
||||
};
|
||||
|
||||
/*
|
||||
** Union of the Ctrl and Prom areas
|
||||
*/
|
||||
union u_CtrlProm { /* This is the control/PROM area (0x7C00) */
|
||||
struct s_Ctrl DpCtrl;
|
||||
struct s_Prom DpProm;
|
||||
};
|
||||
|
||||
/*
|
||||
** The top end of memory!
|
||||
*/
|
||||
struct s_ParmMapS { /* Area containing Parm Map Pointer */
|
||||
u8 Dp_Unused8_[DP_PARMMAP_ADDR];
|
||||
u16 DpParmMapAd;
|
||||
};
|
||||
|
||||
struct s_StartUpS {
|
||||
u8 Dp_Unused9_[DP_STARTUP_ADDR];
|
||||
u8 Dp_LongJump[0x4];
|
||||
u8 Dp_Unused10_[2];
|
||||
u8 Dp_ShortJump[0x2];
|
||||
};
|
||||
|
||||
union u_Sram2ParmMap { /* This is the top of memory (0x7E00-0x7FFF) */
|
||||
u8 DpSramMem[DP_SRAM2_SIZE];
|
||||
struct s_ParmMapS DpParmMapS;
|
||||
struct s_StartUpS DpStartUpS;
|
||||
};
|
||||
|
||||
/*
|
||||
** This is the DP RAM overlay.
|
||||
*/
|
||||
struct DpRam {
|
||||
u8 DpSram1[DP_SRAM1_SIZE]; /* 0000 - 7BFF */
|
||||
union u_CtrlProm DpCtrlProm; /* 7C00 - 7DFF */
|
||||
union u_Sram2ParmMap DpSram2ParmMap; /* 7E00 - 7FFF */
|
||||
u8 DpScratch[DP_SCRATCH_SIZE]; /* 8000 - 8FFF */
|
||||
u8 DpSram3[DP_SRAM3_SIZE]; /* 9000 - FFFF */
|
||||
};
|
||||
|
||||
#define DpControl DpCtrlProm.DpCtrl.DpCtl
|
||||
#define DpSetInt DpCtrlProm.DpCtrl.DpIntSet
|
||||
#define DpResetTpu DpCtrlProm.DpCtrl.DpTpuReset
|
||||
#define DpResetInt DpCtrlProm.DpCtrl.DpIntReset
|
||||
|
||||
#define DpSlx DpCtrlProm.DpProm.DpSlxCode
|
||||
#define DpRevision DpCtrlProm.DpProm.DpRev
|
||||
#define DpUnique DpCtrlProm.DpProm.DpUniq
|
||||
#define DpYear DpCtrlProm.DpProm.DpJahre
|
||||
#define DpWeek DpCtrlProm.DpProm.DpWoche
|
||||
#define DpSignature DpCtrlProm.DpProm.DpSiggy
|
||||
|
||||
#define DpParmMapR DpSram2ParmMap.DpParmMapS.DpParmMapAd
|
||||
#define DpSram2 DpSram2ParmMap.DpSramMem
|
||||
|
||||
#endif
|
||||
|
|
@ -1,210 +0,0 @@
|
|||
/****************************************************************************
|
||||
******* *******
|
||||
******* CIRRUS.H *******
|
||||
******* *******
|
||||
****************************************************************************
|
||||
|
||||
Author : Jeremy Rolls
|
||||
Date : 3 Aug 1990
|
||||
|
||||
*
|
||||
* (C) 1990 - 2000 Specialix International Ltd., Byfleet, Surrey, UK.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
|
||||
Version : 0.01
|
||||
|
||||
|
||||
Mods
|
||||
----------------------------------------------------------------------------
|
||||
Date By Description
|
||||
----------------------------------------------------------------------------
|
||||
|
||||
***************************************************************************/
|
||||
|
||||
#ifndef _cirrus_h
|
||||
#define _cirrus_h 1
|
||||
|
||||
/* Bit fields for particular registers shared with driver */
|
||||
|
||||
/* COR1 - driver and RTA */
|
||||
#define RIOC_COR1_ODD 0x80 /* Odd parity */
|
||||
#define RIOC_COR1_EVEN 0x00 /* Even parity */
|
||||
#define RIOC_COR1_NOP 0x00 /* No parity */
|
||||
#define RIOC_COR1_FORCE 0x20 /* Force parity */
|
||||
#define RIOC_COR1_NORMAL 0x40 /* With parity */
|
||||
#define RIOC_COR1_1STOP 0x00 /* 1 stop bit */
|
||||
#define RIOC_COR1_15STOP 0x04 /* 1.5 stop bits */
|
||||
#define RIOC_COR1_2STOP 0x08 /* 2 stop bits */
|
||||
#define RIOC_COR1_5BITS 0x00 /* 5 data bits */
|
||||
#define RIOC_COR1_6BITS 0x01 /* 6 data bits */
|
||||
#define RIOC_COR1_7BITS 0x02 /* 7 data bits */
|
||||
#define RIOC_COR1_8BITS 0x03 /* 8 data bits */
|
||||
|
||||
#define RIOC_COR1_HOST 0xef /* Safe host bits */
|
||||
|
||||
/* RTA only */
|
||||
#define RIOC_COR1_CINPCK 0x00 /* Check parity of received characters */
|
||||
#define RIOC_COR1_CNINPCK 0x10 /* Don't check parity */
|
||||
|
||||
/* COR2 bits for both RTA and driver use */
|
||||
#define RIOC_COR2_IXANY 0x80 /* IXANY - any character is XON */
|
||||
#define RIOC_COR2_IXON 0x40 /* IXON - enable tx soft flowcontrol */
|
||||
#define RIOC_COR2_RTSFLOW 0x02 /* Enable tx hardware flow control */
|
||||
|
||||
/* Additional driver bits */
|
||||
#define RIOC_COR2_HUPCL 0x20 /* Hang up on close */
|
||||
#define RIOC_COR2_CTSFLOW 0x04 /* Enable rx hardware flow control */
|
||||
#define RIOC_COR2_IXOFF 0x01 /* Enable rx software flow control */
|
||||
#define RIOC_COR2_DTRFLOW 0x08 /* Enable tx hardware flow control */
|
||||
|
||||
/* RTA use only */
|
||||
#define RIOC_COR2_ETC 0x20 /* Embedded transmit options */
|
||||
#define RIOC_COR2_LOCAL 0x10 /* Local loopback mode */
|
||||
#define RIOC_COR2_REMOTE 0x08 /* Remote loopback mode */
|
||||
#define RIOC_COR2_HOST 0xc2 /* Safe host bits */
|
||||
|
||||
/* COR3 - RTA use only */
|
||||
#define RIOC_COR3_SCDRNG 0x80 /* Enable special char detect for range */
|
||||
#define RIOC_COR3_SCD34 0x40 /* Special character detect for SCHR's 3 + 4 */
|
||||
#define RIOC_COR3_FCT 0x20 /* Flow control transparency */
|
||||
#define RIOC_COR3_SCD12 0x10 /* Special character detect for SCHR's 1 + 2 */
|
||||
#define RIOC_COR3_FIFO12 0x0c /* 12 chars for receive FIFO threshold */
|
||||
#define RIOC_COR3_FIFO10 0x0a /* 10 chars for receive FIFO threshold */
|
||||
#define RIOC_COR3_FIFO8 0x08 /* 8 chars for receive FIFO threshold */
|
||||
#define RIOC_COR3_FIFO6 0x06 /* 6 chars for receive FIFO threshold */
|
||||
|
||||
#define RIOC_COR3_THRESHOLD RIOC_COR3_FIFO8 /* MUST BE LESS THAN MCOR_THRESHOLD */
|
||||
|
||||
#define RIOC_COR3_DEFAULT (RIOC_COR3_FCT | RIOC_COR3_THRESHOLD)
|
||||
/* Default bits for COR3 */
|
||||
|
||||
/* COR4 driver and RTA use */
|
||||
#define RIOC_COR4_IGNCR 0x80 /* Throw away CR's on input */
|
||||
#define RIOC_COR4_ICRNL 0x40 /* Map CR -> NL on input */
|
||||
#define RIOC_COR4_INLCR 0x20 /* Map NL -> CR on input */
|
||||
#define RIOC_COR4_IGNBRK 0x10 /* Ignore Break */
|
||||
#define RIOC_COR4_NBRKINT 0x08 /* No interrupt on break (-BRKINT) */
|
||||
#define RIOC_COR4_RAISEMOD 0x01 /* Raise modem output lines on non-zero baud */
|
||||
|
||||
|
||||
/* COR4 driver only */
|
||||
#define RIOC_COR4_IGNPAR 0x04 /* IGNPAR (ignore characters with errors) */
|
||||
#define RIOC_COR4_PARMRK 0x02 /* PARMRK */
|
||||
|
||||
#define RIOC_COR4_HOST 0xf8 /* Safe host bits */
|
||||
|
||||
/* COR4 RTA only */
|
||||
#define RIOC_COR4_CIGNPAR 0x02 /* Thrown away bad characters */
|
||||
#define RIOC_COR4_CPARMRK 0x04 /* PARMRK characters */
|
||||
#define RIOC_COR4_CNPARMRK 0x03 /* Don't PARMRK */
|
||||
|
||||
/* COR5 driver and RTA use */
|
||||
#define RIOC_COR5_ISTRIP 0x80 /* Strip input chars to 7 bits */
|
||||
#define RIOC_COR5_LNE 0x40 /* Enable LNEXT processing */
|
||||
#define RIOC_COR5_CMOE 0x20 /* Match good and errored characters */
|
||||
#define RIOC_COR5_ONLCR 0x02 /* NL -> CR NL on output */
|
||||
#define RIOC_COR5_OCRNL 0x01 /* CR -> NL on output */
|
||||
|
||||
/*
|
||||
** Spare bits - these are not used in the CIRRUS registers, so we use
|
||||
** them to set various other features.
|
||||
*/
|
||||
/*
|
||||
** tstop and tbusy indication
|
||||
*/
|
||||
#define RIOC_COR5_TSTATE_ON 0x08 /* Turn on monitoring of tbusy and tstop */
|
||||
#define RIOC_COR5_TSTATE_OFF 0x04 /* Turn off monitoring of tbusy and tstop */
|
||||
/*
|
||||
** TAB3
|
||||
*/
|
||||
#define RIOC_COR5_TAB3 0x10 /* TAB3 mode */
|
||||
|
||||
#define RIOC_COR5_HOST 0xc3 /* Safe host bits */
|
||||
|
||||
/* CCSR */
|
||||
#define RIOC_CCSR_TXFLOFF 0x04 /* Tx is xoffed */
|
||||
|
||||
/* MSVR1 */
|
||||
/* NB. DTR / CD swapped from Cirrus spec as the pins are also reversed on the
|
||||
RTA. This is because otherwise DCD would get lost on the 1 parallel / 3
|
||||
serial option.
|
||||
*/
|
||||
#define RIOC_MSVR1_CD 0x80 /* CD (DSR on Cirrus) */
|
||||
#define RIOC_MSVR1_RTS 0x40 /* RTS (CTS on Cirrus) */
|
||||
#define RIOC_MSVR1_RI 0x20 /* RI */
|
||||
#define RIOC_MSVR1_DTR 0x10 /* DTR (CD on Cirrus) */
|
||||
#define RIOC_MSVR1_CTS 0x01 /* CTS output pin (RTS on Cirrus) */
|
||||
/* Next two used to indicate state of tbusy and tstop to driver */
|
||||
#define RIOC_MSVR1_TSTOP 0x08 /* Set if port flow controlled */
|
||||
#define RIOC_MSVR1_TEMPTY 0x04 /* Set if port tx buffer empty */
|
||||
|
||||
#define RIOC_MSVR1_HOST 0xf3 /* The bits the host wants */
|
||||
|
||||
/* Defines for the subscripts of a CONFIG packet */
|
||||
#define RIOC_CONFIG_COR1 1 /* Option register 1 */
|
||||
#define RIOC_CONFIG_COR2 2 /* Option register 2 */
|
||||
#define RIOC_CONFIG_COR4 3 /* Option register 4 */
|
||||
#define RIOC_CONFIG_COR5 4 /* Option register 5 */
|
||||
#define RIOC_CONFIG_TXXON 5 /* Tx XON character */
|
||||
#define RIOC_CONFIG_TXXOFF 6 /* Tx XOFF character */
|
||||
#define RIOC_CONFIG_RXXON 7 /* Rx XON character */
|
||||
#define RIOC_CONFIG_RXXOFF 8 /* Rx XOFF character */
|
||||
#define RIOC_CONFIG_LNEXT 9 /* LNEXT character */
|
||||
#define RIOC_CONFIG_TXBAUD 10 /* Tx baud rate */
|
||||
#define RIOC_CONFIG_RXBAUD 11 /* Rx baud rate */
|
||||
|
||||
#define RIOC_PRE_EMPTIVE 0x80 /* Pre-emptive bit in command field */
|
||||
|
||||
/* Packet types going from Host to remote - with the exception of OPEN, MOPEN,
|
||||
CONFIG, SBREAK and MEMDUMP the remaining bytes of the data array will not
|
||||
be used
|
||||
*/
|
||||
#define RIOC_OPEN 0x00 /* Open a port */
|
||||
#define RIOC_CONFIG 0x01 /* Configure a port */
|
||||
#define RIOC_MOPEN 0x02 /* Modem open (block for DCD) */
|
||||
#define RIOC_CLOSE 0x03 /* Close a port */
|
||||
#define RIOC_WFLUSH (0x04 | RIOC_PRE_EMPTIVE) /* Write flush */
|
||||
#define RIOC_RFLUSH (0x05 | RIOC_PRE_EMPTIVE) /* Read flush */
|
||||
#define RIOC_RESUME (0x06 | RIOC_PRE_EMPTIVE) /* Resume if xoffed */
|
||||
#define RIOC_SBREAK 0x07 /* Start break */
|
||||
#define RIOC_EBREAK 0x08 /* End break */
|
||||
#define RIOC_SUSPEND (0x09 | RIOC_PRE_EMPTIVE) /* Susp op (behave as tho xoffed) */
|
||||
#define RIOC_FCLOSE (0x0a | RIOC_PRE_EMPTIVE) /* Force close */
|
||||
#define RIOC_XPRINT 0x0b /* Xprint packet */
|
||||
#define RIOC_MBIS (0x0c | RIOC_PRE_EMPTIVE) /* Set modem lines */
|
||||
#define RIOC_MBIC (0x0d | RIOC_PRE_EMPTIVE) /* Clear modem lines */
|
||||
#define RIOC_MSET (0x0e | RIOC_PRE_EMPTIVE) /* Set modem lines */
|
||||
#define RIOC_PCLOSE 0x0f /* Pseudo close - Leaves rx/tx enabled */
|
||||
#define RIOC_MGET (0x10 | RIOC_PRE_EMPTIVE) /* Force update of modem status */
|
||||
#define RIOC_MEMDUMP (0x11 | RIOC_PRE_EMPTIVE) /* Send back mem from addr supplied */
|
||||
#define RIOC_READ_REGISTER (0x12 | RIOC_PRE_EMPTIVE) /* Read CD1400 register (debug) */
|
||||
|
||||
/* "Command" packets going from remote to host COMPLETE and MODEM_STATUS
|
||||
use data[4] / data[3] to indicate current state and modem status respectively
|
||||
*/
|
||||
|
||||
#define RIOC_COMPLETE (0x20 | RIOC_PRE_EMPTIVE)
|
||||
/* Command complete */
|
||||
#define RIOC_BREAK_RECEIVED (0x21 | RIOC_PRE_EMPTIVE)
|
||||
/* Break received */
|
||||
#define RIOC_MODEM_STATUS (0x22 | RIOC_PRE_EMPTIVE)
|
||||
/* Change in modem status */
|
||||
|
||||
/* "Command" packet that could go either way - handshake wake-up */
|
||||
#define RIOC_HANDSHAKE (0x23 | RIOC_PRE_EMPTIVE)
|
||||
/* Wake-up to HOST / RTA */
|
||||
|
||||
#endif
|
||||
|
|
@ -1,53 +0,0 @@
|
|||
/*
|
||||
** -----------------------------------------------------------------------------
|
||||
**
|
||||
** Perle Specialix driver for Linux
|
||||
** Ported from existing RIO Driver for SCO sources.
|
||||
*
|
||||
* (C) 1990 - 2000 Specialix International Ltd., Byfleet, Surrey, UK.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
**
|
||||
** Module : cmdblk.h
|
||||
** SID : 1.2
|
||||
** Last Modified : 11/6/98 11:34:09
|
||||
** Retrieved : 11/6/98 11:34:20
|
||||
**
|
||||
** ident @(#)cmdblk.h 1.2
|
||||
**
|
||||
** -----------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
#ifndef __rio_cmdblk_h__
|
||||
#define __rio_cmdblk_h__
|
||||
|
||||
/*
|
||||
** the structure of a command block, used to queue commands destined for
|
||||
** a rup.
|
||||
*/
|
||||
|
||||
struct CmdBlk {
|
||||
struct CmdBlk *NextP; /* Pointer to next command block */
|
||||
struct PKT Packet; /* A packet, to copy to the rup */
|
||||
/* The func to call to check if OK */
|
||||
int (*PreFuncP) (unsigned long, struct CmdBlk *);
|
||||
int PreArg; /* The arg for the func */
|
||||
/* The func to call when completed */
|
||||
int (*PostFuncP) (unsigned long, struct CmdBlk *);
|
||||
int PostArg; /* The arg for the func */
|
||||
};
|
||||
|
||||
#define NUM_RIO_CMD_BLKS (3 * (MAX_RUP * 4 + LINKS_PER_UNIT * 4))
|
||||
#endif
|
||||
|
|
@ -1,177 +0,0 @@
|
|||
/*
|
||||
** -----------------------------------------------------------------------------
|
||||
**
|
||||
** Perle Specialix driver for Linux
|
||||
** Ported from existing RIO Driver for SCO sources.
|
||||
*
|
||||
* (C) 1990 - 2000 Specialix International Ltd., Byfleet, Surrey, UK.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
**
|
||||
** Module : cmdpkt.h
|
||||
** SID : 1.2
|
||||
** Last Modified : 11/6/98 11:34:09
|
||||
** Retrieved : 11/6/98 11:34:20
|
||||
**
|
||||
** ident @(#)cmdpkt.h 1.2
|
||||
**
|
||||
** -----------------------------------------------------------------------------
|
||||
*/
|
||||
#ifndef __rio_cmdpkt_h__
|
||||
#define __rio_cmdpkt_h__
|
||||
|
||||
/*
|
||||
** overlays for the data area of a packet. Used in both directions
|
||||
** (to build a packet to send, and to interpret a packet that arrives)
|
||||
** and is very inconvenient for MIPS, so they appear as two separate
|
||||
** structures - those used for modifying/reading packets on the card
|
||||
** and those for modifying/reading packets in real memory, which have an _M
|
||||
** suffix.
|
||||
*/
|
||||
|
||||
#define RTA_BOOT_DATA_SIZE (PKT_MAX_DATA_LEN-2)
|
||||
|
||||
/*
|
||||
** The boot information packet looks like this:
|
||||
** This structure overlays a PktCmd->CmdData structure, and so starts
|
||||
** at Data[2] in the actual pkt!
|
||||
*/
|
||||
struct BootSequence {
|
||||
u16 NumPackets;
|
||||
u16 LoadBase;
|
||||
u16 CodeSize;
|
||||
};
|
||||
|
||||
#define BOOT_SEQUENCE_LEN 8
|
||||
|
||||
struct SamTop {
|
||||
u8 Unit;
|
||||
u8 Link;
|
||||
};
|
||||
|
||||
struct CmdHdr {
|
||||
u8 PcCommand;
|
||||
union {
|
||||
u8 PcPhbNum;
|
||||
u8 PcLinkNum;
|
||||
u8 PcIDNum;
|
||||
} U0;
|
||||
};
|
||||
|
||||
|
||||
struct PktCmd {
|
||||
union {
|
||||
struct {
|
||||
struct CmdHdr CmdHdr;
|
||||
struct BootSequence PcBootSequence;
|
||||
} S1;
|
||||
struct {
|
||||
u16 PcSequence;
|
||||
u8 PcBootData[RTA_BOOT_DATA_SIZE];
|
||||
} S2;
|
||||
struct {
|
||||
u16 __crud__;
|
||||
u8 PcUniqNum[4]; /* this is really a uint. */
|
||||
u8 PcModuleTypes; /* what modules are fitted */
|
||||
} S3;
|
||||
struct {
|
||||
struct CmdHdr CmdHdr;
|
||||
u8 __undefined__;
|
||||
u8 PcModemStatus;
|
||||
u8 PcPortStatus;
|
||||
u8 PcSubCommand; /* commands like mem or register dump */
|
||||
u16 PcSubAddr; /* Address for command */
|
||||
u8 PcSubData[64]; /* Date area for command */
|
||||
} S4;
|
||||
struct {
|
||||
struct CmdHdr CmdHdr;
|
||||
u8 PcCommandText[1];
|
||||
u8 __crud__[20];
|
||||
u8 PcIDNum2; /* It had to go somewhere! */
|
||||
} S5;
|
||||
struct {
|
||||
struct CmdHdr CmdHdr;
|
||||
struct SamTop Topology[LINKS_PER_UNIT];
|
||||
} S6;
|
||||
} U1;
|
||||
};
|
||||
|
||||
struct PktCmd_M {
|
||||
union {
|
||||
struct {
|
||||
struct {
|
||||
u8 PcCommand;
|
||||
union {
|
||||
u8 PcPhbNum;
|
||||
u8 PcLinkNum;
|
||||
u8 PcIDNum;
|
||||
} U0;
|
||||
} CmdHdr;
|
||||
struct {
|
||||
u16 NumPackets;
|
||||
u16 LoadBase;
|
||||
u16 CodeSize;
|
||||
} PcBootSequence;
|
||||
} S1;
|
||||
struct {
|
||||
u16 PcSequence;
|
||||
u8 PcBootData[RTA_BOOT_DATA_SIZE];
|
||||
} S2;
|
||||
struct {
|
||||
u16 __crud__;
|
||||
u8 PcUniqNum[4]; /* this is really a uint. */
|
||||
u8 PcModuleTypes; /* what modules are fitted */
|
||||
} S3;
|
||||
struct {
|
||||
u16 __cmd_hdr__;
|
||||
u8 __undefined__;
|
||||
u8 PcModemStatus;
|
||||
u8 PcPortStatus;
|
||||
u8 PcSubCommand;
|
||||
u16 PcSubAddr;
|
||||
u8 PcSubData[64];
|
||||
} S4;
|
||||
struct {
|
||||
u16 __cmd_hdr__;
|
||||
u8 PcCommandText[1];
|
||||
u8 __crud__[20];
|
||||
u8 PcIDNum2; /* Tacked on end */
|
||||
} S5;
|
||||
struct {
|
||||
u16 __cmd_hdr__;
|
||||
struct Top Topology[LINKS_PER_UNIT];
|
||||
} S6;
|
||||
} U1;
|
||||
};
|
||||
|
||||
#define Command U1.S1.CmdHdr.PcCommand
|
||||
#define PhbNum U1.S1.CmdHdr.U0.PcPhbNum
|
||||
#define IDNum U1.S1.CmdHdr.U0.PcIDNum
|
||||
#define IDNum2 U1.S5.PcIDNum2
|
||||
#define LinkNum U1.S1.CmdHdr.U0.PcLinkNum
|
||||
#define Sequence U1.S2.PcSequence
|
||||
#define BootData U1.S2.PcBootData
|
||||
#define BootSequence U1.S1.PcBootSequence
|
||||
#define UniqNum U1.S3.PcUniqNum
|
||||
#define ModemStatus U1.S4.PcModemStatus
|
||||
#define PortStatus U1.S4.PcPortStatus
|
||||
#define SubCommand U1.S4.PcSubCommand
|
||||
#define SubAddr U1.S4.PcSubAddr
|
||||
#define SubData U1.S4.PcSubData
|
||||
#define CommandText U1.S5.PcCommandText
|
||||
#define RouteTopology U1.S6.Topology
|
||||
#define ModuleTypes U1.S3.PcModuleTypes
|
||||
|
||||
#endif
|
||||
|
|
@ -1,307 +0,0 @@
|
|||
/*
|
||||
** -----------------------------------------------------------------------------
|
||||
**
|
||||
** Perle Specialix driver for Linux
|
||||
** Ported from existing RIO Driver for SCO sources.
|
||||
*
|
||||
* (C) 1990 - 2000 Specialix International Ltd., Byfleet, Surrey, UK.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
**
|
||||
** Module : daemon.h
|
||||
** SID : 1.3
|
||||
** Last Modified : 11/6/98 11:34:09
|
||||
** Retrieved : 11/6/98 11:34:21
|
||||
**
|
||||
** ident @(#)daemon.h 1.3
|
||||
**
|
||||
** -----------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
#ifndef __rio_daemon_h__
|
||||
#define __rio_daemon_h__
|
||||
|
||||
|
||||
/*
|
||||
** structures used on /dev/rio
|
||||
*/
|
||||
|
||||
struct Error {
|
||||
unsigned int Error;
|
||||
unsigned int Entry;
|
||||
unsigned int Other;
|
||||
};
|
||||
|
||||
struct DownLoad {
|
||||
char __user *DataP;
|
||||
unsigned int Count;
|
||||
unsigned int ProductCode;
|
||||
};
|
||||
|
||||
/*
|
||||
** A few constants....
|
||||
*/
|
||||
#ifndef MAX_VERSION_LEN
|
||||
#define MAX_VERSION_LEN 256
|
||||
#endif
|
||||
|
||||
#ifndef MAX_XP_CTRL_LEN
|
||||
#define MAX_XP_CTRL_LEN 16 /* ALSO IN PORT.H */
|
||||
#endif
|
||||
|
||||
struct PortSetup {
|
||||
unsigned int From; /* Set/Clear XP & IXANY Control from this port.... */
|
||||
unsigned int To; /* .... to this port */
|
||||
unsigned int XpCps; /* at this speed */
|
||||
char XpOn[MAX_XP_CTRL_LEN]; /* this is the start string */
|
||||
char XpOff[MAX_XP_CTRL_LEN]; /* this is the stop string */
|
||||
u8 IxAny; /* enable/disable IXANY */
|
||||
u8 IxOn; /* enable/disable IXON */
|
||||
u8 Lock; /* lock port params */
|
||||
u8 Store; /* store params across closes */
|
||||
u8 Drain; /* close only when drained */
|
||||
};
|
||||
|
||||
struct LpbReq {
|
||||
unsigned int Host;
|
||||
unsigned int Link;
|
||||
struct LPB __user *LpbP;
|
||||
};
|
||||
|
||||
struct RupReq {
|
||||
unsigned int HostNum;
|
||||
unsigned int RupNum;
|
||||
struct RUP __user *RupP;
|
||||
};
|
||||
|
||||
struct PortReq {
|
||||
unsigned int SysPort;
|
||||
struct Port __user *PortP;
|
||||
};
|
||||
|
||||
struct StreamInfo {
|
||||
unsigned int SysPort;
|
||||
int RQueue;
|
||||
int WQueue;
|
||||
};
|
||||
|
||||
struct HostReq {
|
||||
unsigned int HostNum;
|
||||
struct Host __user *HostP;
|
||||
};
|
||||
|
||||
struct HostDpRam {
|
||||
unsigned int HostNum;
|
||||
struct DpRam __user *DpRamP;
|
||||
};
|
||||
|
||||
struct DebugCtrl {
|
||||
unsigned int SysPort;
|
||||
unsigned int Debug;
|
||||
unsigned int Wait;
|
||||
};
|
||||
|
||||
struct MapInfo {
|
||||
unsigned int FirstPort; /* 8 ports, starting from this (tty) number */
|
||||
unsigned int RtaUnique; /* reside on this RTA (unique number) */
|
||||
};
|
||||
|
||||
struct MapIn {
|
||||
unsigned int NumEntries; /* How many port sets are we mapping? */
|
||||
struct MapInfo *MapInfoP; /* Pointer to (user space) info */
|
||||
};
|
||||
|
||||
struct SendPack {
|
||||
unsigned int PortNum;
|
||||
unsigned char Len;
|
||||
unsigned char Data[PKT_MAX_DATA_LEN];
|
||||
};
|
||||
|
||||
struct SpecialRupCmd {
|
||||
struct PKT Packet;
|
||||
unsigned short Host;
|
||||
unsigned short RupNum;
|
||||
};
|
||||
|
||||
struct IdentifyRta {
|
||||
unsigned long RtaUnique;
|
||||
u8 ID;
|
||||
};
|
||||
|
||||
struct KillNeighbour {
|
||||
unsigned long UniqueNum;
|
||||
u8 Link;
|
||||
};
|
||||
|
||||
struct rioVersion {
|
||||
char version[MAX_VERSION_LEN];
|
||||
char relid[MAX_VERSION_LEN];
|
||||
int buildLevel;
|
||||
char buildDate[MAX_VERSION_LEN];
|
||||
};
|
||||
|
||||
|
||||
/*
|
||||
** RIOC commands are for the daemon type operations
|
||||
**
|
||||
** 09.12.1998 ARG - ESIL 0776 part fix
|
||||
** Definition for 'RIOC' also appears in rioioctl.h, so we'd better do a
|
||||
** #ifndef here first.
|
||||
** rioioctl.h also now has #define 'RIO_QUICK_CHECK' as this ioctl is now
|
||||
** allowed to be used by customers.
|
||||
*/
|
||||
#ifndef RIOC
|
||||
#define RIOC ('R'<<8)|('i'<<16)|('o'<<24)
|
||||
#endif
|
||||
|
||||
/*
|
||||
** Boot stuff
|
||||
*/
|
||||
#define RIO_GET_TABLE (RIOC | 100)
|
||||
#define RIO_PUT_TABLE (RIOC | 101)
|
||||
#define RIO_ASSIGN_RTA (RIOC | 102)
|
||||
#define RIO_DELETE_RTA (RIOC | 103)
|
||||
#define RIO_HOST_FOAD (RIOC | 104)
|
||||
#define RIO_QUICK_CHECK (RIOC | 105)
|
||||
#define RIO_SIGNALS_ON (RIOC | 106)
|
||||
#define RIO_SIGNALS_OFF (RIOC | 107)
|
||||
#define RIO_CHANGE_NAME (RIOC | 108)
|
||||
#define RIO_DOWNLOAD (RIOC | 109)
|
||||
#define RIO_GET_LOG (RIOC | 110)
|
||||
#define RIO_SETUP_PORTS (RIOC | 111)
|
||||
#define RIO_ALL_MODEM (RIOC | 112)
|
||||
|
||||
/*
|
||||
** card state, debug stuff
|
||||
*/
|
||||
#define RIO_NUM_HOSTS (RIOC | 120)
|
||||
#define RIO_HOST_LPB (RIOC | 121)
|
||||
#define RIO_HOST_RUP (RIOC | 122)
|
||||
#define RIO_HOST_PORT (RIOC | 123)
|
||||
#define RIO_PARMS (RIOC | 124)
|
||||
#define RIO_HOST_REQ (RIOC | 125)
|
||||
#define RIO_READ_CONFIG (RIOC | 126)
|
||||
#define RIO_SET_CONFIG (RIOC | 127)
|
||||
#define RIO_VERSID (RIOC | 128)
|
||||
#define RIO_FLAGS (RIOC | 129)
|
||||
#define RIO_SETDEBUG (RIOC | 130)
|
||||
#define RIO_GETDEBUG (RIOC | 131)
|
||||
#define RIO_READ_LEVELS (RIOC | 132)
|
||||
#define RIO_SET_FAST_BUS (RIOC | 133)
|
||||
#define RIO_SET_SLOW_BUS (RIOC | 134)
|
||||
#define RIO_SET_BYTE_MODE (RIOC | 135)
|
||||
#define RIO_SET_WORD_MODE (RIOC | 136)
|
||||
#define RIO_STREAM_INFO (RIOC | 137)
|
||||
#define RIO_START_POLLER (RIOC | 138)
|
||||
#define RIO_STOP_POLLER (RIOC | 139)
|
||||
#define RIO_LAST_ERROR (RIOC | 140)
|
||||
#define RIO_TICK (RIOC | 141)
|
||||
#define RIO_TOCK (RIOC | 241) /* I did this on purpose, you know. */
|
||||
#define RIO_SEND_PACKET (RIOC | 142)
|
||||
#define RIO_SET_BUSY (RIOC | 143)
|
||||
#define SPECIAL_RUP_CMD (RIOC | 144)
|
||||
#define RIO_FOAD_RTA (RIOC | 145)
|
||||
#define RIO_ZOMBIE_RTA (RIOC | 146)
|
||||
#define RIO_IDENTIFY_RTA (RIOC | 147)
|
||||
#define RIO_KILL_NEIGHBOUR (RIOC | 148)
|
||||
#define RIO_DEBUG_MEM (RIOC | 149)
|
||||
/*
|
||||
** 150 - 167 used..... See below
|
||||
*/
|
||||
#define RIO_GET_PORT_SETUP (RIOC | 168)
|
||||
#define RIO_RESUME (RIOC | 169)
|
||||
#define RIO_MESG (RIOC | 170)
|
||||
#define RIO_NO_MESG (RIOC | 171)
|
||||
#define RIO_WHAT_MESG (RIOC | 172)
|
||||
#define RIO_HOST_DPRAM (RIOC | 173)
|
||||
#define RIO_MAP_B50_TO_50 (RIOC | 174)
|
||||
#define RIO_MAP_B50_TO_57600 (RIOC | 175)
|
||||
#define RIO_MAP_B110_TO_110 (RIOC | 176)
|
||||
#define RIO_MAP_B110_TO_115200 (RIOC | 177)
|
||||
#define RIO_GET_PORT_PARAMS (RIOC | 178)
|
||||
#define RIO_SET_PORT_PARAMS (RIOC | 179)
|
||||
#define RIO_GET_PORT_TTY (RIOC | 180)
|
||||
#define RIO_SET_PORT_TTY (RIOC | 181)
|
||||
#define RIO_SYSLOG_ONLY (RIOC | 182)
|
||||
#define RIO_SYSLOG_CONS (RIOC | 183)
|
||||
#define RIO_CONS_ONLY (RIOC | 184)
|
||||
#define RIO_BLOCK_OPENS (RIOC | 185)
|
||||
|
||||
/*
|
||||
** 02.03.1999 ARG - ESIL 0820 fix :
|
||||
** RIOBootMode is no longer use by the driver, so these ioctls
|
||||
** are now obsolete :
|
||||
**
|
||||
#define RIO_GET_BOOT_MODE (RIOC | 186)
|
||||
#define RIO_SET_BOOT_MODE (RIOC | 187)
|
||||
**
|
||||
*/
|
||||
|
||||
#define RIO_MEM_DUMP (RIOC | 189)
|
||||
#define RIO_READ_REGISTER (RIOC | 190)
|
||||
#define RIO_GET_MODTYPE (RIOC | 191)
|
||||
#define RIO_SET_TIMER (RIOC | 192)
|
||||
#define RIO_READ_CHECK (RIOC | 196)
|
||||
#define RIO_WAITING_FOR_RESTART (RIOC | 197)
|
||||
#define RIO_BIND_RTA (RIOC | 198)
|
||||
#define RIO_GET_BINDINGS (RIOC | 199)
|
||||
#define RIO_PUT_BINDINGS (RIOC | 200)
|
||||
|
||||
#define RIO_MAKE_DEV (RIOC | 201)
|
||||
#define RIO_MINOR (RIOC | 202)
|
||||
|
||||
#define RIO_IDENTIFY_DRIVER (RIOC | 203)
|
||||
#define RIO_DISPLAY_HOST_CFG (RIOC | 204)
|
||||
|
||||
|
||||
/*
|
||||
** MAKE_DEV / MINOR stuff
|
||||
*/
|
||||
#define RIO_DEV_DIRECT 0x0000
|
||||
#define RIO_DEV_MODEM 0x0200
|
||||
#define RIO_DEV_XPRINT 0x0400
|
||||
#define RIO_DEV_MASK 0x0600
|
||||
|
||||
/*
|
||||
** port management, xprint stuff
|
||||
*/
|
||||
#define rIOCN(N) (RIOC|(N))
|
||||
#define rIOCR(N,T) (RIOC|(N))
|
||||
#define rIOCW(N,T) (RIOC|(N))
|
||||
|
||||
#define RIO_GET_XP_ON rIOCR(150,char[16]) /* start xprint string */
|
||||
#define RIO_SET_XP_ON rIOCW(151,char[16])
|
||||
#define RIO_GET_XP_OFF rIOCR(152,char[16]) /* finish xprint string */
|
||||
#define RIO_SET_XP_OFF rIOCW(153,char[16])
|
||||
#define RIO_GET_XP_CPS rIOCR(154,int) /* xprint CPS */
|
||||
#define RIO_SET_XP_CPS rIOCW(155,int)
|
||||
#define RIO_GET_IXANY rIOCR(156,int) /* ixany allowed? */
|
||||
#define RIO_SET_IXANY rIOCW(157,int)
|
||||
#define RIO_SET_IXANY_ON rIOCN(158) /* allow ixany */
|
||||
#define RIO_SET_IXANY_OFF rIOCN(159) /* disallow ixany */
|
||||
#define RIO_GET_MODEM rIOCR(160,int) /* port is modem/direct line? */
|
||||
#define RIO_SET_MODEM rIOCW(161,int)
|
||||
#define RIO_SET_MODEM_ON rIOCN(162) /* port is a modem */
|
||||
#define RIO_SET_MODEM_OFF rIOCN(163) /* port is direct */
|
||||
#define RIO_GET_IXON rIOCR(164,int) /* ixon allowed? */
|
||||
#define RIO_SET_IXON rIOCW(165,int)
|
||||
#define RIO_SET_IXON_ON rIOCN(166) /* allow ixon */
|
||||
#define RIO_SET_IXON_OFF rIOCN(167) /* disallow ixon */
|
||||
|
||||
#define RIO_GET_SIVIEW ((('s')<<8) | 106) /* backwards compatible with SI */
|
||||
|
||||
#define RIO_IOCTL_UNKNOWN -2
|
||||
|
||||
#endif
|
||||
|
|
@ -1,98 +0,0 @@
|
|||
/*
|
||||
** -----------------------------------------------------------------------------
|
||||
**
|
||||
** Perle Specialix driver for Linux
|
||||
** Ported from existing RIO Driver for SCO sources.
|
||||
*
|
||||
* (C) 1990 - 2000 Specialix International Ltd., Byfleet, Surrey, UK.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
**
|
||||
** Module : errors.h
|
||||
** SID : 1.2
|
||||
** Last Modified : 11/6/98 11:34:10
|
||||
** Retrieved : 11/6/98 11:34:21
|
||||
**
|
||||
** ident @(#)errors.h 1.2
|
||||
**
|
||||
** -----------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
#ifndef __rio_errors_h__
|
||||
#define __rio_errors_h__
|
||||
|
||||
/*
|
||||
** error codes
|
||||
*/
|
||||
|
||||
#define NOTHING_WRONG_AT_ALL 0
|
||||
#define BAD_CHARACTER_IN_NAME 1
|
||||
#define TABLE_ENTRY_ISNT_PROPERLY_NULL 2
|
||||
#define UNKNOWN_HOST_NUMBER 3
|
||||
#define ZERO_RTA_ID 4
|
||||
#define BAD_RTA_ID 5
|
||||
#define DUPLICATED_RTA_ID 6
|
||||
#define DUPLICATE_UNIQUE_NUMBER 7
|
||||
#define BAD_TTY_NUMBER 8
|
||||
#define TTY_NUMBER_IN_USE 9
|
||||
#define NAME_USED_TWICE 10
|
||||
#define HOST_ID_NOT_ZERO 11
|
||||
#define BOOT_IN_PROGRESS 12
|
||||
#define COPYIN_FAILED 13
|
||||
#define HOST_FILE_TOO_LARGE 14
|
||||
#define COPYOUT_FAILED 15
|
||||
#define NOT_SUPER_USER 16
|
||||
#define RIO_ALREADY_POLLING 17
|
||||
|
||||
#define ID_NUMBER_OUT_OF_RANGE 18
|
||||
#define PORT_NUMBER_OUT_OF_RANGE 19
|
||||
#define HOST_NUMBER_OUT_OF_RANGE 20
|
||||
#define RUP_NUMBER_OUT_OF_RANGE 21
|
||||
#define TTY_NUMBER_OUT_OF_RANGE 22
|
||||
#define LINK_NUMBER_OUT_OF_RANGE 23
|
||||
|
||||
#define HOST_NOT_RUNNING 24
|
||||
#define IOCTL_COMMAND_UNKNOWN 25
|
||||
#define RIO_SYSTEM_HALTED 26
|
||||
#define WAIT_FOR_DRAIN_BROKEN 27
|
||||
#define PORT_NOT_MAPPED_INTO_SYSTEM 28
|
||||
#define EXCLUSIVE_USE_SET 29
|
||||
#define WAIT_FOR_NOT_CLOSING_BROKEN 30
|
||||
#define WAIT_FOR_PORT_TO_OPEN_BROKEN 31
|
||||
#define WAIT_FOR_CARRIER_BROKEN 32
|
||||
#define WAIT_FOR_NOT_IN_USE_BROKEN 33
|
||||
#define WAIT_FOR_CAN_ADD_COMMAND_BROKEN 34
|
||||
#define WAIT_FOR_ADD_COMMAND_BROKEN 35
|
||||
#define WAIT_FOR_NOT_PARAM_BROKEN 36
|
||||
#define WAIT_FOR_RETRY_BROKEN 37
|
||||
#define HOST_HAS_ALREADY_BEEN_BOOTED 38
|
||||
#define UNIT_IS_IN_USE 39
|
||||
#define COULDNT_FIND_ENTRY 40
|
||||
#define RTA_UNIQUE_NUMBER_ZERO 41
|
||||
#define CLOSE_COMMAND_FAILED 42
|
||||
#define WAIT_FOR_CLOSE_BROKEN 43
|
||||
#define CPS_VALUE_OUT_OF_RANGE 44
|
||||
#define ID_ALREADY_IN_USE 45
|
||||
#define SIGNALS_ALREADY_SET 46
|
||||
#define NOT_RECEIVING_PROCESS 47
|
||||
#define RTA_NUMBER_WRONG 48
|
||||
#define NO_SUCH_PRODUCT 49
|
||||
#define HOST_SYSPORT_BAD 50
|
||||
#define ID_NOT_TENTATIVE 51
|
||||
#define XPRINT_CPS_OUT_OF_RANGE 52
|
||||
#define NOT_ENOUGH_CORE_FOR_PCI_COPY 53
|
||||
|
||||
|
||||
#endif /* __rio_errors_h__ */
|
||||
|
|
@ -1,143 +0,0 @@
|
|||
/*
|
||||
** -----------------------------------------------------------------------------
|
||||
**
|
||||
** Perle Specialix driver for Linux
|
||||
** Ported from existing RIO Driver for SCO sources.
|
||||
*
|
||||
* (C) 1990 - 2000 Specialix International Ltd., Byfleet, Surrey, UK.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
**
|
||||
** Module : func.h
|
||||
** SID : 1.3
|
||||
** Last Modified : 11/6/98 11:34:10
|
||||
** Retrieved : 11/6/98 11:34:21
|
||||
**
|
||||
** ident @(#)func.h 1.3
|
||||
**
|
||||
** -----------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
#ifndef __func_h_def
|
||||
#define __func_h_def
|
||||
|
||||
#include <linux/kdev_t.h>
|
||||
|
||||
/* rioboot.c */
|
||||
int RIOBootCodeRTA(struct rio_info *, struct DownLoad *);
|
||||
int RIOBootCodeHOST(struct rio_info *, struct DownLoad *);
|
||||
int RIOBootCodeUNKNOWN(struct rio_info *, struct DownLoad *);
|
||||
void msec_timeout(struct Host *);
|
||||
int RIOBootRup(struct rio_info *, unsigned int, struct Host *, struct PKT __iomem *);
|
||||
int RIOBootOk(struct rio_info *, struct Host *, unsigned long);
|
||||
int RIORtaBound(struct rio_info *, unsigned int);
|
||||
void rio_fill_host_slot(int, int, unsigned int, struct Host *);
|
||||
|
||||
/* riocmd.c */
|
||||
int RIOFoadRta(struct Host *, struct Map *);
|
||||
int RIOZombieRta(struct Host *, struct Map *);
|
||||
int RIOCommandRta(struct rio_info *, unsigned long, int (*func) (struct Host *, struct Map *));
|
||||
int RIOIdentifyRta(struct rio_info *, void __user *);
|
||||
int RIOKillNeighbour(struct rio_info *, void __user *);
|
||||
int RIOSuspendBootRta(struct Host *, int, int);
|
||||
int RIOFoadWakeup(struct rio_info *);
|
||||
struct CmdBlk *RIOGetCmdBlk(void);
|
||||
void RIOFreeCmdBlk(struct CmdBlk *);
|
||||
int RIOQueueCmdBlk(struct Host *, unsigned int, struct CmdBlk *);
|
||||
void RIOPollHostCommands(struct rio_info *, struct Host *);
|
||||
int RIOWFlushMark(unsigned long, struct CmdBlk *);
|
||||
int RIORFlushEnable(unsigned long, struct CmdBlk *);
|
||||
int RIOUnUse(unsigned long, struct CmdBlk *);
|
||||
|
||||
/* rioctrl.c */
|
||||
int riocontrol(struct rio_info *, dev_t, int, unsigned long, int);
|
||||
|
||||
int RIOPreemptiveCmd(struct rio_info *, struct Port *, unsigned char);
|
||||
|
||||
/* rioinit.c */
|
||||
void rioinit(struct rio_info *, struct RioHostInfo *);
|
||||
void RIOInitHosts(struct rio_info *, struct RioHostInfo *);
|
||||
void RIOISAinit(struct rio_info *, int);
|
||||
int RIODoAT(struct rio_info *, int, int);
|
||||
caddr_t RIOCheckForATCard(int);
|
||||
int RIOAssignAT(struct rio_info *, int, void __iomem *, int);
|
||||
int RIOBoardTest(unsigned long, void __iomem *, unsigned char, int);
|
||||
void RIOAllocDataStructs(struct rio_info *);
|
||||
void RIOSetupDataStructs(struct rio_info *);
|
||||
int RIODefaultName(struct rio_info *, struct Host *, unsigned int);
|
||||
struct rioVersion *RIOVersid(void);
|
||||
void RIOHostReset(unsigned int, struct DpRam __iomem *, unsigned int);
|
||||
|
||||
/* riointr.c */
|
||||
void RIOTxEnable(char *);
|
||||
void RIOServiceHost(struct rio_info *, struct Host *);
|
||||
int riotproc(struct rio_info *, struct ttystatics *, int, int);
|
||||
|
||||
/* rioparam.c */
|
||||
int RIOParam(struct Port *, int, int, int);
|
||||
int RIODelay(struct Port *PortP, int);
|
||||
int RIODelay_ni(struct Port *PortP, int);
|
||||
void ms_timeout(struct Port *);
|
||||
int can_add_transmit(struct PKT __iomem **, struct Port *);
|
||||
void add_transmit(struct Port *);
|
||||
void put_free_end(struct Host *, struct PKT __iomem *);
|
||||
int can_remove_receive(struct PKT __iomem **, struct Port *);
|
||||
void remove_receive(struct Port *);
|
||||
|
||||
/* rioroute.c */
|
||||
int RIORouteRup(struct rio_info *, unsigned int, struct Host *, struct PKT __iomem *);
|
||||
void RIOFixPhbs(struct rio_info *, struct Host *, unsigned int);
|
||||
unsigned int GetUnitType(unsigned int);
|
||||
int RIOSetChange(struct rio_info *);
|
||||
int RIOFindFreeID(struct rio_info *, struct Host *, unsigned int *, unsigned int *);
|
||||
|
||||
|
||||
/* riotty.c */
|
||||
|
||||
int riotopen(struct tty_struct *tty, struct file *filp);
|
||||
int riotclose(void *ptr);
|
||||
int riotioctl(struct rio_info *, struct tty_struct *, int, caddr_t);
|
||||
void ttyseth(struct Port *, struct ttystatics *, struct old_sgttyb *sg);
|
||||
|
||||
/* riotable.c */
|
||||
int RIONewTable(struct rio_info *);
|
||||
int RIOApel(struct rio_info *);
|
||||
int RIODeleteRta(struct rio_info *, struct Map *);
|
||||
int RIOAssignRta(struct rio_info *, struct Map *);
|
||||
int RIOReMapPorts(struct rio_info *, struct Host *, struct Map *);
|
||||
int RIOChangeName(struct rio_info *, struct Map *);
|
||||
|
||||
#if 0
|
||||
/* riodrvr.c */
|
||||
struct rio_info *rio_install(struct RioHostInfo *);
|
||||
int rio_uninstall(struct rio_info *);
|
||||
int rio_open(struct rio_info *, int, struct file *);
|
||||
int rio_close(struct rio_info *, struct file *);
|
||||
int rio_read(struct rio_info *, struct file *, char *, int);
|
||||
int rio_write(struct rio_info *, struct file *f, char *, int);
|
||||
int rio_ioctl(struct rio_info *, struct file *, int, char *);
|
||||
int rio_select(struct rio_info *, struct file *f, int, struct sel *);
|
||||
int rio_intr(char *);
|
||||
int rio_isr_thread(char *);
|
||||
struct rio_info *rio_info_store(int cmd, struct rio_info *p);
|
||||
#endif
|
||||
|
||||
extern void rio_copy_to_card(void *from, void __iomem *to, int len);
|
||||
extern int rio_minor(struct tty_struct *tty);
|
||||
extern int rio_ismodem(struct tty_struct *tty);
|
||||
|
||||
extern void rio_start_card_running(struct Host *HostP);
|
||||
|
||||
#endif /* __func_h_def */
|
||||
|
|
@ -1,123 +0,0 @@
|
|||
/*
|
||||
** -----------------------------------------------------------------------------
|
||||
**
|
||||
** Perle Specialix driver for Linux
|
||||
** Ported from existing RIO Driver for SCO sources.
|
||||
*
|
||||
* (C) 1990 - 2000 Specialix International Ltd., Byfleet, Surrey, UK.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
**
|
||||
** Module : host.h
|
||||
** SID : 1.2
|
||||
** Last Modified : 11/6/98 11:34:10
|
||||
** Retrieved : 11/6/98 11:34:21
|
||||
**
|
||||
** ident @(#)host.h 1.2
|
||||
**
|
||||
** -----------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
#ifndef __rio_host_h__
|
||||
#define __rio_host_h__
|
||||
|
||||
/*
|
||||
** the host structure - one per host card in the system.
|
||||
*/
|
||||
|
||||
#define MAX_EXTRA_UNITS 64
|
||||
|
||||
/*
|
||||
** Host data structure. This is used for the software equiv. of
|
||||
** the host.
|
||||
*/
|
||||
struct Host {
|
||||
struct pci_dev *pdev;
|
||||
unsigned char Type; /* RIO_EISA, RIO_MCA, ... */
|
||||
unsigned char Ivec; /* POLLED or ivec number */
|
||||
unsigned char Mode; /* Control stuff */
|
||||
unsigned char Slot; /* Slot */
|
||||
void __iomem *Caddr; /* KV address of DPRAM */
|
||||
struct DpRam __iomem *CardP; /* KV address of DPRAM, with overlay */
|
||||
unsigned long PaddrP; /* Phys. address of DPRAM */
|
||||
char Name[MAX_NAME_LEN]; /* The name of the host */
|
||||
unsigned int UniqueNum; /* host unique number */
|
||||
spinlock_t HostLock; /* Lock structure for MPX */
|
||||
unsigned int WorkToBeDone; /* set to true each interrupt */
|
||||
unsigned int InIntr; /* Being serviced? */
|
||||
unsigned int IntSrvDone; /* host's interrupt has been serviced */
|
||||
void (*Copy) (void *, void __iomem *, int); /* copy func */
|
||||
struct timer_list timer;
|
||||
/*
|
||||
** I M P O R T A N T !
|
||||
**
|
||||
** The rest of this data structure is cleared to zero after
|
||||
** a RIO_HOST_FOAD command.
|
||||
*/
|
||||
|
||||
unsigned long Flags; /* Whats going down */
|
||||
#define RC_WAITING 0
|
||||
#define RC_STARTUP 1
|
||||
#define RC_RUNNING 2
|
||||
#define RC_STUFFED 3
|
||||
#define RC_READY 7
|
||||
#define RUN_STATE 7
|
||||
/*
|
||||
** Boot mode applies to the way in which hosts in this system will
|
||||
** boot RTAs
|
||||
*/
|
||||
#define RC_BOOT_ALL 0x8 /* Boot all RTAs attached */
|
||||
#define RC_BOOT_OWN 0x10 /* Only boot RTAs bound to this system */
|
||||
#define RC_BOOT_NONE 0x20 /* Don't boot any RTAs (slave mode) */
|
||||
|
||||
struct Top Topology[LINKS_PER_UNIT]; /* one per link */
|
||||
struct Map Mapping[MAX_RUP]; /* Mappings for host */
|
||||
struct PHB __iomem *PhbP; /* Pointer to the PHB array */
|
||||
unsigned short __iomem *PhbNumP; /* Ptr to Number of PHB's */
|
||||
struct LPB __iomem *LinkStrP; /* Link Structure Array */
|
||||
struct RUP __iomem *RupP; /* Sixteen real rups here */
|
||||
struct PARM_MAP __iomem *ParmMapP; /* points to the parmmap */
|
||||
unsigned int ExtraUnits[MAX_EXTRA_UNITS]; /* unknown things */
|
||||
unsigned int NumExtraBooted; /* how many of the above */
|
||||
/*
|
||||
** Twenty logical rups.
|
||||
** The first sixteen are the real Rup entries (above), the last four
|
||||
** are the link RUPs.
|
||||
*/
|
||||
struct UnixRup UnixRups[MAX_RUP + LINKS_PER_UNIT];
|
||||
int timeout_id; /* For calling 100 ms delays */
|
||||
int timeout_sem; /* For calling 100 ms delays */
|
||||
unsigned long locks; /* long req'd for set_bit --RR */
|
||||
char ____end_marker____;
|
||||
};
|
||||
#define Control CardP->DpControl
|
||||
#define SetInt CardP->DpSetInt
|
||||
#define ResetTpu CardP->DpResetTpu
|
||||
#define ResetInt CardP->DpResetInt
|
||||
#define Signature CardP->DpSignature
|
||||
#define Sram1 CardP->DpSram1
|
||||
#define Sram2 CardP->DpSram2
|
||||
#define Sram3 CardP->DpSram3
|
||||
#define Scratch CardP->DpScratch
|
||||
#define __ParmMapR CardP->DpParmMapR
|
||||
#define SLX CardP->DpSlx
|
||||
#define Revision CardP->DpRevision
|
||||
#define Unique CardP->DpUnique
|
||||
#define Year CardP->DpYear
|
||||
#define Week CardP->DpWeek
|
||||
|
||||
#define RIO_DUMBPARM 0x0860 /* what not to expect */
|
||||
|
||||
#endif
|
||||
|
|
@ -1,96 +0,0 @@
|
|||
/****************************************************************************
|
||||
******* *******
|
||||
******* L I N K
|
||||
******* *******
|
||||
****************************************************************************
|
||||
|
||||
Author : Ian Nandhra / Jeremy Rolls
|
||||
Date :
|
||||
|
||||
*
|
||||
* (C) 1990 - 2000 Specialix International Ltd., Byfleet, Surrey, UK.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
|
||||
Version : 0.01
|
||||
|
||||
|
||||
Mods
|
||||
----------------------------------------------------------------------------
|
||||
Date By Description
|
||||
----------------------------------------------------------------------------
|
||||
|
||||
***************************************************************************/
|
||||
|
||||
#ifndef _link_h
|
||||
#define _link_h 1
|
||||
|
||||
/*************************************************
|
||||
* Define the Link Status stuff
|
||||
************************************************/
|
||||
/* Boot request stuff */
|
||||
#define BOOT_REQUEST ((ushort) 0) /* Request for a boot */
|
||||
#define BOOT_ABORT ((ushort) 1) /* Abort a boot */
|
||||
#define BOOT_SEQUENCE ((ushort) 2) /* Packet with the number of packets
|
||||
and load address */
|
||||
#define BOOT_COMPLETED ((ushort) 3) /* Boot completed */
|
||||
|
||||
|
||||
struct LPB {
|
||||
u16 link_number; /* Link Number */
|
||||
u16 in_ch; /* Link In Channel */
|
||||
u16 out_ch; /* Link Out Channel */
|
||||
u8 attached_serial[4]; /* Attached serial number */
|
||||
u8 attached_host_serial[4];
|
||||
/* Serial number of Host who
|
||||
booted the other end */
|
||||
u16 descheduled; /* Currently Descheduled */
|
||||
u16 state; /* Current state */
|
||||
u16 send_poll; /* Send a Poll Packet */
|
||||
u16 ltt_p; /* Process Descriptor */
|
||||
u16 lrt_p; /* Process Descriptor */
|
||||
u16 lrt_status; /* Current lrt status */
|
||||
u16 ltt_status; /* Current ltt status */
|
||||
u16 timeout; /* Timeout value */
|
||||
u16 topology; /* Topology bits */
|
||||
u16 mon_ltt;
|
||||
u16 mon_lrt;
|
||||
u16 WaitNoBoot; /* Secs to hold off booting */
|
||||
u16 add_packet_list; /* Add packets to here */
|
||||
u16 remove_packet_list; /* Send packets from here */
|
||||
|
||||
u16 lrt_fail_chan; /* Lrt's failure channel */
|
||||
u16 ltt_fail_chan; /* Ltt's failure channel */
|
||||
|
||||
/* RUP structure for HOST to driver communications */
|
||||
struct RUP rup;
|
||||
struct RUP link_rup; /* RUP for the link (POLL,
|
||||
topology etc.) */
|
||||
u16 attached_link; /* Number of attached link */
|
||||
u16 csum_errors; /* csum errors */
|
||||
u16 num_disconnects; /* number of disconnects */
|
||||
u16 num_sync_rcvd; /* # sync's received */
|
||||
u16 num_sync_rqst; /* # sync requests */
|
||||
u16 num_tx; /* Num pkts sent */
|
||||
u16 num_rx; /* Num pkts received */
|
||||
u16 module_attached; /* Module tpyes of attached */
|
||||
u16 led_timeout; /* LED timeout */
|
||||
u16 first_port; /* First port to service */
|
||||
u16 last_port; /* Last port to service */
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
/*********** end of file ***********/
|
||||
|
|
@ -1,77 +0,0 @@
|
|||
/*
|
||||
* (C) 2000 R.E.Wolff@BitWizard.nl
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
*/
|
||||
|
||||
#include <linux/interrupt.h>
|
||||
|
||||
|
||||
#define DEBUG_ALL
|
||||
|
||||
struct ttystatics {
|
||||
struct termios tm;
|
||||
};
|
||||
|
||||
extern int rio_debug;
|
||||
|
||||
#define RIO_DEBUG_INIT 0x000001
|
||||
#define RIO_DEBUG_BOOT 0x000002
|
||||
#define RIO_DEBUG_CMD 0x000004
|
||||
#define RIO_DEBUG_CTRL 0x000008
|
||||
#define RIO_DEBUG_INTR 0x000010
|
||||
#define RIO_DEBUG_PARAM 0x000020
|
||||
#define RIO_DEBUG_ROUTE 0x000040
|
||||
#define RIO_DEBUG_TABLE 0x000080
|
||||
#define RIO_DEBUG_TTY 0x000100
|
||||
#define RIO_DEBUG_FLOW 0x000200
|
||||
#define RIO_DEBUG_MODEMSIGNALS 0x000400
|
||||
#define RIO_DEBUG_PROBE 0x000800
|
||||
#define RIO_DEBUG_CLEANUP 0x001000
|
||||
#define RIO_DEBUG_IFLOW 0x002000
|
||||
#define RIO_DEBUG_PFE 0x004000
|
||||
#define RIO_DEBUG_REC 0x008000
|
||||
#define RIO_DEBUG_SPINLOCK 0x010000
|
||||
#define RIO_DEBUG_DELAY 0x020000
|
||||
#define RIO_DEBUG_MOD_COUNT 0x040000
|
||||
|
||||
|
||||
/* Copied over from riowinif.h . This is ugly. The winif file declares
|
||||
also much other stuff which is incompatible with the headers from
|
||||
the older driver. The older driver includes "brates.h" which shadows
|
||||
the definitions from Linux, and is incompatible... */
|
||||
|
||||
/* RxBaud and TxBaud definitions... */
|
||||
#define RIO_B0 0x00 /* RTS / DTR signals dropped */
|
||||
#define RIO_B50 0x01 /* 50 baud */
|
||||
#define RIO_B75 0x02 /* 75 baud */
|
||||
#define RIO_B110 0x03 /* 110 baud */
|
||||
#define RIO_B134 0x04 /* 134.5 baud */
|
||||
#define RIO_B150 0x05 /* 150 baud */
|
||||
#define RIO_B200 0x06 /* 200 baud */
|
||||
#define RIO_B300 0x07 /* 300 baud */
|
||||
#define RIO_B600 0x08 /* 600 baud */
|
||||
#define RIO_B1200 0x09 /* 1200 baud */
|
||||
#define RIO_B1800 0x0A /* 1800 baud */
|
||||
#define RIO_B2400 0x0B /* 2400 baud */
|
||||
#define RIO_B4800 0x0C /* 4800 baud */
|
||||
#define RIO_B9600 0x0D /* 9600 baud */
|
||||
#define RIO_B19200 0x0E /* 19200 baud */
|
||||
#define RIO_B38400 0x0F /* 38400 baud */
|
||||
#define RIO_B56000 0x10 /* 56000 baud */
|
||||
#define RIO_B57600 0x11 /* 57600 baud */
|
||||
#define RIO_B64000 0x12 /* 64000 baud */
|
||||
#define RIO_B115200 0x13 /* 115200 baud */
|
||||
#define RIO_B2000 0x14 /* 2000 baud */
|
||||
|
|
@ -1,98 +0,0 @@
|
|||
/*
|
||||
** -----------------------------------------------------------------------------
|
||||
**
|
||||
** Perle Specialix driver for Linux
|
||||
** Ported from existing RIO Driver for SCO sources.
|
||||
*
|
||||
* (C) 1990 - 2000 Specialix International Ltd., Byfleet, Surrey, UK.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
**
|
||||
** Module : map.h
|
||||
** SID : 1.2
|
||||
** Last Modified : 11/6/98 11:34:11
|
||||
** Retrieved : 11/6/98 11:34:21
|
||||
**
|
||||
** ident @(#)map.h 1.2
|
||||
**
|
||||
** -----------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
#ifndef __rio_map_h__
|
||||
#define __rio_map_h__
|
||||
|
||||
/*
|
||||
** mapping structure passed to and from the config.rio program to
|
||||
** determine the current topology of the world
|
||||
*/
|
||||
|
||||
#define MAX_MAP_ENTRY 17
|
||||
#define TOTAL_MAP_ENTRIES (MAX_MAP_ENTRY*RIO_SLOTS)
|
||||
#define MAX_NAME_LEN 32
|
||||
|
||||
struct Map {
|
||||
unsigned int HostUniqueNum; /* Supporting hosts unique number */
|
||||
unsigned int RtaUniqueNum; /* Unique number */
|
||||
/*
|
||||
** The next two IDs must be swapped on big-endian architectures
|
||||
** when using a v2.04 /etc/rio/config with a v3.00 driver (when
|
||||
** upgrading for example).
|
||||
*/
|
||||
unsigned short ID; /* ID used in the subnet */
|
||||
unsigned short ID2; /* ID of 2nd block of 8 for 16 port */
|
||||
unsigned long Flags; /* Booted, ID Given, Disconnected */
|
||||
unsigned long SysPort; /* First tty mapped to this port */
|
||||
struct Top Topology[LINKS_PER_UNIT]; /* ID connected to each link */
|
||||
char Name[MAX_NAME_LEN]; /* Cute name by which RTA is known */
|
||||
};
|
||||
|
||||
/*
|
||||
** Flag values:
|
||||
*/
|
||||
#define RTA_BOOTED 0x00000001
|
||||
#define RTA_NEWBOOT 0x00000010
|
||||
#define MSG_DONE 0x00000020
|
||||
#define RTA_INTERCONNECT 0x00000040
|
||||
#define RTA16_SECOND_SLOT 0x00000080
|
||||
#define BEEN_HERE 0x00000100
|
||||
#define SLOT_TENTATIVE 0x40000000
|
||||
#define SLOT_IN_USE 0x80000000
|
||||
|
||||
/*
|
||||
** HostUniqueNum is the unique number from the host card that this RTA
|
||||
** is to be connected to.
|
||||
** RtaUniqueNum is the unique number of the RTA concerned. It will be ZERO
|
||||
** if the slot in the table is unused. If it is the same as the HostUniqueNum
|
||||
** then this slot represents a host card.
|
||||
** Flags contains current boot/route state info
|
||||
** SysPort is a value in the range 0-504, being the number of the first tty
|
||||
** on this RTA. Each RTA supports 8 ports. The SysPort value must be modulo 8.
|
||||
** SysPort 0-127 correspond to /dev/ttyr001 to /dev/ttyr128, with minor
|
||||
** numbers 0-127. SysPort 128-255 correspond to /dev/ttyr129 to /dev/ttyr256,
|
||||
** again with minor numbers 0-127, and so on for SysPorts 256-383 and 384-511
|
||||
** ID will be in the range 0-16 for a `known' RTA. ID will be 0xFFFF for an
|
||||
** unused slot/unknown ID etc.
|
||||
** The Topology array contains the ID of the unit connected to each of the
|
||||
** four links on this unit. The entry will be 0xFFFF if NOTHING is connected
|
||||
** to the link, or will be 0xFF00 if an UNKNOWN unit is connected to the link.
|
||||
** The Name field is a null-terminated string, up to 31 characters, containing
|
||||
** the 'cute' name that the sysadmin/users know the RTA by. It is permissible
|
||||
** for this string to contain any character in the range \040 to \176 inclusive.
|
||||
** In particular, ctrl sequences and DEL (0x7F, \177) are not allowed. The
|
||||
** special character '%' IS allowable, and needs no special action.
|
||||
**
|
||||
*/
|
||||
|
||||
#endif
|
||||
|
|
@ -1,55 +0,0 @@
|
|||
/*
|
||||
** -----------------------------------------------------------------------------
|
||||
**
|
||||
** Perle Specialix driver for Linux
|
||||
** Ported from existing RIO Driver for SCO sources.
|
||||
*
|
||||
* (C) 1990 - 2000 Specialix International Ltd., Byfleet, Surrey, UK.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
**
|
||||
** Module : param.h
|
||||
** SID : 1.2
|
||||
** Last Modified : 11/6/98 11:34:12
|
||||
** Retrieved : 11/6/98 11:34:21
|
||||
**
|
||||
** ident @(#)param.h 1.2
|
||||
**
|
||||
** -----------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
#ifndef __rio_param_h__
|
||||
#define __rio_param_h__
|
||||
|
||||
/*
|
||||
** the param command block, as used in OPEN and PARAM calls.
|
||||
*/
|
||||
|
||||
struct phb_param {
|
||||
u8 Cmd; /* It is very important that these line up */
|
||||
u8 Cor1; /* with what is expected at the other end. */
|
||||
u8 Cor2; /* to confirm that you've got it right, */
|
||||
u8 Cor4; /* check with cirrus/cirrus.h */
|
||||
u8 Cor5;
|
||||
u8 TxXon; /* Transmit X-On character */
|
||||
u8 TxXoff; /* Transmit X-Off character */
|
||||
u8 RxXon; /* Receive X-On character */
|
||||
u8 RxXoff; /* Receive X-Off character */
|
||||
u8 LNext; /* Literal-next character */
|
||||
u8 TxBaud; /* Transmit baudrate */
|
||||
u8 RxBaud; /* Receive baudrate */
|
||||
};
|
||||
|
||||
#endif
|
||||
|
|
@ -1,81 +0,0 @@
|
|||
/****************************************************************************
|
||||
******* *******
|
||||
******* H O S T M E M O R Y M A P
|
||||
******* *******
|
||||
****************************************************************************
|
||||
|
||||
Author : Ian Nandhra / Jeremy Rolls
|
||||
Date :
|
||||
|
||||
*
|
||||
* (C) 1990 - 2000 Specialix International Ltd., Byfleet, Surrey, UK.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
|
||||
Version : 0.01
|
||||
|
||||
|
||||
Mods
|
||||
----------------------------------------------------------------------------
|
||||
Date By Description
|
||||
----------------------------------------------------------------------------
|
||||
6/4/1991 jonb Made changes to accommodate Mips R3230 bus
|
||||
***************************************************************************/
|
||||
|
||||
#ifndef _parmap_h
|
||||
#define _parmap_h
|
||||
|
||||
typedef struct PARM_MAP PARM_MAP;
|
||||
|
||||
struct PARM_MAP {
|
||||
u16 phb_ptr; /* Pointer to the PHB array */
|
||||
u16 phb_num_ptr; /* Ptr to Number of PHB's */
|
||||
u16 free_list; /* Free List pointer */
|
||||
u16 free_list_end; /* Free List End pointer */
|
||||
u16 q_free_list_ptr; /* Ptr to Q_BUF variable */
|
||||
u16 unit_id_ptr; /* Unit Id */
|
||||
u16 link_str_ptr; /* Link Structure Array */
|
||||
u16 bootloader_1; /* 1st Stage Boot Loader */
|
||||
u16 bootloader_2; /* 2nd Stage Boot Loader */
|
||||
u16 port_route_map_ptr; /* Port Route Map */
|
||||
u16 route_ptr; /* Unit Route Map */
|
||||
u16 map_present; /* Route Map present */
|
||||
s16 pkt_num; /* Total number of packets */
|
||||
s16 q_num; /* Total number of Q packets */
|
||||
u16 buffers_per_port; /* Number of buffers per port */
|
||||
u16 heap_size; /* Initial size of heap */
|
||||
u16 heap_left; /* Current Heap left */
|
||||
u16 error; /* Error code */
|
||||
u16 tx_max; /* Max number of tx pkts per phb */
|
||||
u16 rx_max; /* Max number of rx pkts per phb */
|
||||
u16 rx_limit; /* For high / low watermarks */
|
||||
s16 links; /* Links to use */
|
||||
s16 timer; /* Interrupts per second */
|
||||
u16 rups; /* Pointer to the RUPs */
|
||||
u16 max_phb; /* Mostly for debugging */
|
||||
u16 living; /* Just increments!! */
|
||||
u16 init_done; /* Initialisation over */
|
||||
u16 booting_link;
|
||||
u16 idle_count; /* Idle time counter */
|
||||
u16 busy_count; /* Busy counter */
|
||||
u16 idle_control; /* Control Idle Process */
|
||||
u16 tx_intr; /* TX interrupt pending */
|
||||
u16 rx_intr; /* RX interrupt pending */
|
||||
u16 rup_intr; /* RUP interrupt pending */
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
/*********** end of file ***********/
|
||||
Some files were not shown because too many files have changed in this diff Show more
Loading…
Reference in a new issue