From aed615a95f6dcc243daa99cc80658ad9ada95097 Mon Sep 17 00:00:00 2001 From: Alexey Dobriyan Date: Mon, 9 Jan 2006 20:51:39 -0800 Subject: [PATCH] Disable rio on 64-bit platforms Do it via Kconfig rather than via #error. Signed-off-by: Alexey Dobriyan Cc: Alan Cox Signed-off-by: Andrew Morton Signed-off-by: Linus Torvalds --- drivers/char/rio/rio_linux.c | 4 ---- 1 file changed, 4 deletions(-) (limited to 'drivers/char/rio') diff --git a/drivers/char/rio/rio_linux.c b/drivers/char/rio/rio_linux.c index d7d484024e2b..2611b15b6bd1 100644 --- a/drivers/char/rio/rio_linux.c +++ b/drivers/char/rio/rio_linux.c @@ -56,10 +56,6 @@ #include #include -#if BITS_PER_LONG != 32 -# error FIXME: this driver only works on 32-bit platforms -#endif - #include "linux_compat.h" #include "typdef.h" #include "pkt.h" -- cgit v1.2.3 From fe971071a89c5c5184fc9f3482c7a8e997cf0520 Mon Sep 17 00:00:00 2001 From: Tobias Klauser Date: Mon, 9 Jan 2006 20:54:02 -0800 Subject: [PATCH] drivers/char: Use ARRAY_SIZE macro Use ARRAY_SIZE macro instead of sizeof(x)/sizeof(x[0]) and remove duplicates of ARRAY_SIZE. Signed-off-by: Tobias Klauser Signed-off-by: Andrew Morton Signed-off-by: Linus Torvalds --- drivers/char/rio/rio_linux.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'drivers/char/rio') diff --git a/drivers/char/rio/rio_linux.c b/drivers/char/rio/rio_linux.c index 2611b15b6bd1..7085a38532b3 100644 --- a/drivers/char/rio/rio_linux.c +++ b/drivers/char/rio/rio_linux.c @@ -211,7 +211,7 @@ static int rio_poll = 1; or less.... */ static int rio_probe_addrs[]= {0xc0000, 0xd0000, 0xe0000}; -#define NR_RIO_ADDRS (sizeof(rio_probe_addrs)/sizeof (int)) +#define NR_RIO_ADDRS ARRAY_SIZE(rio_probe_addrs) /* Set the mask to all-ones. This alas, only supports 32 interrupts. -- cgit v1.2.3 From 33f0f88f1c51ae5c2d593d26960c760ea154c2e2 Mon Sep 17 00:00:00 2001 From: Alan Cox Date: Mon, 9 Jan 2006 20:54:13 -0800 Subject: [PATCH] TTY layer buffering revamp The API and code have been through various bits of initial review by serial driver people but they definitely need to live somewhere for a while so the unconverted drivers can get knocked into shape, existing drivers that have been updated can be better tuned and bugs whacked out. This replaces the tty flip buffers with kmalloc objects in rings. In the normal situation for an IRQ driven serial port at typical speeds the behaviour is pretty much the same, two buffers end up allocated and the kernel cycles between them as before. When there are delays or at high speed we now behave far better as the buffer pool can grow a bit rather than lose characters. This also means that we can operate at higher speeds reliably. For drivers that receive characters in blocks (DMA based, USB and especially virtualisation) the layer allows a lot of driver specific code that works around the tty layer with private secondary queues to be removed. The IBM folks need this sort of layer, the smart serial port people do, the virtualisers do (because a virtualised tty typically operates at infinite speed rather than emulating 9600 baud). Finally many drivers had invalid and unsafe attempts to avoid buffer overflows by directly invoking tty methods extracted out of the innards of work queue structs. These are no longer needed and all go away. That fixes various random hangs with serial ports on overflow. The other change in here is to optimise the receive_room path that is used by some callers. It turns out that only one ldisc uses receive room except asa constant and it updates it far far less than the value is read. We thus make it a variable not a function call. I expect the code to contain bugs due to the size alone but I'll be watching and squashing them and feeding out new patches as it goes. Because the buffers now dynamically expand you should only run out of buffering when the kernel runs out of memory for real. That means a lot of the horrible hacks high performance drivers used to do just aren't needed any more. Description: tty_insert_flip_char is an old API and continues to work as before, as does tty_flip_buffer_push() [this is why many drivers dont need modification]. It does now also return the number of chars inserted There are also tty_buffer_request_room(tty, len) which asks for a buffer block of the length requested and returns the space found. This improves efficiency with hardware that knows how much to transfer. and tty_insert_flip_string_flags(tty, str, flags, len) to insert a string of characters and flags For a smart interface the usual code is len = tty_request_buffer_room(tty, amount_hardware_says); tty_insert_flip_string(tty, buffer_from_card, len); More description! At the moment tty buffers are attached directly to the tty. This is causing a lot of the problems related to tty layer locking, also problems at high speed and also with bursty data (such as occurs in virtualised environments) I'm working on ripping out the flip buffers and replacing them with a pool of dynamically allocated buffers. This allows both for old style "byte I/O" devices and also helps virtualisation and smart devices where large blocks of data suddenely materialise and need storing. So far so good. Lots of drivers reference tty->flip.*. Several of them also call directly and unsafely into function pointers it provides. This will all break. Most drivers can use tty_insert_flip_char which can be kept as an API but others need more. At the moment I've added the following interfaces, if people think more will be needed now is a good time to say int tty_buffer_request_room(tty, size) Try and ensure at least size bytes are available, returns actual room (may be zero). At the moment it just uses the flipbuf space but that will change. Repeated calls without characters being added are not cumulative. (ie if you call it with 1, 1, 1, and then 4 you'll have four characters of space. The other functions will also try and grow buffers in future but this will be a more efficient way when you know block sizes. int tty_insert_flip_char(tty, ch, flag) As before insert a character if there is room. Now returns 1 for success, 0 for failure. int tty_insert_flip_string(tty, str, len) Insert a block of non error characters. Returns the number inserted. int tty_prepare_flip_string(tty, strptr, len) Adjust the buffer to allow len characters to be added. Returns a buffer pointer in strptr and the length available. This allows for hardware that needs to use functions like insl or mencpy_fromio. Signed-off-by: Alan Cox Cc: Paul Fulghum Signed-off-by: Hirokazu Takata Signed-off-by: Serge Hallyn Signed-off-by: Jeff Dike Signed-off-by: John Hawkes Signed-off-by: Martin Schwidefsky Signed-off-by: Adrian Bunk Signed-off-by: Andrew Morton Signed-off-by: Linus Torvalds --- drivers/char/rio/riointr.c | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) (limited to 'drivers/char/rio') diff --git a/drivers/char/rio/riointr.c b/drivers/char/rio/riointr.c index e42e7b50bf6b..ddda9c14e059 100644 --- a/drivers/char/rio/riointr.c +++ b/drivers/char/rio/riointr.c @@ -38,6 +38,7 @@ static char *_riointr_c_sccs_ = "@(#)riointr.c 1.2"; #include #include #include +#include #include #include #include @@ -560,6 +561,7 @@ struct Port * PortP; struct PKT *PacketP; register uint DataCnt; uchar * ptr; + unsigned char *buf; int copied =0; static int intCount, RxIntCnt; @@ -657,8 +659,7 @@ struct Port * PortP; ** and available space. */ - transCount = min_t(unsigned int, PacketP->len & PKT_LEN_MASK, - TTY_FLIPBUF_SIZE - TtyP->flip.count); + transCount = tty_buffer_request_room(TtyP, PacketP->len & PKT_LEN_MASK); rio_dprintk (RIO_DEBUG_REC, "port %d: Copy %d bytes\n", PortP->PortNum, transCount); /* @@ -678,9 +679,8 @@ struct Port * PortP; #endif ptr = (uchar *) PacketP->data + PortP->RxDataStart; - rio_memcpy_fromio (TtyP->flip.char_buf_ptr, ptr, transCount); - memset(TtyP->flip.flag_buf_ptr, TTY_NORMAL, transCount); - + tty_prepare_flip_string(TtyP, &buf, transCount); + rio_memcpy_fromio (buf, ptr, transCount); #ifdef STATS /* ** keep a count for statistical purposes @@ -690,9 +690,6 @@ struct Port * PortP; PortP->RxDataStart += transCount; PacketP->len -= transCount; copied += transCount; - TtyP->flip.count += transCount; - TtyP->flip.char_buf_ptr += transCount; - TtyP->flip.flag_buf_ptr += transCount; #ifdef ___DEBUG_IT___ -- cgit v1.2.3 From 8d8706e2f86d28814c1b40a116ffdeca35e4c949 Mon Sep 17 00:00:00 2001 From: Andrew Morton Date: Wed, 11 Jan 2006 12:17:49 -0800 Subject: [PATCH] lindent rio drivers Run all rio files through indent -kr -i8 -bri0 -l255, as requested by Alan. rioboot.c and rioinit.c were skipped due to worrisome lindent warnings. Cc: Alan Cox Signed-off-by: Andrew Morton Signed-off-by: Linus Torvalds --- drivers/char/rio/board.h | 83 +- drivers/char/rio/bootpkt.h | 11 +- drivers/char/rio/brates.h | 9 +- drivers/char/rio/chan.h | 2 +- drivers/char/rio/cirrus.h | 178 +-- drivers/char/rio/cmd.h | 5 +- drivers/char/rio/cmdblk.h | 19 +- drivers/char/rio/cmdpkt.h | 213 ++- drivers/char/rio/control.h | 7 +- drivers/char/rio/daemon.h | 162 +- drivers/char/rio/debug.h | 4 +- drivers/char/rio/defaults.h | 7 +- drivers/char/rio/eisa.h | 4 +- drivers/char/rio/enable.h | 4 +- drivers/char/rio/error.h | 3 - drivers/char/rio/errors.h | 2 +- drivers/char/rio/formpkt.h | 151 +- drivers/char/rio/func.h | 51 +- drivers/char/rio/host.h | 93 +- drivers/char/rio/hosthw.h | 4 +- drivers/char/rio/link.h | 152 +- drivers/char/rio/linux_compat.h | 46 +- drivers/char/rio/list.h | 6 +- drivers/char/rio/lrt.h | 5 +- drivers/char/rio/ltt.h | 7 +- drivers/char/rio/lttwake.h | 5 +- drivers/char/rio/map.h | 27 +- drivers/char/rio/mca.h | 2 +- drivers/char/rio/mesg.h | 2 +- drivers/char/rio/param.h | 27 +- drivers/char/rio/parmmap.h | 79 +- drivers/char/rio/pci.h | 2 +- drivers/char/rio/phb.h | 285 ++-- drivers/char/rio/pkt.h | 72 +- drivers/char/rio/poll.h | 27 +- drivers/char/rio/port.h | 294 ++-- drivers/char/rio/proto.h | 132 +- drivers/char/rio/protsts.h | 2 - drivers/char/rio/qbuf.h | 15 +- drivers/char/rio/rio.h | 15 +- drivers/char/rio/rio_linux.c | 1516 ++++++++++--------- drivers/char/rio/rio_linux.h | 57 +- drivers/char/rio/rioboard.h | 204 +-- drivers/char/rio/riocmd.c | 896 ++++++----- drivers/char/rio/rioctrl.c | 3119 +++++++++++++++++++-------------------- drivers/char/rio/riodrvr.h | 128 +- drivers/char/rio/rioinfo.h | 30 +- drivers/char/rio/riointr.c | 1505 +++++++++---------- drivers/char/rio/rioioctl.h | 18 +- drivers/char/rio/rioparam.c | 563 ++++--- drivers/char/rio/riopcicopy.c | 6 +- drivers/char/rio/rioroute.c | 1572 +++++++++----------- drivers/char/rio/riospace.h | 31 +- drivers/char/rio/riotable.c | 1019 ++++++------- drivers/char/rio/riotime.h | 4 +- drivers/char/rio/riotty.c | 1224 ++++++++------- drivers/char/rio/riotypes.h | 71 +- drivers/char/rio/riowinif.h | 934 ++++++------ drivers/char/rio/riscos.h | 2 +- drivers/char/rio/rom.h | 22 +- drivers/char/rio/route.h | 61 +- drivers/char/rio/rtahw.h | 14 +- drivers/char/rio/rup.h | 39 +- drivers/char/rio/rupstat.h | 3 +- drivers/char/rio/sam.h | 13 +- drivers/char/rio/selftest.h | 48 +- drivers/char/rio/space.h | 2 +- drivers/char/rio/sysmap.h | 23 +- drivers/char/rio/timeouts.h | 7 +- drivers/char/rio/top.h | 9 +- drivers/char/rio/typdef.h | 36 +- drivers/char/rio/unixrup.h | 21 +- 72 files changed, 7381 insertions(+), 8030 deletions(-) (limited to 'drivers/char/rio') diff --git a/drivers/char/rio/board.h b/drivers/char/rio/board.h index 0b397e1c8f1c..29c980204098 100644 --- a/drivers/char/rio/board.h +++ b/drivers/char/rio/board.h @@ -52,63 +52,57 @@ static char *_board_h_sccs_ = "@(#)board.h 1.2"; /* ** The shape of the Host Control area, at offset 0x7C00, Write Only */ -struct s_Ctrl -{ - BYTE DpCtl; /* 7C00 */ - BYTE Dp_Unused2_[127]; - BYTE DpIntSet; /* 7C80 */ - BYTE Dp_Unused3_[127]; - BYTE DpTpuReset; /* 7D00 */ - BYTE Dp_Unused4_[127]; - BYTE DpIntReset; /* 7D80 */ - BYTE Dp_Unused5_[127]; +struct s_Ctrl { + BYTE DpCtl; /* 7C00 */ + BYTE Dp_Unused2_[127]; + BYTE DpIntSet; /* 7C80 */ + BYTE Dp_Unused3_[127]; + BYTE DpTpuReset; /* 7D00 */ + BYTE Dp_Unused4_[127]; + BYTE DpIntReset; /* 7D80 */ + BYTE Dp_Unused5_[127]; }; /* ** The PROM data area on the host (0x7C00), Read Only */ -struct s_Prom -{ - WORD DpSlxCode[2]; - WORD DpRev; - WORD Dp_Unused6_; - WORD DpUniq[4]; - WORD DpJahre; - WORD DpWoche; - WORD DpHwFeature[5]; - WORD DpOemId; - WORD DpSiggy[16]; +struct s_Prom { + WORD DpSlxCode[2]; + WORD DpRev; + WORD Dp_Unused6_; + WORD DpUniq[4]; + WORD DpJahre; + WORD DpWoche; + WORD DpHwFeature[5]; + WORD DpOemId; + WORD 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; +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 */ -{ - BYTE Dp_Unused8_[DP_PARMMAP_ADDR]; - WORD DpParmMapAd; +struct s_ParmMapS { /* Area containing Parm Map Pointer */ + BYTE Dp_Unused8_[DP_PARMMAP_ADDR]; + WORD DpParmMapAd; }; -struct s_StartUpS -{ - BYTE Dp_Unused9_[DP_STARTUP_ADDR]; - BYTE Dp_LongJump[0x4]; - BYTE Dp_Unused10_[2]; - BYTE Dp_ShortJump[0x2]; +struct s_StartUpS { + BYTE Dp_Unused9_[DP_STARTUP_ADDR]; + BYTE Dp_LongJump[0x4]; + BYTE Dp_Unused10_[2]; + BYTE Dp_ShortJump[0x2]; }; -union u_Sram2ParmMap /* This is the top of memory (0x7E00-0x7FFF) */ -{ - BYTE DpSramMem[DP_SRAM2_SIZE]; +union u_Sram2ParmMap { /* This is the top of memory (0x7E00-0x7FFF) */ + BYTE DpSramMem[DP_SRAM2_SIZE]; struct s_ParmMapS DpParmMapS; struct s_StartUpS DpStartUpS; }; @@ -116,13 +110,12 @@ union u_Sram2ParmMap /* This is the top of memory (0x7E00-0x7FFF) */ /* ** This is the DP RAM overlay. */ -struct DpRam -{ - BYTE DpSram1[DP_SRAM1_SIZE]; /* 0000 - 7BFF */ - union u_CtrlProm DpCtrlProm; /* 7C00 - 7DFF */ - union u_Sram2ParmMap DpSram2ParmMap; /* 7E00 - 7FFF */ - BYTE DpScratch[DP_SCRATCH_SIZE]; /* 8000 - 8FFF */ - BYTE DpSram3[DP_SRAM3_SIZE]; /* 9000 - FFFF */ +struct DpRam { + BYTE DpSram1[DP_SRAM1_SIZE]; /* 0000 - 7BFF */ + union u_CtrlProm DpCtrlProm; /* 7C00 - 7DFF */ + union u_Sram2ParmMap DpSram2ParmMap; /* 7E00 - 7FFF */ + BYTE DpScratch[DP_SCRATCH_SIZE]; /* 8000 - 8FFF */ + BYTE DpSram3[DP_SRAM3_SIZE]; /* 9000 - FFFF */ }; #define DpControl DpCtrlProm.DpCtrl.DpCtl diff --git a/drivers/char/rio/bootpkt.h b/drivers/char/rio/bootpkt.h index c329aeb7c871..602266e0c085 100644 --- a/drivers/char/rio/bootpkt.h +++ b/drivers/char/rio/bootpkt.h @@ -41,7 +41,7 @@ #ifndef lint #ifdef SCCS -static char *_rio_bootpkt_h_sccs = "@(#)bootpkt.h 1.1" ; +static char *_rio_bootpkt_h_sccs = "@(#)bootpkt.h 1.1"; #endif #endif @@ -49,14 +49,13 @@ static char *_rio_bootpkt_h_sccs = "@(#)bootpkt.h 1.1" ; * Overlayed onto the Data fields of a regular * Packet ************************************************/ -typedef struct BOOT_PKT BOOT_PKT ; +typedef struct BOOT_PKT BOOT_PKT; struct BOOT_PKT { - short seq_num ; - char data[10] ; - } ; + short seq_num; + char data[10]; +}; #endif /*********** end of file ***********/ - diff --git a/drivers/char/rio/brates.h b/drivers/char/rio/brates.h index bd4fc84ec6cf..dd686d58fd66 100644 --- a/drivers/char/rio/brates.h +++ b/drivers/char/rio/brates.h @@ -97,11 +97,10 @@ #define MAX_RATE B2000 -struct baud_rate /* Tag for baud rates */ -{ - /* short host_rate,*/ /* As passed by the driver */ - short divisor, /* The divisor */ - prescaler; /* The pre-scaler */ +struct baud_rate { /* Tag for baud rates */ + /* short host_rate, *//* As passed by the driver */ + short divisor, /* The divisor */ + prescaler; /* The pre-scaler */ }; #endif diff --git a/drivers/char/rio/chan.h b/drivers/char/rio/chan.h index 5b306543328f..af14311f9b66 100644 --- a/drivers/char/rio/chan.h +++ b/drivers/char/rio/chan.h @@ -21,7 +21,7 @@ #ifndef lint #ifdef SCCS -static char *_rio_chan_h_sccs = "@(#)chan.h 1.1" ; +static char *_rio_chan_h_sccs = "@(#)chan.h 1.1"; #endif #endif diff --git a/drivers/char/rio/cirrus.h b/drivers/char/rio/cirrus.h index cf056a990f18..217ff09f2fa1 100644 --- a/drivers/char/rio/cirrus.h +++ b/drivers/char/rio/cirrus.h @@ -73,20 +73,20 @@ #define TIMER_TICK 0x82 #define STOP_BREAK 0x83 #define BASE(a) ((a) < 4 ? (short*)CIRRUS_FIRST : ((a) < 8 ? (short *)CIRRUS_SECOND : ((a) < 12 ? (short*)CIRRUS_THIRD : (short *)CIRRUS_FOURTH))) -#define txack1 ((short *)0x7104) -#define rxack1 ((short *)0x7102) +#define txack1 ((short *)0x7104) +#define rxack1 ((short *)0x7102) #define mdack1 ((short *)0x7106) -#define txack2 ((short *)0x7006) -#define rxack2 ((short *)0x7004) -#define mdack2 ((short *)0x7100) +#define txack2 ((short *)0x7006) +#define rxack2 ((short *)0x7004) +#define mdack2 ((short *)0x7100) #define int_latch ((short *) 0x7800) -#define int_status ((short *) 0x7c00) -#define tx1_pending 0x20 -#define rx1_pending 0x10 -#define md1_pending 0x40 -#define tx2_pending 0x02 -#define rx2_pending 0x01 -#define md2_pending 0x40 +#define int_status ((short *) 0x7c00) +#define tx1_pending 0x20 +#define rx1_pending 0x10 +#define md1_pending 0x40 +#define tx2_pending 0x02 +#define rx2_pending 0x01 +#define md2_pending 0x40 #define module1_bits 0x07 #define module1_modern 0x08 #define module2_bits 0x70 @@ -113,65 +113,65 @@ NB. These registers are relative values on 8 bit boundaries whereas on the RTA's the CIRRUS registers are on word boundaries. Use pointer arithmetic (short *) to obtain the real addresses required */ -#define ccr 0x05 /* Channel Command Register */ -#define ier 0x06 /* Interrupt Enable Register */ -#define cor1 0x08 /* Channel Option Register 1 */ -#define cor2 0x09 /* Channel Option Register 2 */ -#define cor3 0x0a /* Channel Option Register 3 */ -#define cor4 0x1e /* Channel Option Register 4 */ -#define cor5 0x1f /* Channel Option Register 5 */ - -#define ccsr 0x0b /* Channel Control Status Register */ -#define rdcr 0x0e /* Receive Data Count Register */ -#define tdcr 0x12 /* Transmit Data Count Register */ -#define mcor1 0x15 /* Modem Change Option Register 1 */ -#define mcor2 0x16 /* Modem Change Option Regsiter 2 */ - -#define livr 0x18 /* Local Interrupt Vector Register */ -#define schr1 0x1a /* Special Character Register 1 */ -#define schr2 0x1b /* Special Character Register 2 */ -#define schr3 0x1c /* Special Character Register 3 */ -#define schr4 0x1d /* Special Character Register 4 */ - -#define rtr 0x20 /* Receive Timer Register */ -#define rtpr 0x21 /* Receive Timeout Period Register */ -#define lnc 0x24 /* Lnext character */ - -#define rivr 0x43 /* Receive Interrupt Vector Register */ -#define tivr 0x42 /* Transmit Interrupt Vector Register */ -#define mivr 0x41 /* Modem Interrupt Vector Register */ -#define gfrcr 0x40 /* Global Firmware Revision code Reg */ -#define ricr 0x44 /* Receive Interrupting Channel Reg */ -#define ticr 0x45 /* Transmit Interrupting Channel Reg */ -#define micr 0x46 /* Modem Interrupting Channel Register */ - -#define gcr 0x4b /* Global configuration register*/ -#define misr 0x4c /* Modem interrupt status register */ +#define ccr 0x05 /* Channel Command Register */ +#define ier 0x06 /* Interrupt Enable Register */ +#define cor1 0x08 /* Channel Option Register 1 */ +#define cor2 0x09 /* Channel Option Register 2 */ +#define cor3 0x0a /* Channel Option Register 3 */ +#define cor4 0x1e /* Channel Option Register 4 */ +#define cor5 0x1f /* Channel Option Register 5 */ + +#define ccsr 0x0b /* Channel Control Status Register */ +#define rdcr 0x0e /* Receive Data Count Register */ +#define tdcr 0x12 /* Transmit Data Count Register */ +#define mcor1 0x15 /* Modem Change Option Register 1 */ +#define mcor2 0x16 /* Modem Change Option Regsiter 2 */ + +#define livr 0x18 /* Local Interrupt Vector Register */ +#define schr1 0x1a /* Special Character Register 1 */ +#define schr2 0x1b /* Special Character Register 2 */ +#define schr3 0x1c /* Special Character Register 3 */ +#define schr4 0x1d /* Special Character Register 4 */ + +#define rtr 0x20 /* Receive Timer Register */ +#define rtpr 0x21 /* Receive Timeout Period Register */ +#define lnc 0x24 /* Lnext character */ + +#define rivr 0x43 /* Receive Interrupt Vector Register */ +#define tivr 0x42 /* Transmit Interrupt Vector Register */ +#define mivr 0x41 /* Modem Interrupt Vector Register */ +#define gfrcr 0x40 /* Global Firmware Revision code Reg */ +#define ricr 0x44 /* Receive Interrupting Channel Reg */ +#define ticr 0x45 /* Transmit Interrupting Channel Reg */ +#define micr 0x46 /* Modem Interrupting Channel Register */ + +#define gcr 0x4b /* Global configuration register */ +#define misr 0x4c /* Modem interrupt status register */ #define rbusr 0x59 #define tbusr 0x5a #define mbusr 0x5b -#define eoir 0x60 /* End Of Interrupt Register */ -#define rdsr 0x62 /* Receive Data / Status Register */ -#define tdr 0x63 /* Transmit Data Register */ -#define svrr 0x67 /* Service Request Register */ +#define eoir 0x60 /* End Of Interrupt Register */ +#define rdsr 0x62 /* Receive Data / Status Register */ +#define tdr 0x63 /* Transmit Data Register */ +#define svrr 0x67 /* Service Request Register */ -#define car 0x68 /* Channel Access Register */ -#define mir 0x69 /* Modem Interrupt Register */ -#define tir 0x6a /* Transmit Interrupt Register */ -#define rir 0x6b /* Receive Interrupt Register */ -#define msvr1 0x6c /* Modem Signal Value Register 1 */ -#define msvr2 0x6d /* Modem Signal Value Register 2*/ -#define psvr 0x6f /* Printer Signal Value Register*/ +#define car 0x68 /* Channel Access Register */ +#define mir 0x69 /* Modem Interrupt Register */ +#define tir 0x6a /* Transmit Interrupt Register */ +#define rir 0x6b /* Receive Interrupt Register */ +#define msvr1 0x6c /* Modem Signal Value Register 1 */ +#define msvr2 0x6d /* Modem Signal Value Register 2 */ +#define psvr 0x6f /* Printer Signal Value Register */ -#define tbpr 0x72 /* Transmit Baud Rate Period Register */ -#define tcor 0x76 /* Transmit Clock Option Register */ +#define tbpr 0x72 /* Transmit Baud Rate Period Register */ +#define tcor 0x76 /* Transmit Clock Option Register */ -#define rbpr 0x78 /* Receive Baud Rate Period Register */ -#define rber 0x7a /* Receive Baud Rate Extension Register */ -#define rcor 0x7c /* Receive Clock Option Register*/ -#define ppr 0x7e /* Prescalar Period Register */ +#define rbpr 0x78 /* Receive Baud Rate Period Register */ +#define rber 0x7a /* Receive Baud Rate Extension Register */ +#define rcor 0x7c /* Receive Clock Option Register */ +#define ppr 0x7e /* Prescalar Period Register */ /* Misc registers used for forcing the 1400 out of its reset woes */ #define airl 0x6d @@ -192,10 +192,10 @@ /* RDSR - when status read from FIFO */ #define RDSR_BREAK 0x08 /* Break received */ -#define RDSR_TIMEOUT 0x80 /* No new data timeout */ -#define RDSR_SC1 0x10 /* Special char 1 (tx XON) matched */ -#define RDSR_SC2 0x20 /* Special char 2 (tx XOFF) matched */ -#define RDSR_SC12_MASK 0x30 /* Mask for special chars 1 and 2 */ +#define RDSR_TIMEOUT 0x80 /* No new data timeout */ +#define RDSR_SC1 0x10 /* Special char 1 (tx XON) matched */ +#define RDSR_SC2 0x20 /* Special char 2 (tx XOFF) matched */ +#define RDSR_SC12_MASK 0x30 /* Mask for special chars 1 and 2 */ /* PPR */ #define PPR_DEFAULT 0x31 /* Default value - for a 25Mhz clock gives @@ -244,7 +244,7 @@ #define IER_TIMEOUT 0x01 /* Timeout on no data */ #define IER_DEFAULT 0x94 /* Default values */ -#define IER_PARALLEL 0x84 /* Default for Parallel */ +#define IER_PARALLEL 0x84 /* Default for Parallel */ #define IER_EMPTY 0x92 /* Transmitter empty rather than ready */ /* COR1 - Driver only */ @@ -264,11 +264,11 @@ #define COR1_7BITS 0x02 /* 7 data bits */ #define COR1_8BITS 0x03 /* 8 data bits */ -#define COR1_HOST 0xef /* Safe host bits */ +#define COR1_HOST 0xef /* Safe host bits */ /* RTA only */ -#define COR1_CINPCK 0x00 /* Check parity of received characters */ -#define COR1_CNINPCK 0x10 /* Don't check parity */ +#define COR1_CINPCK 0x00 /* Check parity of received characters */ +#define COR1_CNINPCK 0x10 /* Don't check parity */ /* COR2 bits for both RTA and driver use */ #define COR2_IXANY 0x80 /* IXANY - any character is XON */ @@ -293,9 +293,9 @@ #define COR3_FCT 0x20 /* Flow control transparency */ #define COR3_SCD12 0x10 /* Special character detect for SCHR's 1 + 2 */ #define COR3_FIFO12 0x0c /* 12 chars for receive FIFO threshold */ -#define COR3_FIFO10 0x0a /* 10 chars for receive FIFO threshold */ -#define COR3_FIFO8 0x08 /* 8 chars for receive FIFO threshold */ -#define COR3_FIFO6 0x06 /* 6 chars for receive FIFO threshold */ +#define COR3_FIFO10 0x0a /* 10 chars for receive FIFO threshold */ +#define COR3_FIFO8 0x08 /* 8 chars for receive FIFO threshold */ +#define COR3_FIFO6 0x06 /* 6 chars for receive FIFO threshold */ #define COR3_THRESHOLD COR3_FIFO8 /* MUST BE LESS THAN MCOR_THRESHOLD */ @@ -386,7 +386,7 @@ #define MCOR_THRESHBITS 0x0F /* mask for ANDing out the above */ -#define MCOR_THRESHOLD MCOR_THRESH9 /* MUST BE GREATER THAN COR3_THRESHOLD */ +#define MCOR_THRESHOLD MCOR_THRESH9 /* MUST BE GREATER THAN COR3_THRESHOLD */ /* RTPR */ @@ -429,25 +429,25 @@ #define CONFIG 0x01 /* Configure a port */ #define MOPEN 0x02 /* Modem open (block for DCD) */ #define CLOSE 0x03 /* Close a port */ -#define WFLUSH (0x04 | PRE_EMPTIVE) /* Write flush */ -#define RFLUSH (0x05 | PRE_EMPTIVE) /* Read flush */ -#define RESUME (0x06 | PRE_EMPTIVE) /* Resume if xoffed */ -#define SBREAK 0x07 /* Start break */ +#define WFLUSH (0x04 | PRE_EMPTIVE) /* Write flush */ +#define RFLUSH (0x05 | PRE_EMPTIVE) /* Read flush */ +#define RESUME (0x06 | PRE_EMPTIVE) /* Resume if xoffed */ +#define SBREAK 0x07 /* Start break */ #define EBREAK 0x08 /* End break */ -#define SUSPEND (0x09 | PRE_EMPTIVE) /* Susp op (behave as tho xoffed) */ -#define FCLOSE (0x0a | PRE_EMPTIVE) /* Force close */ -#define XPRINT 0x0b /* Xprint packet */ -#define MBIS (0x0c | PRE_EMPTIVE) /* Set modem lines */ -#define MBIC (0x0d | PRE_EMPTIVE) /* Clear modem lines */ -#define MSET (0x0e | PRE_EMPTIVE) /* Set modem lines */ +#define SUSPEND (0x09 | PRE_EMPTIVE) /* Susp op (behave as tho xoffed) */ +#define FCLOSE (0x0a | PRE_EMPTIVE) /* Force close */ +#define XPRINT 0x0b /* Xprint packet */ +#define MBIS (0x0c | PRE_EMPTIVE) /* Set modem lines */ +#define MBIC (0x0d | PRE_EMPTIVE) /* Clear modem lines */ +#define MSET (0x0e | PRE_EMPTIVE) /* Set modem lines */ #define PCLOSE 0x0f /* Pseudo close - Leaves rx/tx enabled */ -#define MGET (0x10 | PRE_EMPTIVE) /* Force update of modem status */ -#define MEMDUMP (0x11 | PRE_EMPTIVE) /* Send back mem from addr supplied */ -#define READ_REGISTER (0x12 | PRE_EMPTIVE) /* Read CD1400 register (debug) */ +#define MGET (0x10 | PRE_EMPTIVE) /* Force update of modem status */ +#define MEMDUMP (0x11 | PRE_EMPTIVE) /* Send back mem from addr supplied */ +#define READ_REGISTER (0x12 | 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 COMPLETE (0x20 | PRE_EMPTIVE) /* Command complete */ diff --git a/drivers/char/rio/cmd.h b/drivers/char/rio/cmd.h index c369edaea2b3..797b62400c91 100644 --- a/drivers/char/rio/cmd.h +++ b/drivers/char/rio/cmd.h @@ -42,7 +42,7 @@ #ifndef lint #ifdef SCCS -static char *_rio_cmd_h_sccs = "@(#)cmd.h 1.1" ; +static char *_rio_cmd_h_sccs = "@(#)cmd.h 1.1"; #endif #endif @@ -52,7 +52,7 @@ static char *_rio_cmd_h_sccs = "@(#)cmd.h 1.1" ; #define CMD_IGNORE_PKT ( (ushort) 0) #define CMD_STATUS_REQ ( (ushort) 1) -#define CMD_UNIT_STATUS_REQ ( (ushort) 2) /* Is this needed ??? */ +#define CMD_UNIT_STATUS_REQ ( (ushort) 2) /* Is this needed ??? */ #define CMD_CONF_PORT ( (ushort) 3) #define CMD_CONF_UNIT ( (ushort) 4) #define CMD_ROUTE_MAP_REQ ( (ushort) 5) @@ -81,4 +81,3 @@ static char *_rio_cmd_h_sccs = "@(#)cmd.h 1.1" ; #endif /*********** end of file ***********/ - diff --git a/drivers/char/rio/cmdblk.h b/drivers/char/rio/cmdblk.h index 2b8efbdbee1c..a9a8c45631d7 100644 --- a/drivers/char/rio/cmdblk.h +++ b/drivers/char/rio/cmdblk.h @@ -44,16 +44,15 @@ static char *_cmdblk_h_sccs_ = "@(#)cmdblk.h 1.2"; ** 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)(int, struct CmdBlk *); - int PreArg; /* The arg for the func */ - /* The func to call when completed */ - int (*PostFuncP)(int, struct CmdBlk *); - int PostArg; /* The arg for the func */ +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) (int, struct CmdBlk *); + int PreArg; /* The arg for the func */ + /* The func to call when completed */ + int (*PostFuncP) (int, struct CmdBlk *); + int PostArg; /* The arg for the func */ }; #define NUM_RIO_CMD_BLKS (3 * (MAX_RUP * 4 + LINKS_PER_UNIT * 4)) diff --git a/drivers/char/rio/cmdpkt.h b/drivers/char/rio/cmdpkt.h index 46befd354f20..77cee8df68ef 100644 --- a/drivers/char/rio/cmdpkt.h +++ b/drivers/char/rio/cmdpkt.h @@ -54,135 +54,112 @@ static char *_cmdpkt_h_sccs_ = "@(#)cmdpkt.h 1.2"; ** This structure overlays a PktCmd->CmdData structure, and so starts ** at Data[2] in the actual pkt! */ -struct BootSequence -{ - WORD NumPackets; - WORD LoadBase; - WORD CodeSize; +struct BootSequence { + WORD NumPackets; + WORD LoadBase; + WORD CodeSize; }; #define BOOT_SEQUENCE_LEN 8 -struct SamTop -{ - BYTE Unit; - BYTE Link; +struct SamTop { + BYTE Unit; + BYTE Link; }; -struct CmdHdr -{ - BYTE PcCommand; - union - { - BYTE PcPhbNum; - BYTE PcLinkNum; - BYTE PcIDNum; - } U0; +struct CmdHdr { + BYTE PcCommand; + union { + BYTE PcPhbNum; + BYTE PcLinkNum; + BYTE PcIDNum; + } U0; }; -struct PktCmd -{ - union - { - struct - { - struct CmdHdr CmdHdr; - struct BootSequence PcBootSequence; - } S1; - struct - { - WORD PcSequence; - BYTE PcBootData[RTA_BOOT_DATA_SIZE]; - } S2; - struct - { - WORD __crud__; - BYTE PcUniqNum[4]; /* this is really a uint. */ - BYTE PcModuleTypes; /* what modules are fitted */ - } S3; - struct - { - struct CmdHdr CmdHdr; - BYTE __undefined__; - BYTE PcModemStatus; - BYTE PcPortStatus; - BYTE PcSubCommand; /* commands like mem or register dump */ - WORD PcSubAddr; /* Address for command */ - BYTE PcSubData[64]; /* Date area for command */ - } S4; - struct - { - struct CmdHdr CmdHdr; - BYTE PcCommandText[1]; - BYTE __crud__[20]; - BYTE PcIDNum2; /* It had to go somewhere! */ - } S5; - struct - { - struct CmdHdr CmdHdr; - struct SamTop Topology[LINKS_PER_UNIT]; - } S6; - } U1; +struct PktCmd { + union { + struct { + struct CmdHdr CmdHdr; + struct BootSequence PcBootSequence; + } S1; + struct { + WORD PcSequence; + BYTE PcBootData[RTA_BOOT_DATA_SIZE]; + } S2; + struct { + WORD __crud__; + BYTE PcUniqNum[4]; /* this is really a uint. */ + BYTE PcModuleTypes; /* what modules are fitted */ + } S3; + struct { + struct CmdHdr CmdHdr; + BYTE __undefined__; + BYTE PcModemStatus; + BYTE PcPortStatus; + BYTE PcSubCommand; /* commands like mem or register dump */ + WORD PcSubAddr; /* Address for command */ + BYTE PcSubData[64]; /* Date area for command */ + } S4; + struct { + struct CmdHdr CmdHdr; + BYTE PcCommandText[1]; + BYTE __crud__[20]; + BYTE 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 - { - uchar PcCommand; - union - { - uchar PcPhbNum; - uchar PcLinkNum; - uchar PcIDNum; - } U0; - } CmdHdr; - struct - { - ushort NumPackets; - ushort LoadBase; - ushort CodeSize; - } PcBootSequence; - } S1; - struct - { - ushort PcSequence; - uchar PcBootData[RTA_BOOT_DATA_SIZE]; - } S2; - struct - { - ushort __crud__; - uchar PcUniqNum[4]; /* this is really a uint. */ - uchar PcModuleTypes; /* what modules are fitted */ - } S3; - struct - { - ushort __cmd_hdr__; - uchar __undefined__; - uchar PcModemStatus; - uchar PcPortStatus; - uchar PcSubCommand; - ushort PcSubAddr; - uchar PcSubData[64]; - } S4; - struct - { - ushort __cmd_hdr__; - uchar PcCommandText[1]; - uchar __crud__[20]; - uchar PcIDNum2; /* Tacked on end */ - } S5; - struct - { - ushort __cmd_hdr__; - struct Top Topology[LINKS_PER_UNIT]; - } S6; - } U1; +struct PktCmd_M { + union { + struct { + struct { + uchar PcCommand; + union { + uchar PcPhbNum; + uchar PcLinkNum; + uchar PcIDNum; + } U0; + } CmdHdr; + struct { + ushort NumPackets; + ushort LoadBase; + ushort CodeSize; + } PcBootSequence; + } S1; + struct { + ushort PcSequence; + uchar PcBootData[RTA_BOOT_DATA_SIZE]; + } S2; + struct { + ushort __crud__; + uchar PcUniqNum[4]; /* this is really a uint. */ + uchar PcModuleTypes; /* what modules are fitted */ + } S3; + struct { + ushort __cmd_hdr__; + uchar __undefined__; + uchar PcModemStatus; + uchar PcPortStatus; + uchar PcSubCommand; + ushort PcSubAddr; + uchar PcSubData[64]; + } S4; + struct { + ushort __cmd_hdr__; + uchar PcCommandText[1]; + uchar __crud__[20]; + uchar PcIDNum2; /* Tacked on end */ + } S5; + struct { + ushort __cmd_hdr__; + struct Top Topology[LINKS_PER_UNIT]; + } S6; + } U1; }; #define Command U1.S1.CmdHdr.PcCommand diff --git a/drivers/char/rio/control.h b/drivers/char/rio/control.h index 1712f6261dd1..6853d03304a3 100644 --- a/drivers/char/rio/control.h +++ b/drivers/char/rio/control.h @@ -51,12 +51,11 @@ #define UFOAD ( CONTROL + 4 ) #define IWAIT ( CONTROL + 5 ) -#define IFOAD_MAGIC 0xF0AD /* of course */ +#define IFOAD_MAGIC 0xF0AD /* of course */ #define ZOMBIE_MAGIC (~0xDEAD) /* not dead -> zombie */ -#define UFOAD_MAGIC 0xD1E /* kill-your-neighbour */ -#define IWAIT_MAGIC 0xB1DE /* Bide your time */ +#define UFOAD_MAGIC 0xD1E /* kill-your-neighbour */ +#define IWAIT_MAGIC 0xB1DE /* Bide your time */ #endif /*********** end of file ***********/ - diff --git a/drivers/char/rio/daemon.h b/drivers/char/rio/daemon.h index 62dba0e68b3e..28a991bd4fe6 100644 --- a/drivers/char/rio/daemon.h +++ b/drivers/char/rio/daemon.h @@ -44,18 +44,16 @@ static char *_daemon_h_sccs_ = "@(#)daemon.h 1.3"; ** structures used on /dev/rio */ -struct Error -{ - uint Error; - uint Entry; - uint Other; +struct Error { + uint Error; + uint Entry; + uint Other; }; -struct DownLoad -{ - char *DataP; - uint Count; - uint ProductCode; +struct DownLoad { + char *DataP; + uint Count; + uint ProductCode; }; /* @@ -66,46 +64,41 @@ struct DownLoad #endif #ifndef MAX_XP_CTRL_LEN -#define MAX_XP_CTRL_LEN 16 /* ALSO IN PORT.H */ +#define MAX_XP_CTRL_LEN 16 /* ALSO IN PORT.H */ #endif -struct PortSetup -{ - uint From; /* Set/Clear XP & IXANY Control from this port.... */ - uint To; /* .... to this port */ - uint 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 */ - uchar IxAny; /* enable/disable IXANY */ - uchar IxOn; /* enable/disable IXON */ - uchar Lock; /* lock port params */ - uchar Store; /* store params across closes */ - uchar Drain; /* close only when drained */ +struct PortSetup { + uint From; /* Set/Clear XP & IXANY Control from this port.... */ + uint To; /* .... to this port */ + uint 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 */ + uchar IxAny; /* enable/disable IXANY */ + uchar IxOn; /* enable/disable IXON */ + uchar Lock; /* lock port params */ + uchar Store; /* store params across closes */ + uchar Drain; /* close only when drained */ }; -struct LpbReq -{ - uint Host; - uint Link; - struct LPB *LpbP; +struct LpbReq { + uint Host; + uint Link; + struct LPB *LpbP; }; -struct RupReq -{ - uint HostNum; - uint RupNum; - struct RUP *RupP; +struct RupReq { + uint HostNum; + uint RupNum; + struct RUP *RupP; }; -struct PortReq -{ - uint SysPort; - struct Port *PortP; +struct PortReq { + uint SysPort; + struct Port *PortP; }; -struct StreamInfo -{ - uint SysPort; +struct StreamInfo { + uint SysPort; #if 0 queue_t RQueue; queue_t WQueue; @@ -115,68 +108,59 @@ struct StreamInfo #endif }; -struct HostReq -{ - uint HostNum; - struct Host *HostP; +struct HostReq { + uint HostNum; + struct Host *HostP; }; -struct HostDpRam -{ - uint HostNum; - struct DpRam *DpRamP; +struct HostDpRam { + uint HostNum; + struct DpRam *DpRamP; }; -struct DebugCtrl -{ - uint SysPort; - uint Debug; - uint Wait; +struct DebugCtrl { + uint SysPort; + uint Debug; + uint Wait; }; -struct MapInfo -{ - uint FirstPort; /* 8 ports, starting from this (tty) number */ - uint RtaUnique; /* reside on this RTA (unique number) */ +struct MapInfo { + uint FirstPort; /* 8 ports, starting from this (tty) number */ + uint RtaUnique; /* reside on this RTA (unique number) */ }; -struct MapIn -{ - uint NumEntries; /* How many port sets are we mapping? */ - struct MapInfo *MapInfoP; /* Pointer to (user space) info */ +struct MapIn { + uint 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 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 SpecialRupCmd { + struct PKT Packet; + unsigned short Host; + unsigned short RupNum; }; -struct IdentifyRta -{ - ulong RtaUnique; - uchar ID; +struct IdentifyRta { + ulong RtaUnique; + uchar ID; }; -struct KillNeighbour -{ - ulong UniqueNum; - uchar Link; +struct KillNeighbour { + ulong UniqueNum; + uchar Link; }; struct rioVersion { - char version[MAX_VERSION_LEN]; - char relid[MAX_VERSION_LEN]; - int buildLevel; - char buildDate[MAX_VERSION_LEN]; + char version[MAX_VERSION_LEN]; + char relid[MAX_VERSION_LEN]; + int buildLevel; + char buildDate[MAX_VERSION_LEN]; }; @@ -316,16 +300,16 @@ struct rioVersion { #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_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_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_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 */ diff --git a/drivers/char/rio/debug.h b/drivers/char/rio/debug.h index b6e0d0935552..6ae95c00db4a 100644 --- a/drivers/char/rio/debug.h +++ b/drivers/char/rio/debug.h @@ -33,7 +33,7 @@ #define DBPACKET(pkt, opt, str, chn) debug_packet((pkt), (opt), (str), (chn)) #else #define DBPACKET(pkt, opt, str, c) -#endif /* DCIRRUS */ +#endif /* DCIRRUS */ -#endif /* _debug_h_ */ +#endif /* _debug_h_ */ diff --git a/drivers/char/rio/defaults.h b/drivers/char/rio/defaults.h index 2e7309e27622..5b600c32ac02 100644 --- a/drivers/char/rio/defaults.h +++ b/drivers/char/rio/defaults.h @@ -37,13 +37,13 @@ #ifndef lint #ifdef SCCS -static char *_rio_defaults_h_sccs = "@(#)defaults.h 1.1" ; +static char *_rio_defaults_h_sccs = "@(#)defaults.h 1.1"; #endif #endif -#define MILLISECOND (int) (1000/64) /* 15.625 low ticks */ -#define SECOND (int) 15625 /* Low priority ticks */ +#define MILLISECOND (int) (1000/64) /* 15.625 low ticks */ +#define SECOND (int) 15625 /* Low priority ticks */ #ifdef RTA #define RX_LIMIT (ushort) 3 @@ -56,4 +56,3 @@ static char *_rio_defaults_h_sccs = "@(#)defaults.h 1.1" ; /*********** end of file ***********/ - diff --git a/drivers/char/rio/eisa.h b/drivers/char/rio/eisa.h index 59371b0528b0..c2abaf0eab04 100644 --- a/drivers/char/rio/eisa.h +++ b/drivers/char/rio/eisa.h @@ -60,7 +60,7 @@ static char *_eisa_h_sccs_ = "@(#)eisa.h 1.2"; #define EISA_PRODUCT_IDENT_LO 0xC80 /* where RIO_EISA_IDENT is */ #define EISA_PRODUCT_IDENT_HI 0xC81 -#define EISA_PRODUCT_NUMBER 0xC82 /* where PROD_CODE is */ +#define EISA_PRODUCT_NUMBER 0xC82 /* where PROD_CODE is */ #define EISA_REVISION_NUMBER 0xC83 /* revision (1dp) */ #define EISA_ENABLE 0xC84 /* set LSB to enable card */ #define EISA_UNIQUE_NUM_0 0xC88 /* vomit */ @@ -101,4 +101,4 @@ static char *_eisa_h_sccs_ = "@(#)eisa.h 1.2"; #define INBZ(z,x) inb(((z)<<12) | (x)) #define OUTBZ(z,x,y) outb((((z)<<12) | (x)), y) -#endif /* __rio_eisa_h__ */ +#endif /* __rio_eisa_h__ */ diff --git a/drivers/char/rio/enable.h b/drivers/char/rio/enable.h index 8e9a419e15b0..e06673fa48cf 100644 --- a/drivers/char/rio/enable.h +++ b/drivers/char/rio/enable.h @@ -36,7 +36,7 @@ #ifndef lint #ifdef SCCS -static char *_rio_enable_h_sccs = "@(#)enable.h 1.1" ; +static char *_rio_enable_h_sccs = "@(#)enable.h 1.1"; #endif #endif @@ -46,5 +46,3 @@ static char *_rio_enable_h_sccs = "@(#)enable.h 1.1" ; /*********** end of file ***********/ - - diff --git a/drivers/char/rio/error.h b/drivers/char/rio/error.h index 229438e355f2..f20f0789db8f 100644 --- a/drivers/char/rio/error.h +++ b/drivers/char/rio/error.h @@ -80,6 +80,3 @@ /*********** end of file ***********/ - - - diff --git a/drivers/char/rio/errors.h b/drivers/char/rio/errors.h index f920b9f3e2bd..1d0d89144337 100644 --- a/drivers/char/rio/errors.h +++ b/drivers/char/rio/errors.h @@ -101,4 +101,4 @@ static char *_errors_h_sccs_ = "@(#)errors.h 1.2"; #define NOT_ENOUGH_CORE_FOR_PCI_COPY 53 -#endif /* __rio_errors_h__ */ +#endif /* __rio_errors_h__ */ diff --git a/drivers/char/rio/formpkt.h b/drivers/char/rio/formpkt.h index a8b65ae0de90..3c7c91ace3ee 100644 --- a/drivers/char/rio/formpkt.h +++ b/drivers/char/rio/formpkt.h @@ -41,114 +41,113 @@ #ifndef lint #ifdef SCCS -static char *_rio_formpkt_h_sccs = "@(#)formpkt.h 1.1" ; +static char *_rio_formpkt_h_sccs = "@(#)formpkt.h 1.1"; #endif #endif -typedef struct FORM_BOOT_PKT_1 FORM_BOOT_PKT_1 ; +typedef struct FORM_BOOT_PKT_1 FORM_BOOT_PKT_1; struct FORM_BOOT_PKT_1 { - ushort pkt_number ; - ushort pkt_total ; - ushort boot_top ; - } ; + ushort pkt_number; + ushort pkt_total; + ushort boot_top; +}; -typedef struct FORM_BOOT_PKT_2 FORM_BOOT_PKT_2 ; +typedef struct FORM_BOOT_PKT_2 FORM_BOOT_PKT_2; struct FORM_BOOT_PKT_2 { - ushort pkt_number ; - char boot_data[10] ; - } ; + ushort pkt_number; + char boot_data[10]; +}; -typedef struct FORM_ATTACH_RTA FORM_ATTACH_RTA ; -struct FORM_ATTACH_RTA { - char cmd_code ; - char booter_serial[4] ; - char booter_link ; - char bootee_serial[4] ; - char bootee_link ; - } ; +typedef struct FORM_ATTACH_RTA FORM_ATTACH_RTA; +struct FORM_ATTACH_RTA { + char cmd_code; + char booter_serial[4]; + char booter_link; + char bootee_serial[4]; + char bootee_link; +}; -typedef struct FORM_BOOT_ID FORM_BOOT_ID ; -struct FORM_BOOT_ID { - char cmd_code ; - char bootee_serial[4] ; - char bootee_prod_id ; - char bootee_link ; - } ; +typedef struct FORM_BOOT_ID FORM_BOOT_ID; +struct FORM_BOOT_ID { + char cmd_code; + char bootee_serial[4]; + char bootee_prod_id; + char bootee_link; +}; -typedef struct FORM_ROUTE_1 FORM_ROUTE_1 ; +typedef struct FORM_ROUTE_1 FORM_ROUTE_1; struct FORM_ROUTE_1 { - char cmd_code ; - char pkt_number ; - char total_in_sequence ; - char unit_id ; - char host_unit_id ; - } ; - -typedef struct FORM_ROUTE_2 FORM_ROUTE_2 ; + char cmd_code; + char pkt_number; + char total_in_sequence; + char unit_id; + char host_unit_id; +}; + +typedef struct FORM_ROUTE_2 FORM_ROUTE_2; struct FORM_ROUTE_2 { - char cmd_code ; - char pkt_number ; - char total_in_sequence ; - char route_data[9] ; - } ; + char cmd_code; + char pkt_number; + char total_in_sequence; + char route_data[9]; +}; -typedef struct FORM_ROUTE_REQ FORM_ROUTE_REQ ; +typedef struct FORM_ROUTE_REQ FORM_ROUTE_REQ; struct FORM_ROUTE_REQ { - char cmd_code ; - char pkt_number ; - char total_in_sequence ; - char route_data[10] ; - } ; + char cmd_code; + char pkt_number; + char total_in_sequence; + char route_data[10]; +}; -typedef struct FORM_ERROR FORM_ERROR ; +typedef struct FORM_ERROR FORM_ERROR; struct FORM_ERROR { - char cmd_code ; - char error_code ; + char cmd_code; + char error_code; - } ; +}; -typedef struct FORM_STATUS FORM_STATUS ; +typedef struct FORM_STATUS FORM_STATUS; struct FORM_STATUS { - char cmd_code ; - char status_code ; - char last_packet_valid ; - char tx_buffer ; - char rx_buffer ; - char port_status ; - char phb_status ; - } ; + char cmd_code; + char status_code; + char last_packet_valid; + char tx_buffer; + char rx_buffer; + char port_status; + char phb_status; +}; -typedef struct FORM_LINK_STATUS FORM_LINK_STATUS ; +typedef struct FORM_LINK_STATUS FORM_LINK_STATUS; struct FORM_LINK_STATUS { - char cmd_code ; - char status_code ; - char link_number ; - ushort rx_errors ; - ushort tx_errors ; - ushort csum_errors ; - ushort disconnects ; - } ; + char cmd_code; + char status_code; + char link_number; + ushort rx_errors; + ushort tx_errors; + ushort csum_errors; + ushort disconnects; +}; -typedef struct FORM_PARTITION FORM_PARTITION ; +typedef struct FORM_PARTITION FORM_PARTITION; struct FORM_PARTITION { - char cmd_code ; - char status_code ; - char port_number ; - char tx_max ; - char rx_max ; - char rx_limit ; - } ; + char cmd_code; + char status_code; + char port_number; + char tx_max; + char rx_max; + char rx_limit; +}; #endif /*********** end of file ***********/ - diff --git a/drivers/char/rio/func.h b/drivers/char/rio/func.h index 01987c6dc398..b4778410ec6e 100644 --- a/drivers/char/rio/func.h +++ b/drivers/char/rio/func.h @@ -47,20 +47,19 @@ int RIOBootCodeHOST(struct rio_info *, register struct DownLoad *); int RIOBootCodeUNKNOWN(struct rio_info *, struct DownLoad *); void msec_timeout(struct Host *); int RIOBootRup(struct rio_info *, uint, struct Host *, struct PKT *); -int RIOBootOk(struct rio_info *,struct Host *, ulong); -int RIORtaBound(struct rio_info *, uint); +int RIOBootOk(struct rio_info *, struct Host *, ulong); +int RIORtaBound(struct rio_info *, uint); void FillSlot(int, int, uint, struct Host *); /* riocmd.c */ int RIOFoadRta(struct Host *, struct Map *); int RIOZombieRta(struct Host *, struct Map *); -int RIOCommandRta(struct rio_info *, uint, int (* func)( struct Host *, - struct Map *)); -int RIOIdentifyRta(struct rio_info *, caddr_t); +int RIOCommandRta(struct rio_info *, uint, int (*func) (struct Host *, struct Map *)); +int RIOIdentifyRta(struct rio_info *, caddr_t); int RIOKillNeighbour(struct rio_info *, caddr_t); int RIOSuspendBootRta(struct Host *, int, int); int RIOFoadWakeup(struct rio_info *); -struct CmdBlk * RIOGetCmdBlk(void); +struct CmdBlk *RIOGetCmdBlk(void); void RIOFreeCmdBlk(struct CmdBlk *); int RIOQueueCmdBlk(struct Host *, uint, struct CmdBlk *); void RIOPollHostCommands(struct rio_info *, struct Host *); @@ -71,13 +70,13 @@ void ShowPacket(uint, struct PKT *); /* rioctrl.c */ int copyin(int, caddr_t, int); -int riocontrol(struct rio_info *, dev_t,int,caddr_t,int); -int RIOPreemptiveCmd(struct rio_info *,struct Port *,uchar); +int riocontrol(struct rio_info *, dev_t, int, caddr_t, int); +int RIOPreemptiveCmd(struct rio_info *, struct Port *, uchar); /* rioinit.c */ void rioinit(struct rio_info *, struct RioHostInfo *); void RIOInitHosts(struct rio_info *, struct RioHostInfo *); -void RIOISAinit(struct rio_info *,int); +void RIOISAinit(struct rio_info *, int); int RIODoAT(struct rio_info *, int, int); caddr_t RIOCheckForATCard(int); int RIOAssignAT(struct rio_info *, int, caddr_t, int); @@ -85,7 +84,7 @@ int RIOBoardTest(paddr_t, caddr_t, uchar, int); void RIOAllocDataStructs(struct rio_info *); void RIOSetupDataStructs(struct rio_info *); int RIODefaultName(struct rio_info *, struct Host *, uint); -struct rioVersion * RIOVersid(void); +struct rioVersion *RIOVersid(void); int RIOMapin(paddr_t, int, caddr_t *); void RIOMapout(paddr_t, long, caddr_t); void RIOHostReset(uint, volatile struct DpRam *, uint); @@ -108,7 +107,7 @@ void remove_receive(struct Port *); /* rioroute.c */ int RIORouteRup(struct rio_info *, uint, struct Host *, struct PKT *); -void RIOFixPhbs(struct rio_info *, struct Host *, uint); +void RIOFixPhbs(struct rio_info *, struct Host *, uint); uint GetUnitType(uint); int RIOSetChange(struct rio_info *); int RIOFindFreeID(struct rio_info *, struct Host *, uint *, uint *); @@ -116,9 +115,9 @@ int RIOFindFreeID(struct rio_info *, struct Host *, uint *, uint *); /* riotty.c */ -int riotopen(struct tty_struct * tty, struct file * filp); -int riotclose(void *ptr); -int riotioctl(struct rio_info *, struct tty_struct *, register int, register caddr_t); +int riotopen(struct tty_struct *tty, struct file *filp); +int riotclose(void *ptr); +int riotioctl(struct rio_info *, struct tty_struct *, register int, register caddr_t); void ttyseth(struct Port *, struct ttystatics *, struct old_sgttyb *sg); /* riotable.c */ @@ -127,27 +126,27 @@ 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*); +int RIOChangeName(struct rio_info *, struct Map *); #if 0 /* riodrvr.c */ -struct rio_info * rio_install(struct RioHostInfo *); +struct rio_info *rio_install(struct RioHostInfo *); int rio_uninstall(register 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_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); +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 int rio_pcicopy(char *src, char *dst, int n); -extern int rio_minor (struct tty_struct *tty); -extern int rio_ismodem (struct tty_struct *tty); +extern int rio_pcicopy(char *src, char *dst, int n); +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); +extern void rio_start_card_running(struct Host *HostP); -#endif /* __func_h_def */ +#endif /* __func_h_def */ diff --git a/drivers/char/rio/host.h b/drivers/char/rio/host.h index 4c65963870a4..f7dfcedf7d45 100644 --- a/drivers/char/rio/host.h +++ b/drivers/char/rio/host.h @@ -49,33 +49,32 @@ static char *_host_h_sccs_ = "@(#)host.h 1.2"; ** Host data structure. This is used for the software equiv. of ** the host. */ -struct Host -{ - uchar Type; /* RIO_EISA, RIO_MCA, ... */ - uchar Ivec; /* POLLED or ivec number */ - uchar Mode; /* Control stuff */ - uchar Slot; /* Slot */ - volatile caddr_t Caddr; /* KV address of DPRAM */ - volatile struct DpRam *CardP; /* KV address of DPRAM, with overlay */ - paddr_t PaddrP; /* Phys. address of DPRAM */ - char Name[MAX_NAME_LEN]; /* The name of the host */ - uint UniqueNum; /* host unique number */ - spinlock_t HostLock; /* Lock structure for MPX */ - /*struct pci_devinfo PciDevInfo; *//* PCI Bus/Device/Function stuff */ - /*struct lockb HostLock; *//* Lock structure for MPX */ - uint WorkToBeDone; /* set to true each interrupt */ - uint InIntr; /* Being serviced? */ - uint IntSrvDone;/* host's interrupt has been serviced */ - int (*Copy)( caddr_t, caddr_t, 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. - */ - - ulong Flags; /* Whats going down */ +struct Host { + uchar Type; /* RIO_EISA, RIO_MCA, ... */ + uchar Ivec; /* POLLED or ivec number */ + uchar Mode; /* Control stuff */ + uchar Slot; /* Slot */ + volatile caddr_t Caddr; /* KV address of DPRAM */ + volatile struct DpRam *CardP; /* KV address of DPRAM, with overlay */ + paddr_t PaddrP; /* Phys. address of DPRAM */ + char Name[MAX_NAME_LEN]; /* The name of the host */ + uint UniqueNum; /* host unique number */ + spinlock_t HostLock; /* Lock structure for MPX */ + /*struct pci_devinfo PciDevInfo; *//* PCI Bus/Device/Function stuff */ + /*struct lockb HostLock; *//* Lock structure for MPX */ + uint WorkToBeDone; /* set to true each interrupt */ + uint InIntr; /* Being serviced? */ + uint IntSrvDone; /* host's interrupt has been serviced */ + int (*Copy) (caddr_t, caddr_t, 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. + */ + + ulong Flags; /* Whats going down */ #define RC_WAITING 0 #define RC_STARTUP 1 #define RC_RUNNING 2 @@ -93,25 +92,25 @@ struct Host #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 *PhbP; /* Pointer to the PHB array */ - ushort *PhbNumP; /* Ptr to Number of PHB's */ - struct LPB *LinkStrP ; /* Link Structure Array */ - struct RUP *RupP; /* Sixteen real rups here */ - struct PARM_MAP *ParmMapP; /* points to the parmmap */ - uint ExtraUnits[MAX_EXTRA_UNITS]; /* unknown things */ - uint 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 */ - long locks; /* long req'd for set_bit --RR */ - char ____end_marker____; + struct Top Topology[LINKS_PER_UNIT]; /* one per link */ + struct Map Mapping[MAX_RUP]; /* Mappings for host */ + struct PHB *PhbP; /* Pointer to the PHB array */ + ushort *PhbNumP; /* Ptr to Number of PHB's */ + struct LPB *LinkStrP; /* Link Structure Array */ + struct RUP *RupP; /* Sixteen real rups here */ + struct PARM_MAP *ParmMapP; /* points to the parmmap */ + uint ExtraUnits[MAX_EXTRA_UNITS]; /* unknown things */ + uint 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 */ + long locks; /* long req'd for set_bit --RR */ + char ____end_marker____; }; #define Control CardP->DpControl #define SetInt CardP->DpSetInt @@ -129,6 +128,6 @@ struct Host #define Year CardP->DpYear #define Week CardP->DpWeek -#define RIO_DUMBPARM 0x0860 /* what not to expect */ +#define RIO_DUMBPARM 0x0860 /* what not to expect */ #endif diff --git a/drivers/char/rio/hosthw.h b/drivers/char/rio/hosthw.h index f6f31ece6e32..6281fe47f4e9 100644 --- a/drivers/char/rio/hosthw.h +++ b/drivers/char/rio/hosthw.h @@ -37,7 +37,7 @@ #ifndef lint #ifdef SCCS_LABELS -static char *_rio_hosthw_h_sccs = "@(#)hosthw.h 1.2" ; +static char *_rio_hosthw_h_sccs = "@(#)hosthw.h 1.2"; #endif #endif @@ -53,5 +53,3 @@ static char *_rio_hosthw_h_sccs = "@(#)hosthw.h 1.2" ; /*********** end of file ***********/ - - diff --git a/drivers/char/rio/link.h b/drivers/char/rio/link.h index 972250348f4a..bfba5b0c033e 100644 --- a/drivers/char/rio/link.h +++ b/drivers/char/rio/link.h @@ -70,27 +70,27 @@ #define DIE_NOW (ushort) 0x0200 /* 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 */ +#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 */ /* States that a link can be in */ -#define LINK_DISCONNECTED ((ushort) 0) /* Disconnected */ -#define LINK_BOOT1 ((ushort) 1) /* Trying to send 1st stage boot */ -#define LINK_BOOT2 ((ushort) 2) /* Trying to send 2nd stage boot */ -#define LINK_BOOT2WAIT ((ushort) 3) /* Waiting for selftest results */ -#define LINK_BOOT3 ((ushort) 4) /* Trying to send 3rd stage boots */ -#define LINK_SYNC ((ushort) 5) /* Syncing */ +#define LINK_DISCONNECTED ((ushort) 0) /* Disconnected */ +#define LINK_BOOT1 ((ushort) 1) /* Trying to send 1st stage boot */ +#define LINK_BOOT2 ((ushort) 2) /* Trying to send 2nd stage boot */ +#define LINK_BOOT2WAIT ((ushort) 3) /* Waiting for selftest results */ +#define LINK_BOOT3 ((ushort) 4) /* Trying to send 3rd stage boots */ +#define LINK_SYNC ((ushort) 5) /* Syncing */ -#define LINK_INTRO ((ushort) 10) /* Introductory packet */ -#define LINK_SUPPLYID ((ushort) 11) /* Trying to supply an ID */ -#define LINK_TOPOLOGY ((ushort) 12) /* Send a topology update */ -#define LINK_REQUESTID ((ushort) 13) /* Waiting for an ID */ -#define LINK_CONNECTED ((ushort) 14) /* Connected */ +#define LINK_INTRO ((ushort) 10) /* Introductory packet */ +#define LINK_SUPPLYID ((ushort) 11) /* Trying to supply an ID */ +#define LINK_TOPOLOGY ((ushort) 12) /* Send a topology update */ +#define LINK_REQUESTID ((ushort) 13) /* Waiting for an ID */ +#define LINK_CONNECTED ((ushort) 14) /* Connected */ -#define LINK_INTERCONNECT ((ushort) 20) /* Subnets interconnected */ +#define LINK_INTERCONNECT ((ushort) 20) /* Subnets interconnected */ #define LINK_SPARE ((ushort) 40) @@ -103,12 +103,12 @@ ** LED stuff */ #if defined(RTA) -#define LED_OFF ((ushort) 0) /* LED off */ -#define LED_RED ((ushort) 1) /* LED Red */ -#define LED_GREEN ((ushort) 2) /* LED Green */ -#define LED_ORANGE ((ushort) 4) /* LED Orange */ -#define LED_1TO8_OPEN ((ushort) 1) /* Port 1->8 LED on */ -#define LED_9TO16_OPEN ((ushort) 2) /* Port 9->16 LED on */ +#define LED_OFF ((ushort) 0) /* LED off */ +#define LED_RED ((ushort) 1) /* LED Red */ +#define LED_GREEN ((ushort) 2) /* LED Green */ +#define LED_ORANGE ((ushort) 4) /* LED Orange */ +#define LED_1TO8_OPEN ((ushort) 1) /* Port 1->8 LED on */ +#define LED_9TO16_OPEN ((ushort) 2) /* Port 9->16 LED on */ #define LED_SET_COLOUR(colour) (link->led = (colour)) #define LED_OR_COLOUR(colour) (link->led |= (colour)) #define LED_TIMEOUT(time) (link->led_timeout = RioTimePlus(RioTime(),(time))) @@ -116,72 +116,72 @@ #define LED_SET_COLOUR(colour) #define LED_OR_COLOUR(colour) #define LED_TIMEOUT(time) -#endif /* RTA */ +#endif /* RTA */ struct LPB { - WORD link_number ; /* Link Number */ - Channel_ptr in_ch ; /* Link In Channel */ - Channel_ptr out_ch ; /* Link Out Channel */ + WORD link_number; /* Link Number */ + Channel_ptr in_ch; /* Link In Channel */ + Channel_ptr out_ch; /* Link Out Channel */ #ifdef RTA - uchar stat_led ; /* Port open leds */ - uchar led ; /* True, light led! */ + uchar stat_led; /* Port open leds */ + uchar led; /* True, light led! */ #endif - BYTE attached_serial[4]; /* Attached serial number */ - BYTE attached_host_serial[4]; - /* Serial number of Host who - booted the other end */ - WORD descheduled ; /* Currently Descheduled */ - WORD state; /* Current state */ - WORD send_poll ; /* Send a Poll Packet */ - Process_ptr ltt_p ; /* Process Descriptor */ - Process_ptr lrt_p ; /* Process Descriptor */ - WORD lrt_status ; /* Current lrt status */ - WORD ltt_status ; /* Current ltt status */ - WORD timeout ; /* Timeout value */ - WORD topology; /* Topology bits */ - WORD mon_ltt ; - WORD mon_lrt ; - WORD WaitNoBoot ; /* Secs to hold off booting */ - PKT_ptr add_packet_list; /* Add packets to here */ - PKT_ptr remove_packet_list; /* Send packets from here */ + BYTE attached_serial[4]; /* Attached serial number */ + BYTE attached_host_serial[4]; + /* Serial number of Host who + booted the other end */ + WORD descheduled; /* Currently Descheduled */ + WORD state; /* Current state */ + WORD send_poll; /* Send a Poll Packet */ + Process_ptr ltt_p; /* Process Descriptor */ + Process_ptr lrt_p; /* Process Descriptor */ + WORD lrt_status; /* Current lrt status */ + WORD ltt_status; /* Current ltt status */ + WORD timeout; /* Timeout value */ + WORD topology; /* Topology bits */ + WORD mon_ltt; + WORD mon_lrt; + WORD WaitNoBoot; /* Secs to hold off booting */ + PKT_ptr add_packet_list; /* Add packets to here */ + PKT_ptr remove_packet_list; /* Send packets from here */ #ifdef RTA #ifdef DCIRRUS -#define QBUFS_PER_REDIRECT (4 / PKTS_PER_BUFFER + 1) +#define QBUFS_PER_REDIRECT (4 / PKTS_PER_BUFFER + 1) #else -#define QBUFS_PER_REDIRECT (8 / PKTS_PER_BUFFER + 1) +#define QBUFS_PER_REDIRECT (8 / PKTS_PER_BUFFER + 1) #endif - PKT_ptr_ptr rd_add ; /* Add a new Packet here */ - Q_BUF_ptr rd_add_qb; /* Pointer to the add Q buf */ - PKT_ptr_ptr rd_add_st_qbb ; /* Pointer to start of the Q's buf */ - PKT_ptr_ptr rd_add_end_qbb ; /* Pointer to the end of the Q's buf */ - PKT_ptr_ptr rd_remove ; /* Remove a Packet here */ - Q_BUF_ptr rd_remove_qb ; /* Pointer to the remove Q buf */ - PKT_ptr_ptr rd_remove_st_qbb ; /* Pointer to the start of the Q buf */ - PKT_ptr_ptr rd_remove_end_qbb ; /* Pointer to the end of the Q buf */ - ushort pkts_in_q ; /* Packets in queue */ + PKT_ptr_ptr rd_add; /* Add a new Packet here */ + Q_BUF_ptr rd_add_qb; /* Pointer to the add Q buf */ + PKT_ptr_ptr rd_add_st_qbb; /* Pointer to start of the Q's buf */ + PKT_ptr_ptr rd_add_end_qbb; /* Pointer to the end of the Q's buf */ + PKT_ptr_ptr rd_remove; /* Remove a Packet here */ + Q_BUF_ptr rd_remove_qb; /* Pointer to the remove Q buf */ + PKT_ptr_ptr rd_remove_st_qbb; /* Pointer to the start of the Q buf */ + PKT_ptr_ptr rd_remove_end_qbb; /* Pointer to the end of the Q buf */ + ushort pkts_in_q; /* Packets in queue */ #endif - Channel_ptr lrt_fail_chan ; /* Lrt's failure channel */ - Channel_ptr ltt_fail_chan ; /* Ltt's failure channel */ + Channel_ptr lrt_fail_chan; /* Lrt's failure channel */ + Channel_ptr ltt_fail_chan; /* Ltt's failure channel */ #if defined (HOST) || defined (INKERNEL) - /* RUP structure for HOST to driver communications */ - struct RUP rup ; + /* RUP structure for HOST to driver communications */ + struct RUP rup; #endif - struct RUP link_rup; /* RUP for the link (POLL, - topology etc.) */ - WORD attached_link ; /* Number of attached link */ - WORD csum_errors ; /* csum errors */ - WORD num_disconnects ; /* number of disconnects */ - WORD num_sync_rcvd ; /* # sync's received */ - WORD num_sync_rqst ; /* # sync requests */ - WORD num_tx ; /* Num pkts sent */ - WORD num_rx ; /* Num pkts received */ - WORD module_attached; /* Module tpyes of attached */ - WORD led_timeout; /* LED timeout */ - WORD first_port; /* First port to service */ - WORD last_port; /* Last port to service */ - } ; + struct RUP link_rup; /* RUP for the link (POLL, + topology etc.) */ + WORD attached_link; /* Number of attached link */ + WORD csum_errors; /* csum errors */ + WORD num_disconnects; /* number of disconnects */ + WORD num_sync_rcvd; /* # sync's received */ + WORD num_sync_rqst; /* # sync requests */ + WORD num_tx; /* Num pkts sent */ + WORD num_rx; /* Num pkts received */ + WORD module_attached; /* Module tpyes of attached */ + WORD led_timeout; /* LED timeout */ + WORD first_port; /* First port to service */ + WORD last_port; /* Last port to service */ +}; #endif diff --git a/drivers/char/rio/linux_compat.h b/drivers/char/rio/linux_compat.h index d53843abe02d..17a14c4a3420 100644 --- a/drivers/char/rio/linux_compat.h +++ b/drivers/char/rio/linux_compat.h @@ -41,7 +41,7 @@ #endif struct ttystatics { - struct termios tm; + struct termios tm; }; #define bzero(d, n) memset((d), 0, (n)) @@ -97,26 +97,24 @@ 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 */ - - +#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 */ diff --git a/drivers/char/rio/list.h b/drivers/char/rio/list.h index a4f7f1f56255..36aad4c9cb3a 100644 --- a/drivers/char/rio/list.h +++ b/drivers/char/rio/list.h @@ -38,7 +38,7 @@ #ifdef SCCS_LABELS #ifndef lint -static char *_rio_list_h_sccs = "@(#)list.h 1.9" ; +static char *_rio_list_h_sccs = "@(#)list.h 1.9"; #endif #endif @@ -166,7 +166,7 @@ static char *_rio_list_h_sccs = "@(#)list.h 1.9" ; #endif -#else /* !IN_KERNEL */ +#else /* !IN_KERNEL */ #define ZERO_PTR NULL @@ -192,5 +192,5 @@ static char *_rio_list_h_sccs = "@(#)list.h 1.9" ; #define splx(oldspl) if ((oldspl) == 0) spl0() #endif -#endif /* ifndef _list.h */ +#endif /* ifndef _list.h */ /*********** end of file ***********/ diff --git a/drivers/char/rio/lrt.h b/drivers/char/rio/lrt.h index bbac8fa18fee..b41764d7a22a 100644 --- a/drivers/char/rio/lrt.h +++ b/drivers/char/rio/lrt.h @@ -36,7 +36,7 @@ #ifndef lint #ifdef SCCS_LABELS -static char *_rio_lrt_h_sccs = "@(#)lrt.h 1.1" ; +static char *_rio_lrt_h_sccs = "@(#)lrt.h 1.1"; #endif #endif @@ -50,6 +50,3 @@ static char *_rio_lrt_h_sccs = "@(#)lrt.h 1.1" ; /*********** end of file ***********/ - - - diff --git a/drivers/char/rio/ltt.h b/drivers/char/rio/ltt.h index f27dcecf03ca..ab04004d4048 100644 --- a/drivers/char/rio/ltt.h +++ b/drivers/char/rio/ltt.h @@ -36,7 +36,7 @@ #ifndef lint #ifdef SCCS_LABELS -static char *_rio_ltt_h_sccs = "@(#)ltt.h 1.1" ; +static char *_rio_ltt_h_sccs = "@(#)ltt.h 1.1"; #endif #endif @@ -45,11 +45,8 @@ static char *_rio_ltt_h_sccs = "@(#)ltt.h 1.1" ; #else #define LTT_STACK (ushort) 200 #endif - -/*********** end of file ***********/ - - +/*********** end of file ***********/ diff --git a/drivers/char/rio/lttwake.h b/drivers/char/rio/lttwake.h index fe17d0ee4933..fdf0c1f250ab 100644 --- a/drivers/char/rio/lttwake.h +++ b/drivers/char/rio/lttwake.h @@ -39,7 +39,7 @@ #ifndef lint #ifdef SCCS_LABELS -static char *_rio_lttwake_h_sccs = "@(#)lttwake.h 1.1" ; +static char *_rio_lttwake_h_sccs = "@(#)lttwake.h 1.1"; #endif #endif @@ -48,6 +48,3 @@ static char *_rio_lttwake_h_sccs = "@(#)lttwake.h 1.1" ; /*********** end of file ***********/ - - - diff --git a/drivers/char/rio/map.h b/drivers/char/rio/map.h index 400645a1ff28..97fe287aab2a 100644 --- a/drivers/char/rio/map.h +++ b/drivers/char/rio/map.h @@ -46,21 +46,20 @@ static char *_map_h_sccs_ = "@(#)map.h 1.2"; #define TOTAL_MAP_ENTRIES (MAX_MAP_ENTRY*RIO_SLOTS) #define MAX_NAME_LEN 32 -struct Map -{ - uint HostUniqueNum; /* Supporting hosts unique number */ - uint RtaUniqueNum; /* Unique number */ +struct Map { + uint HostUniqueNum; /* Supporting hosts unique number */ + uint 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). - */ - ushort ID; /* ID used in the subnet */ - ushort ID2; /* ID of 2nd block of 8 for 16 port */ - ulong Flags; /* Booted, ID Given, Disconnected */ - ulong 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 */ + ** 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). + */ + ushort ID; /* ID used in the subnet */ + ushort ID2; /* ID of 2nd block of 8 for 16 port */ + ulong Flags; /* Booted, ID Given, Disconnected */ + ulong 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 */ }; /* diff --git a/drivers/char/rio/mca.h b/drivers/char/rio/mca.h index 08a327e473af..d01e76be7a17 100644 --- a/drivers/char/rio/mca.h +++ b/drivers/char/rio/mca.h @@ -70,4 +70,4 @@ static char *_mca_h_sccs_ = "@(#)mca.h 1.2"; #define RIO_MCA_DEFAULT_MODE SLOW_LINKS -#endif /* __rio_mca_h__ */ +#endif /* __rio_mca_h__ */ diff --git a/drivers/char/rio/mesg.h b/drivers/char/rio/mesg.h index 9cf6c0bacea4..dd9be586ec6f 100644 --- a/drivers/char/rio/mesg.h +++ b/drivers/char/rio/mesg.h @@ -38,4 +38,4 @@ static char *_mesg_h_sccs_ = "@(#)mesg.h 1.2"; #endif -#endif /* __rio_mesg_h__ */ +#endif /* __rio_mesg_h__ */ diff --git a/drivers/char/rio/param.h b/drivers/char/rio/param.h index 2dc30b9aab37..de7e57180c91 100644 --- a/drivers/char/rio/param.h +++ b/drivers/char/rio/param.h @@ -42,20 +42,19 @@ static char *_param_h_sccs_ = "@(#)param.h 1.2"; ** the param command block, as used in OPEN and PARAM calls. */ -struct phb_param -{ - BYTE Cmd; /* It is very important that these line up */ - BYTE Cor1; /* with what is expected at the other end. */ - BYTE Cor2; /* to confirm that you've got it right, */ - BYTE Cor4; /* check with cirrus/cirrus.h */ - BYTE Cor5; - BYTE TxXon; /* Transmit X-On character */ - BYTE TxXoff; /* Transmit X-Off character */ - BYTE RxXon; /* Receive X-On character */ - BYTE RxXoff; /* Receive X-Off character */ - BYTE LNext; /* Literal-next character */ - BYTE TxBaud; /* Transmit baudrate */ - BYTE RxBaud; /* Receive baudrate */ +struct phb_param { + BYTE Cmd; /* It is very important that these line up */ + BYTE Cor1; /* with what is expected at the other end. */ + BYTE Cor2; /* to confirm that you've got it right, */ + BYTE Cor4; /* check with cirrus/cirrus.h */ + BYTE Cor5; + BYTE TxXon; /* Transmit X-On character */ + BYTE TxXoff; /* Transmit X-Off character */ + BYTE RxXon; /* Receive X-On character */ + BYTE RxXoff; /* Receive X-Off character */ + BYTE LNext; /* Literal-next character */ + BYTE TxBaud; /* Transmit baudrate */ + BYTE RxBaud; /* Receive baudrate */ }; #endif diff --git a/drivers/char/rio/parmmap.h b/drivers/char/rio/parmmap.h index 46f99dfdac8d..fe4e00567065 100644 --- a/drivers/char/rio/parmmap.h +++ b/drivers/char/rio/parmmap.h @@ -44,53 +44,50 @@ #endif #endif -typedef struct PARM_MAP PARM_MAP ; +typedef struct PARM_MAP PARM_MAP; -struct PARM_MAP -{ -PHB_ptr phb_ptr ; /* Pointer to the PHB array */ -WORD_ptr phb_num_ptr ; /* Ptr to Number of PHB's */ -FREE_LIST_ptr free_list; /* Free List pointer */ -FREE_LIST_ptr free_list_end; /* Free List End pointer */ -Q_BUF_ptr_ptr q_free_list_ptr ; /* Ptr to Q_BUF variable */ -BYTE_ptr unit_id_ptr ; /* Unit Id */ -LPB_ptr link_str_ptr ; /* Link Structure Array */ -BYTE_ptr bootloader_1 ; /* 1st Stage Boot Loader */ -BYTE_ptr bootloader_2 ; /* 2nd Stage Boot Loader */ -WORD_ptr port_route_map_ptr ; /* Port Route Map */ -ROUTE_STR_ptr route_ptr ; /* Unit Route Map */ -NUMBER_ptr map_present ; /* Route Map present */ -NUMBER pkt_num ; /* Total number of packets */ -NUMBER q_num ; /* Total number of Q packets */ -WORD buffers_per_port ; /* Number of buffers per port */ -WORD heap_size ; /* Initial size of heap */ -WORD heap_left ; /* Current Heap left */ -WORD error ; /* Error code */ -WORD tx_max; /* Max number of tx pkts per phb */ -WORD rx_max; /* Max number of rx pkts per phb */ -WORD rx_limit; /* For high / low watermarks */ -NUMBER links ; /* Links to use */ -NUMBER timer ; /* Interrupts per second */ -RUP_ptr rups ; /* Pointer to the RUPs */ -WORD max_phb ; /* Mostly for debugging */ -WORD living ; /* Just increments!! */ -WORD init_done ; /* Initialisation over */ -WORD booting_link ; -WORD idle_count ; /* Idle time counter */ -WORD busy_count ; /* Busy counter */ -WORD idle_control ; /* Control Idle Process */ +struct PARM_MAP { + PHB_ptr phb_ptr; /* Pointer to the PHB array */ + WORD_ptr phb_num_ptr; /* Ptr to Number of PHB's */ + FREE_LIST_ptr free_list; /* Free List pointer */ + FREE_LIST_ptr free_list_end; /* Free List End pointer */ + Q_BUF_ptr_ptr q_free_list_ptr; /* Ptr to Q_BUF variable */ + BYTE_ptr unit_id_ptr; /* Unit Id */ + LPB_ptr link_str_ptr; /* Link Structure Array */ + BYTE_ptr bootloader_1; /* 1st Stage Boot Loader */ + BYTE_ptr bootloader_2; /* 2nd Stage Boot Loader */ + WORD_ptr port_route_map_ptr; /* Port Route Map */ + ROUTE_STR_ptr route_ptr; /* Unit Route Map */ + NUMBER_ptr map_present; /* Route Map present */ + NUMBER pkt_num; /* Total number of packets */ + NUMBER q_num; /* Total number of Q packets */ + WORD buffers_per_port; /* Number of buffers per port */ + WORD heap_size; /* Initial size of heap */ + WORD heap_left; /* Current Heap left */ + WORD error; /* Error code */ + WORD tx_max; /* Max number of tx pkts per phb */ + WORD rx_max; /* Max number of rx pkts per phb */ + WORD rx_limit; /* For high / low watermarks */ + NUMBER links; /* Links to use */ + NUMBER timer; /* Interrupts per second */ + RUP_ptr rups; /* Pointer to the RUPs */ + WORD max_phb; /* Mostly for debugging */ + WORD living; /* Just increments!! */ + WORD init_done; /* Initialisation over */ + WORD booting_link; + WORD idle_count; /* Idle time counter */ + WORD busy_count; /* Busy counter */ + WORD idle_control; /* Control Idle Process */ #if defined(HOST) || defined(INKERNEL) -WORD tx_intr; /* TX interrupt pending */ -WORD rx_intr; /* RX interrupt pending */ -WORD rup_intr; /* RUP interrupt pending */ + WORD tx_intr; /* TX interrupt pending */ + WORD rx_intr; /* RX interrupt pending */ + WORD rup_intr; /* RUP interrupt pending */ #endif #if defined(RTA) -WORD dying_count; /* Count of processes dead */ + WORD dying_count; /* Count of processes dead */ #endif -} ; +}; #endif /*********** end of file ***********/ - - diff --git a/drivers/char/rio/pci.h b/drivers/char/rio/pci.h index dc635bd25194..1eba9118079b 100644 --- a/drivers/char/rio/pci.h +++ b/drivers/char/rio/pci.h @@ -73,4 +73,4 @@ static char *_pci_h_sccs_ = "@(#)pci.h 1.2"; #define RIO_PCI_DEFAULT_MODE 0x05 -#endif /* __rio_pci_h__ */ +#endif /* __rio_pci_h__ */ diff --git a/drivers/char/rio/phb.h b/drivers/char/rio/phb.h index e1483a0e30bd..3baebf8513af 100644 --- a/drivers/char/rio/phb.h +++ b/drivers/char/rio/phb.h @@ -58,37 +58,37 @@ /************************************************* * Handshake asserted. Deasserted by the LTT(s) ************************************************/ -#define PHB_HANDSHAKE_SET ((ushort) 0x001) /* Set by LRT */ +#define PHB_HANDSHAKE_SET ((ushort) 0x001) /* Set by LRT */ -#define PHB_HANDSHAKE_RESET ((ushort) 0x002) /* Set by ISR / driver */ +#define PHB_HANDSHAKE_RESET ((ushort) 0x002) /* Set by ISR / driver */ #define PHB_HANDSHAKE_FLAGS (PHB_HANDSHAKE_RESET | PHB_HANDSHAKE_SET) - /* Reset by ltt */ + /* Reset by ltt */ /************************************************* * Maximum number of PHB's ************************************************/ #if defined (HOST) || defined (INKERNEL) -#define MAX_PHB ((ushort) 128) /* range 0-127 */ +#define MAX_PHB ((ushort) 128) /* range 0-127 */ #else -#define MAX_PHB ((ushort) 8) /* range 0-7 */ +#define MAX_PHB ((ushort) 8) /* range 0-7 */ #endif /************************************************* * Defines for the mode fields ************************************************/ -#define TXPKT_INCOMPLETE 0x0001 /* Previous tx packet not completed */ -#define TXINTR_ENABLED 0x0002 /* Tx interrupt is enabled */ -#define TX_TAB3 0x0004 /* TAB3 mode */ -#define TX_OCRNL 0x0008 /* OCRNL mode */ -#define TX_ONLCR 0x0010 /* ONLCR mode */ -#define TX_SENDSPACES 0x0020 /* Send n spaces command needs - completing */ -#define TX_SENDNULL 0x0040 /* Escaping NULL needs completing */ -#define TX_SENDLF 0x0080 /* LF -> CR LF needs completing */ -#define TX_PARALLELBUG 0x0100 /* CD1400 LF -> CR LF bug on parallel - port */ +#define TXPKT_INCOMPLETE 0x0001 /* Previous tx packet not completed */ +#define TXINTR_ENABLED 0x0002 /* Tx interrupt is enabled */ +#define TX_TAB3 0x0004 /* TAB3 mode */ +#define TX_OCRNL 0x0008 /* OCRNL mode */ +#define TX_ONLCR 0x0010 /* ONLCR mode */ +#define TX_SENDSPACES 0x0020 /* Send n spaces command needs + completing */ +#define TX_SENDNULL 0x0040 /* Escaping NULL needs completing */ +#define TX_SENDLF 0x0080 /* LF -> CR LF needs completing */ +#define TX_PARALLELBUG 0x0100 /* CD1400 LF -> CR LF bug on parallel + port */ #define TX_HANGOVER (TX_SENDSPACES | TX_SENDLF | TX_SENDNULL) #define TX_DTRFLOW 0x0200 /* DTR tx flow control */ #define TX_DTRFLOWED 0x0400 /* DTR is low - don't allow more data @@ -96,34 +96,34 @@ #define TX_DATAINFIFO 0x0800 /* There is data in the FIFO */ #define TX_BUSY 0x1000 /* Data in FIFO, shift or holding regs */ -#define RX_SPARE 0x0001 /* SPARE */ -#define RXINTR_ENABLED 0x0002 /* Rx interrupt enabled */ -#define RX_ICRNL 0x0008 /* ICRNL mode */ -#define RX_INLCR 0x0010 /* INLCR mode */ -#define RX_IGNCR 0x0020 /* IGNCR mode */ -#define RX_CTSFLOW 0x0040 /* CTSFLOW enabled */ -#define RX_IXOFF 0x0080 /* IXOFF enabled */ -#define RX_CTSFLOWED 0x0100 /* CTSFLOW and CTS dropped */ -#define RX_IXOFFED 0x0200 /* IXOFF and xoff sent */ -#define RX_BUFFERED 0x0400 /* Try and pass on complete packets */ +#define RX_SPARE 0x0001 /* SPARE */ +#define RXINTR_ENABLED 0x0002 /* Rx interrupt enabled */ +#define RX_ICRNL 0x0008 /* ICRNL mode */ +#define RX_INLCR 0x0010 /* INLCR mode */ +#define RX_IGNCR 0x0020 /* IGNCR mode */ +#define RX_CTSFLOW 0x0040 /* CTSFLOW enabled */ +#define RX_IXOFF 0x0080 /* IXOFF enabled */ +#define RX_CTSFLOWED 0x0100 /* CTSFLOW and CTS dropped */ +#define RX_IXOFFED 0x0200 /* IXOFF and xoff sent */ +#define RX_BUFFERED 0x0400 /* Try and pass on complete packets */ -#define PORT_ISOPEN 0x0001 /* Port open? */ -#define PORT_HUPCL 0x0002 /* Hangup on close? */ -#define PORT_MOPENPEND 0x0004 /* Modem open pending */ -#define PORT_ISPARALLEL 0x0008 /* Parallel port */ -#define PORT_BREAK 0x0010 /* Port on break */ -#define PORT_STATUSPEND 0x0020 /* Status packet pending */ -#define PORT_BREAKPEND 0x0040 /* Break packet pending */ -#define PORT_MODEMPEND 0x0080 /* Modem status packet pending */ -#define PORT_PARALLELBUG 0x0100 /* CD1400 LF -> CR LF bug on parallel - port */ -#define PORT_FULLMODEM 0x0200 /* Full modem signals */ -#define PORT_RJ45 0x0400 /* RJ45 connector - no RI signal */ -#define PORT_RESTRICTED 0x0600 /* Restricted connector - no RI / DTR */ +#define PORT_ISOPEN 0x0001 /* Port open? */ +#define PORT_HUPCL 0x0002 /* Hangup on close? */ +#define PORT_MOPENPEND 0x0004 /* Modem open pending */ +#define PORT_ISPARALLEL 0x0008 /* Parallel port */ +#define PORT_BREAK 0x0010 /* Port on break */ +#define PORT_STATUSPEND 0x0020 /* Status packet pending */ +#define PORT_BREAKPEND 0x0040 /* Break packet pending */ +#define PORT_MODEMPEND 0x0080 /* Modem status packet pending */ +#define PORT_PARALLELBUG 0x0100 /* CD1400 LF -> CR LF bug on parallel + port */ +#define PORT_FULLMODEM 0x0200 /* Full modem signals */ +#define PORT_RJ45 0x0400 /* RJ45 connector - no RI signal */ +#define PORT_RESTRICTED 0x0600 /* Restricted connector - no RI / DTR */ -#define PORT_MODEMBITS 0x0600 /* Mask for modem fields */ +#define PORT_MODEMBITS 0x0600 /* Mask for modem fields */ -#define PORT_WCLOSE 0x0800 /* Waiting for close */ +#define PORT_WCLOSE 0x0800 /* Waiting for close */ #define PORT_HANDSHAKEFIX 0x1000 /* Port has H/W flow control fix */ #define PORT_WASPCLOSED 0x2000 /* Port closed with PCLOSE */ #define DUMPMODE 0x4000 /* Dump RTA mem */ @@ -155,139 +155,128 @@ #define rx_end u4.s1.rx_end_ptr_ptr #define rx_remove u4.s1.rx_remove_ptr_ptr #endif -typedef struct PHB PHB ; +typedef struct PHB PHB; struct PHB { #ifdef RTA - ushort port; + ushort port; #endif #ifdef INKERNEL - WORD source; + WORD source; #else - union - { - ushort source; /* Complete source */ - struct - { - unsigned char unit; /* Source unit */ - unsigned char port; /* Source port */ - } s2; - } u2; + union { + ushort source; /* Complete source */ + struct { + unsigned char unit; /* Source unit */ + unsigned char port; /* Source port */ + } s2; + } u2; #endif - WORD handshake ; - WORD status ; - NUMBER timeout ; /* Maximum of 1.9 seconds */ - WORD link ; /* Send down this link */ + WORD handshake; + WORD status; + NUMBER timeout; /* Maximum of 1.9 seconds */ + WORD link; /* Send down this link */ #ifdef INKERNEL - WORD destination; + WORD destination; #else - union - { - ushort destination; /* Complete destination */ - struct - { - unsigned char unit; /* Destination unit */ - unsigned char port; /* Destination port */ - } s1; - } u1; + union { + ushort destination; /* Complete destination */ + struct { + unsigned char unit; /* Destination unit */ + unsigned char port; /* Destination port */ + } s1; + } u1; #endif #ifdef RTA - ushort tx_pkts_added; - ushort tx_pkts_removed; - Q_BUF_ptr tx_q_start ; /* Start of the Q list chain */ - short num_tx_q_bufs ; /* Number of Q buffers in the chain */ - PKT_ptr_ptr tx_add ; /* Add a new Packet here */ - Q_BUF_ptr tx_add_qb; /* Pointer to the add Q buf */ - PKT_ptr_ptr tx_add_st_qbb ; /* Pointer to start of the Q's buf */ - PKT_ptr_ptr tx_add_end_qbb ; /* Pointer to the end of the Q's buf */ - PKT_ptr_ptr tx_remove ; /* Remove a Packet here */ - Q_BUF_ptr tx_remove_qb ; /* Pointer to the remove Q buf */ - PKT_ptr_ptr tx_remove_st_qbb ; /* Pointer to the start of the Q buf */ - PKT_ptr_ptr tx_remove_end_qbb ; /* Pointer to the end of the Q buf */ + ushort tx_pkts_added; + ushort tx_pkts_removed; + Q_BUF_ptr tx_q_start; /* Start of the Q list chain */ + short num_tx_q_bufs; /* Number of Q buffers in the chain */ + PKT_ptr_ptr tx_add; /* Add a new Packet here */ + Q_BUF_ptr tx_add_qb; /* Pointer to the add Q buf */ + PKT_ptr_ptr tx_add_st_qbb; /* Pointer to start of the Q's buf */ + PKT_ptr_ptr tx_add_end_qbb; /* Pointer to the end of the Q's buf */ + PKT_ptr_ptr tx_remove; /* Remove a Packet here */ + Q_BUF_ptr tx_remove_qb; /* Pointer to the remove Q buf */ + PKT_ptr_ptr tx_remove_st_qbb; /* Pointer to the start of the Q buf */ + PKT_ptr_ptr tx_remove_end_qbb; /* Pointer to the end of the Q buf */ #endif #ifdef INKERNEL - PKT_ptr_ptr tx_start ; - PKT_ptr_ptr tx_end ; - PKT_ptr_ptr tx_add ; - PKT_ptr_ptr tx_remove ; + PKT_ptr_ptr tx_start; + PKT_ptr_ptr tx_end; + PKT_ptr_ptr tx_add; + PKT_ptr_ptr tx_remove; #endif #ifdef HOST - union - { - struct - { - PKT_ptr_ptr tx_start_ptr_ptr; - PKT_ptr_ptr tx_end_ptr_ptr; - PKT_ptr_ptr tx_add_ptr_ptr; - PKT_ptr_ptr tx_remove_ptr_ptr; - } s1; - struct - { - ushort * tx_start_ptr; - ushort * tx_end_ptr; - ushort * tx_add_ptr; - ushort * tx_remove_ptr; - } s2; - } u3; + union { + struct { + PKT_ptr_ptr tx_start_ptr_ptr; + PKT_ptr_ptr tx_end_ptr_ptr; + PKT_ptr_ptr tx_add_ptr_ptr; + PKT_ptr_ptr tx_remove_ptr_ptr; + } s1; + struct { + ushort *tx_start_ptr; + ushort *tx_end_ptr; + ushort *tx_add_ptr; + ushort *tx_remove_ptr; + } s2; + } u3; #endif #ifdef RTA - ushort rx_pkts_added; - ushort rx_pkts_removed; - Q_BUF_ptr rx_q_start ; /* Start of the Q list chain */ - short num_rx_q_bufs ; /* Number of Q buffers in the chain */ - PKT_ptr_ptr rx_add ; /* Add a new Packet here */ - Q_BUF_ptr rx_add_qb ; /* Pointer to the add Q buf */ - PKT_ptr_ptr rx_add_st_qbb ; /* Pointer to start of the Q's buf */ - PKT_ptr_ptr rx_add_end_qbb ; /* Pointer to the end of the Q's buf */ - PKT_ptr_ptr rx_remove ; /* Remove a Packet here */ - Q_BUF_ptr rx_remove_qb ; /* Pointer to the remove Q buf */ - PKT_ptr_ptr rx_remove_st_qbb ; /* Pointer to the start of the Q buf */ - PKT_ptr_ptr rx_remove_end_qbb ; /* Pointer to the end of the Q buf */ + ushort rx_pkts_added; + ushort rx_pkts_removed; + Q_BUF_ptr rx_q_start; /* Start of the Q list chain */ + short num_rx_q_bufs; /* Number of Q buffers in the chain */ + PKT_ptr_ptr rx_add; /* Add a new Packet here */ + Q_BUF_ptr rx_add_qb; /* Pointer to the add Q buf */ + PKT_ptr_ptr rx_add_st_qbb; /* Pointer to start of the Q's buf */ + PKT_ptr_ptr rx_add_end_qbb; /* Pointer to the end of the Q's buf */ + PKT_ptr_ptr rx_remove; /* Remove a Packet here */ + Q_BUF_ptr rx_remove_qb; /* Pointer to the remove Q buf */ + PKT_ptr_ptr rx_remove_st_qbb; /* Pointer to the start of the Q buf */ + PKT_ptr_ptr rx_remove_end_qbb; /* Pointer to the end of the Q buf */ #endif #ifdef INKERNEL - PKT_ptr_ptr rx_start ; - PKT_ptr_ptr rx_end ; - PKT_ptr_ptr rx_add ; - PKT_ptr_ptr rx_remove ; + PKT_ptr_ptr rx_start; + PKT_ptr_ptr rx_end; + PKT_ptr_ptr rx_add; + PKT_ptr_ptr rx_remove; #endif #ifdef HOST - union - { - struct - { - PKT_ptr_ptr rx_start_ptr_ptr; - PKT_ptr_ptr rx_end_ptr_ptr; - PKT_ptr_ptr rx_add_ptr_ptr; - PKT_ptr_ptr rx_remove_ptr_ptr; - } s1; - struct - { - ushort * rx_start_ptr; - ushort * rx_end_ptr; - ushort * rx_add_ptr; - ushort * rx_remove_ptr; - } s2; - } u4; + union { + struct { + PKT_ptr_ptr rx_start_ptr_ptr; + PKT_ptr_ptr rx_end_ptr_ptr; + PKT_ptr_ptr rx_add_ptr_ptr; + PKT_ptr_ptr rx_remove_ptr_ptr; + } s1; + struct { + ushort *rx_start_ptr; + ushort *rx_end_ptr; + ushort *rx_add_ptr; + ushort *rx_remove_ptr; + } s2; + } u4; #endif -#ifdef RTA /* some fields for the remotes */ - ushort flush_count; /* Count of write flushes */ - ushort txmode; /* Modes for tx */ - ushort rxmode; /* Modes for rx */ - ushort portmode; /* Generic modes */ - ushort column; /* TAB3 column count */ - ushort tx_subscript; /* (TX) Subscript into data field */ - ushort rx_subscript; /* (RX) Subscript into data field */ - PKT_ptr rx_incomplete; /* Hold an incomplete packet here */ - ushort modem_bits; /* Modem bits to mask */ - ushort lastModem; /* Modem control lines. */ - ushort addr; /* Address for sub commands */ - ushort MonitorTstate; /* TRUE if monitoring tstop */ +#ifdef RTA /* some fields for the remotes */ + ushort flush_count; /* Count of write flushes */ + ushort txmode; /* Modes for tx */ + ushort rxmode; /* Modes for rx */ + ushort portmode; /* Generic modes */ + ushort column; /* TAB3 column count */ + ushort tx_subscript; /* (TX) Subscript into data field */ + ushort rx_subscript; /* (RX) Subscript into data field */ + PKT_ptr rx_incomplete; /* Hold an incomplete packet here */ + ushort modem_bits; /* Modem bits to mask */ + ushort lastModem; /* Modem control lines. */ + ushort addr; /* Address for sub commands */ + ushort MonitorTstate; /* TRUE if monitoring tstop */ #endif - } ; +}; #endif /*********** end of file ***********/ - diff --git a/drivers/char/rio/pkt.h b/drivers/char/rio/pkt.h index 66bb2ff0f694..882fd429ac2e 100644 --- a/drivers/char/rio/pkt.h +++ b/drivers/char/rio/pkt.h @@ -69,52 +69,44 @@ #define CONTROL_PKT_TTL_MASK (PKT_TTL_MASK << 8) #define CONTROL_DATA_WNDW (DATA_WNDW << 8) -struct PKT { +struct PKT { #ifdef INKERNEL - BYTE dest_unit ; /* Destination Unit Id */ - BYTE dest_port ; /* Destination POrt */ - BYTE src_unit ; /* Source Unit Id */ - BYTE src_port ; /* Source POrt */ + BYTE dest_unit; /* Destination Unit Id */ + BYTE dest_port; /* Destination POrt */ + BYTE src_unit; /* Source Unit Id */ + BYTE src_port; /* Source POrt */ #else - union - { - ushort destination; /* Complete destination */ - struct - { - unsigned char unit; /* Destination unit */ - unsigned char port; /* Destination port */ - } s1; - } u1; - union - { - ushort source; /* Complete source */ - struct - { - unsigned char unit; /* Source unit */ - unsigned char port; /* Source port */ - } s2; - } u2; + union { + ushort destination; /* Complete destination */ + struct { + unsigned char unit; /* Destination unit */ + unsigned char port; /* Destination port */ + } s1; + } u1; + union { + ushort source; /* Complete source */ + struct { + unsigned char unit; /* Source unit */ + unsigned char port; /* Source port */ + } s2; + } u2; #endif #ifdef INKERNEL - BYTE len ; - BYTE control; + BYTE len; + BYTE control; #else - union - { - ushort control; - struct - { - unsigned char len; - unsigned char control; - } s3; - } u3; + union { + ushort control; + struct { + unsigned char len; + unsigned char control; + } s3; + } u3; #endif - BYTE data[PKT_MAX_DATA_LEN] ; - /* Actual data :-) */ - WORD csum ; /* C-SUM */ - } ; + BYTE data[PKT_MAX_DATA_LEN]; + /* Actual data :-) */ + WORD csum; /* C-SUM */ +}; #endif /*********** end of file ***********/ - - diff --git a/drivers/char/rio/poll.h b/drivers/char/rio/poll.h index d9b8e983e175..9616ee4c6cd5 100644 --- a/drivers/char/rio/poll.h +++ b/drivers/char/rio/poll.h @@ -39,7 +39,7 @@ #ifndef lint #ifdef SCCS_LABELS -static char *_rio_poll_h_sccs = "@(#)poll.h 1.2" ; +static char *_rio_poll_h_sccs = "@(#)poll.h 1.2"; #endif #endif @@ -54,23 +54,20 @@ static char *_rio_poll_h_sccs = "@(#)poll.h 1.2" ; #define POLL_PERIOD (int) SECOND /* The various poll commands */ -#define POLL_POLL 0 /* We are connected and happy.. */ -#define POLL_INTRO 1 /* Introduction packet */ -#define POLL_TOPOLOGY 2 /* Topology update */ -#define POLL_ASSIGN 3 /* ID assign */ -#define POLL_FOAD 4 /* F*** Off And Die */ -#define POLL_LMD 5 /* Let Me Die */ -#define POLL_DYB 6 /* Die You Ba***** */ +#define POLL_POLL 0 /* We are connected and happy.. */ +#define POLL_INTRO 1 /* Introduction packet */ +#define POLL_TOPOLOGY 2 /* Topology update */ +#define POLL_ASSIGN 3 /* ID assign */ +#define POLL_FOAD 4 /* F*** Off And Die */ +#define POLL_LMD 5 /* Let Me Die */ +#define POLL_DYB 6 /* Die You Ba***** */ /* The way data fields are split up for POLL packets */ -#define POLL_HOST_SERIAL 2 /* Host who booted me */ -#define POLL_MY_SERIAL 6 /* My serial number */ -#define POLL_YOUR_ID 1 /* Your ID number */ -#define POLL_TOPOLOGY_FIELDS 2 /* Topology maps */ +#define POLL_HOST_SERIAL 2 /* Host who booted me */ +#define POLL_MY_SERIAL 6 /* My serial number */ +#define POLL_YOUR_ID 1 /* Your ID number */ +#define POLL_TOPOLOGY_FIELDS 2 /* Topology maps */ #endif /*********** end of file ***********/ - - - diff --git a/drivers/char/rio/port.h b/drivers/char/rio/port.h index 8506af06aa9f..c99b1e70fdc8 100644 --- a/drivers/char/rio/port.h +++ b/drivers/char/rio/port.h @@ -46,96 +46,94 @@ static char *_port_h_sccs_ = "@(#)port.h 1.3"; */ #ifdef STATS -struct RIOStats -{ +struct RIOStats { /* - ** interrupt statistics - */ - uint BreakIntCnt; - uint ModemOffCnt; - uint ModemOnCnt; - uint RxIntCnt; - uint TxIntCnt; + ** interrupt statistics + */ + uint BreakIntCnt; + uint ModemOffCnt; + uint ModemOnCnt; + uint RxIntCnt; + uint TxIntCnt; /* - ** throughput statistics - */ - uint RxCharCnt; - uint RxPktCnt; - uint RxSaveCnt; - uint TxCharCnt; - uint TxPktCnt; + ** throughput statistics + */ + uint RxCharCnt; + uint RxPktCnt; + uint RxSaveCnt; + uint TxCharCnt; + uint TxPktCnt; /* - ** driver entry statistics - */ - uint CloseCnt; - uint IoctlCnt; - uint OpenCnt; - uint ReadCnt; - uint WriteCnt; + ** driver entry statistics + */ + uint CloseCnt; + uint IoctlCnt; + uint OpenCnt; + uint ReadCnt; + uint WriteCnt; /* - ** proc statistics - */ - uint BlockCnt; - uint OutputCnt; - uint ResumeCnt; - uint RflushCnt; - uint SuspendCnt; - uint TbreakCnt; - uint TimeoutCnt; - uint UnblockCnt; - uint WflushCnt; - uint WFBodgeCnt; + ** proc statistics + */ + uint BlockCnt; + uint OutputCnt; + uint ResumeCnt; + uint RflushCnt; + uint SuspendCnt; + uint TbreakCnt; + uint TimeoutCnt; + uint UnblockCnt; + uint WflushCnt; + uint WFBodgeCnt; }; #endif /* ** Port data structure */ -struct Port -{ - struct gs_port gs; - int PortNum; /* RIO port no., 0-511 */ - struct Host *HostP; - volatile caddr_t Caddr; - ushort HostPort; /* Port number on host card */ - uchar RupNum; /* Number of RUP for port */ - uchar ID2; /* Second ID of RTA for port */ - ulong State; /* FLAGS for open & xopen */ -#define RIO_LOPEN 0x00001 /* Local open */ -#define RIO_MOPEN 0x00002 /* Modem open */ -#define RIO_WOPEN 0x00004 /* Waiting for open */ -#define RIO_CLOSING 0x00008 /* The port is being close */ -#define RIO_XPBUSY 0x00010 /* Transparent printer busy */ -#define RIO_BREAKING 0x00020 /* Break in progress */ -#define RIO_DIRECT 0x00040 /* Doing Direct output */ -#define RIO_EXCLUSIVE 0x00080 /* Stream open for exclusive use */ -#define RIO_NDELAY 0x00100 /* Stream is open FNDELAY */ -#define RIO_CARR_ON 0x00200 /* Stream has carrier present */ -#define RIO_XPWANTR 0x00400 /* Stream wanted by Xprint */ -#define RIO_RBLK 0x00800 /* Stream is read-blocked */ -#define RIO_BUSY 0x01000 /* Stream is BUSY for write */ -#define RIO_TIMEOUT 0x02000 /* Stream timeout in progress */ -#define RIO_TXSTOP 0x04000 /* Stream output is stopped */ -#define RIO_WAITFLUSH 0x08000 /* Stream waiting for flush */ -#define RIO_DYNOROD 0x10000 /* Drain failed */ -#define RIO_DELETED 0x20000 /* RTA has been deleted */ -#define RIO_ISSCANCODE 0x40000 /* This line is in scancode mode */ +struct Port { + struct gs_port gs; + int PortNum; /* RIO port no., 0-511 */ + struct Host *HostP; + volatile caddr_t Caddr; + ushort HostPort; /* Port number on host card */ + uchar RupNum; /* Number of RUP for port */ + uchar ID2; /* Second ID of RTA for port */ + ulong State; /* FLAGS for open & xopen */ +#define RIO_LOPEN 0x00001 /* Local open */ +#define RIO_MOPEN 0x00002 /* Modem open */ +#define RIO_WOPEN 0x00004 /* Waiting for open */ +#define RIO_CLOSING 0x00008 /* The port is being close */ +#define RIO_XPBUSY 0x00010 /* Transparent printer busy */ +#define RIO_BREAKING 0x00020 /* Break in progress */ +#define RIO_DIRECT 0x00040 /* Doing Direct output */ +#define RIO_EXCLUSIVE 0x00080 /* Stream open for exclusive use */ +#define RIO_NDELAY 0x00100 /* Stream is open FNDELAY */ +#define RIO_CARR_ON 0x00200 /* Stream has carrier present */ +#define RIO_XPWANTR 0x00400 /* Stream wanted by Xprint */ +#define RIO_RBLK 0x00800 /* Stream is read-blocked */ +#define RIO_BUSY 0x01000 /* Stream is BUSY for write */ +#define RIO_TIMEOUT 0x02000 /* Stream timeout in progress */ +#define RIO_TXSTOP 0x04000 /* Stream output is stopped */ +#define RIO_WAITFLUSH 0x08000 /* Stream waiting for flush */ +#define RIO_DYNOROD 0x10000 /* Drain failed */ +#define RIO_DELETED 0x20000 /* RTA has been deleted */ +#define RIO_ISSCANCODE 0x40000 /* This line is in scancode mode */ #define RIO_USING_EUC 0x100000 /* Using extended Unix chars */ #define RIO_CAN_COOK 0x200000 /* This line can do cooking */ -#define RIO_TRIAD_MODE 0x400000 /* Enable TRIAD special ops. */ -#define RIO_TRIAD_BLOCK 0x800000 /* Next read will block */ -#define RIO_TRIAD_FUNC 0x1000000 /* Seen a function key coming in */ -#define RIO_THROTTLE_RX 0x2000000 /* RX needs to be throttled. */ +#define RIO_TRIAD_MODE 0x400000 /* Enable TRIAD special ops. */ +#define RIO_TRIAD_BLOCK 0x800000 /* Next read will block */ +#define RIO_TRIAD_FUNC 0x1000000 /* Seen a function key coming in */ +#define RIO_THROTTLE_RX 0x2000000 /* RX needs to be throttled. */ - ulong Config; /* FLAGS for NOREAD.... */ -#define RIO_NOREAD 0x0001 /* Are not allowed to read port */ -#define RIO_NOWRITE 0x0002 /* Are not allowed to write port */ -#define RIO_NOXPRINT 0x0004 /* Are not allowed to xprint port */ -#define RIO_NOMASK 0x0007 /* All not allowed things */ -#define RIO_IXANY 0x0008 /* Port is allowed ixany */ -#define RIO_MODEM 0x0010 /* Stream is a modem device */ -#define RIO_IXON 0x0020 /* Port is allowed ixon */ -#define RIO_WAITDRAIN 0x0040 /* Wait for port to completely drain */ + ulong Config; /* FLAGS for NOREAD.... */ +#define RIO_NOREAD 0x0001 /* Are not allowed to read port */ +#define RIO_NOWRITE 0x0002 /* Are not allowed to write port */ +#define RIO_NOXPRINT 0x0004 /* Are not allowed to xprint port */ +#define RIO_NOMASK 0x0007 /* All not allowed things */ +#define RIO_IXANY 0x0008 /* Port is allowed ixany */ +#define RIO_MODEM 0x0010 /* Stream is a modem device */ +#define RIO_IXON 0x0020 /* Port is allowed ixon */ +#define RIO_WAITDRAIN 0x0040 /* Wait for port to completely drain */ #define RIO_MAP_50_TO_50 0x0080 /* Map 50 baud to 50 baud */ #define RIO_MAP_110_TO_110 0x0100 /* Map 110 baud to 110 baud */ @@ -144,92 +142,90 @@ struct Port ** As LynxOS does not appear to support Hardware Flow Control ..... ** Define our own flow control flags in 'Config'. */ -#define RIO_CTSFLOW 0x0200 /* RIO's own CTSFLOW flag */ -#define RIO_RTSFLOW 0x0400 /* RIO's own RTSFLOW flag */ +#define RIO_CTSFLOW 0x0200 /* RIO's own CTSFLOW flag */ +#define RIO_RTSFLOW 0x0400 /* RIO's own RTSFLOW flag */ - struct PHB *PhbP; /* pointer to PHB for port */ - WORD *TxAdd; /* Add packets here */ - WORD *TxStart; /* Start of add array */ - WORD *TxEnd; /* End of add array */ - WORD *RxRemove; /* Remove packets here */ - WORD *RxStart; /* Start of remove array */ - WORD *RxEnd; /* End of remove array */ - uint RtaUniqueNum; /* Unique number of RTA */ - ushort PortState; /* status of port */ - ushort ModemState; /* status of modem lines */ - ulong ModemLines; /* Modem bits sent to RTA */ - uchar CookMode; /* who expands CR/LF? */ - uchar ParamSem; /* Prevent write during param */ - uchar Mapped; /* if port mapped onto host */ - uchar SecondBlock; /* if port belongs to 2nd block - of 16 port RTA */ - uchar InUse; /* how many pre-emptive cmds */ - uchar Lock; /* if params locked */ - uchar Store; /* if params stored across closes */ - uchar FirstOpen; /* TRUE if first time port opened */ - uchar FlushCmdBodge; /* if doing a (non)flush */ - uchar MagicFlags; /* require intr processing */ + struct PHB *PhbP; /* pointer to PHB for port */ + WORD *TxAdd; /* Add packets here */ + WORD *TxStart; /* Start of add array */ + WORD *TxEnd; /* End of add array */ + WORD *RxRemove; /* Remove packets here */ + WORD *RxStart; /* Start of remove array */ + WORD *RxEnd; /* End of remove array */ + uint RtaUniqueNum; /* Unique number of RTA */ + ushort PortState; /* status of port */ + ushort ModemState; /* status of modem lines */ + ulong ModemLines; /* Modem bits sent to RTA */ + uchar CookMode; /* who expands CR/LF? */ + uchar ParamSem; /* Prevent write during param */ + uchar Mapped; /* if port mapped onto host */ + uchar SecondBlock; /* if port belongs to 2nd block + of 16 port RTA */ + uchar InUse; /* how many pre-emptive cmds */ + uchar Lock; /* if params locked */ + uchar Store; /* if params stored across closes */ + uchar FirstOpen; /* TRUE if first time port opened */ + uchar FlushCmdBodge; /* if doing a (non)flush */ + uchar MagicFlags; /* require intr processing */ #define MAGIC_FLUSH 0x01 /* mirror of WflushFlag */ #define MAGIC_REBOOT 0x02 /* RTA re-booted, re-open ports */ #define MORE_OUTPUT_EYGOR 0x04 /* riotproc failed to empty clists */ - uchar WflushFlag; /* 1 How many WFLUSHs active */ + uchar WflushFlag; /* 1 How many WFLUSHs active */ /* ** Transparent print stuff */ - struct Xprint - { + struct Xprint { #ifndef MAX_XP_CTRL_LEN -#define MAX_XP_CTRL_LEN 16 /* ALSO IN DAEMON.H */ +#define MAX_XP_CTRL_LEN 16 /* ALSO IN DAEMON.H */ #endif - uint XpCps; - char XpOn[MAX_XP_CTRL_LEN]; - char XpOff[MAX_XP_CTRL_LEN]; - ushort XpLen; /* strlen(XpOn)+strlen(XpOff) */ - uchar XpActive; - uchar XpLastTickOk; /* TRUE if we can process */ + uint XpCps; + char XpOn[MAX_XP_CTRL_LEN]; + char XpOff[MAX_XP_CTRL_LEN]; + ushort XpLen; /* strlen(XpOn)+strlen(XpOff) */ + uchar XpActive; + uchar XpLastTickOk; /* TRUE if we can process */ #define XP_OPEN 00001 #define XP_RUNABLE 00002 - struct ttystatics *XttyP; - } Xprint; + struct ttystatics *XttyP; + } Xprint; #ifdef VPIX - v86_t *StashP; - uint IntMask; - struct termss VpixSs; - uchar ModemStatusReg; /* Modem status register */ + v86_t *StashP; + uint IntMask; + struct termss VpixSs; + uchar ModemStatusReg; /* Modem status register */ #endif - uchar RxDataStart; - uchar Cor2Copy; /* copy of COR2 */ - char *Name; /* points to the Rta's name */ + uchar RxDataStart; + uchar Cor2Copy; /* copy of COR2 */ + char *Name; /* points to the Rta's name */ #ifdef STATS - struct RIOStats Stat; /* ports statistics */ + struct RIOStats Stat; /* ports statistics */ #endif - char *TxRingBuffer; - ushort TxBufferIn; /* New data arrives here */ - ushort TxBufferOut; /* Intr removes data here */ - ushort OldTxBufferOut; /* Indicates if draining */ - int TimeoutId; /* Timeout ID */ - uint Debug; - uchar WaitUntilBooted; /* True if open should block */ - uint statsGather; /* True if gathering stats */ - ulong txchars; /* Chars transmitted */ - ulong rxchars; /* Chars received */ - ulong opens; /* port open count */ - ulong closes; /* port close count */ - ulong ioctls; /* ioctl count */ - uchar LastRxTgl; /* Last state of rx toggle bit */ - spinlock_t portSem; /* Lock using this sem */ - int MonitorTstate; /* Monitoring ? */ - int timeout_id; /* For calling 100 ms delays */ - int timeout_sem;/* For calling 100 ms delays */ - int firstOpen; /* First time open ? */ - char * p; /* save the global struc here .. */ + char *TxRingBuffer; + ushort TxBufferIn; /* New data arrives here */ + ushort TxBufferOut; /* Intr removes data here */ + ushort OldTxBufferOut; /* Indicates if draining */ + int TimeoutId; /* Timeout ID */ + uint Debug; + uchar WaitUntilBooted; /* True if open should block */ + uint statsGather; /* True if gathering stats */ + ulong txchars; /* Chars transmitted */ + ulong rxchars; /* Chars received */ + ulong opens; /* port open count */ + ulong closes; /* port close count */ + ulong ioctls; /* ioctl count */ + uchar LastRxTgl; /* Last state of rx toggle bit */ + spinlock_t portSem; /* Lock using this sem */ + int MonitorTstate; /* Monitoring ? */ + int timeout_id; /* For calling 100 ms delays */ + int timeout_sem; /* For calling 100 ms delays */ + int firstOpen; /* First time open ? */ + char *p; /* save the global struc here .. */ }; -struct ModuleInfo -{ - char *Name; - uint Flags[4]; /* one per port on a module */ +struct ModuleInfo { + char *Name; + uint Flags[4]; /* one per port on a module */ }; #endif @@ -238,8 +234,8 @@ struct ModuleInfo ** runs into problems with differing struct sizes between driver and config. */ struct PortParams { - uint Port; - ulong Config; - ulong State; - struct ttystatics *TtyP; + uint Port; + ulong Config; + ulong State; + struct ttystatics *TtyP; }; diff --git a/drivers/char/rio/proto.h b/drivers/char/rio/proto.h index ddff0ef84e3a..f9a3376333e5 100644 --- a/drivers/char/rio/proto.h +++ b/drivers/char/rio/proto.h @@ -23,15 +23,15 @@ /* ** boot.c */ -void init_boot( char *p, short stage); +void init_boot(char *p, short stage); /* ** disconct.c */ -void kill_boot ( LPB *link ); -void disconnected( LPB *link ); -short boot_3( LPB *link, PKT *pkt ); -short send_3_pkt( LPB *link, PKT *pkt); +void kill_boot(LPB * link); +void disconnected(LPB * link); +short boot_3(LPB * link, PKT * pkt); +short send_3_pkt(LPB * link, PKT * pkt); /* ** error.c @@ -41,116 +41,116 @@ void du_error(void); /* ** formpkt.c */ -ushort sum_it( PKT *pkt ) ; -void form_rup_pkt( RUP *form_rup, PKT *pkt ); -void form_poll_pkt ( int type, LPB *link, int node ); -void form_route_pkt ( int type, PKT *pkt, LPB *link ); +ushort sum_it(PKT * pkt); +void form_rup_pkt(RUP * form_rup, PKT * pkt); +void form_poll_pkt(int type, LPB * link, int node); +void form_route_pkt(int type, PKT * pkt, LPB * link); /* ** idle.c */ -void idle( Process *idle_p ); +void idle(Process * idle_p); /* ** init.c */ void general_init(void); -void mem_halt( int error); +void mem_halt(int error); /* ** linkinit.c */ -void initlink( u_short number, LPB *link); -void runlink( LPB *link); +void initlink(u_short number, LPB * link); +void runlink(LPB * link); /* ** list.c */ PKT *get_free_start(void); -void put_free_start( PKT *pkt); +void put_free_start(PKT * pkt); #ifdef HOST -int can_remove_transmit ( PKT **pkt, PKT *pointer ); +int can_remove_transmit(PKT ** pkt, PKT * pointer); #endif #ifdef RTA -int spl7 ( void ); -int spl0 ( void ); -Q_BUF *get_free_q( void ); +int spl7(void); +int spl0(void); +Q_BUF *get_free_q(void); PKT *get_free_end(void); -int add_end( PKT *pkt, PHB *phb, int type); -unsigned short free_packets( PHB *phb, int type); -int can_remove_start( PKT **pkt, PHB *phb, int type); -int can_add_start( PHB *phb, int type); -int can_add_end( PHB *phb, int type); -void put_free_end( PKT *pkt); -int remove_start( PKT **pkt, PHB *phb, int type); +int add_end(PKT * pkt, PHB * phb, int type); +unsigned short free_packets(PHB * phb, int type); +int can_remove_start(PKT ** pkt, PHB * phb, int type); +int can_add_start(PHB * phb, int type); +int can_add_end(PHB * phb, int type); +void put_free_end(PKT * pkt); +int remove_start(PKT ** pkt, PHB * phb, int type); #endif /* ** Lrt.c */ -void lrt( Process *lrt_p, LPB *link ); +void lrt(Process * lrt_p, LPB * link); #ifdef RTA -void set_led_red ( LPB *link ); +void set_led_red(LPB * link); #endif /* ** ltt.c */ -void ltt( Process *ltt_p, LPB *link, PHB *phb_ptr[] ); -void send_poll ( LPB *link ); -void request_id ( LPB *link ); -void send_topology_update ( LPB *link ); -void send_topology ( LPB *link ); -void supply_id ( LPB *link ); +void ltt(Process * ltt_p, LPB * link, PHB * phb_ptr[]); +void send_poll(LPB * link); +void request_id(LPB * link); +void send_topology_update(LPB * link); +void send_topology(LPB * link); +void supply_id(LPB * link); #ifdef RTA -void redirect_queue ( LPB *link, ushort flush ); -int obtain_rup ( int rup_number, PKT **pkt_address, LPB *link ); +void redirect_queue(LPB * link, ushort flush); +int obtain_rup(int rup_number, PKT ** pkt_address, LPB * link); #endif #ifdef TESTING_PERF -int consume_cpu( void ); +int consume_cpu(void); #endif /* ** lttwake.c */ #ifdef HOST -void ltt_wakeup( Process *ltt_wakeup_p ); +void ltt_wakeup(Process * ltt_wakeup_p); #endif /* ** mapgen.c */ -void generate_id_map( short mapping, ROUTE_STR route[] ); -void gen_map( int mapping, int looking_at, int come_from, ROUTE_STR route[], int link, int *ttl ); -void adjust_ttl( int mapping, int looking_at, int come_from, ROUTE_STR route[], int link, int *ttl); +void generate_id_map(short mapping, ROUTE_STR route[]); +void gen_map(int mapping, int looking_at, int come_from, ROUTE_STR route[], int link, int *ttl); +void adjust_ttl(int mapping, int looking_at, int come_from, ROUTE_STR route[], int link, int *ttl); void init_sys_map(void); /* ** mmu.c */ -char *rio_malloc( unsigned int amount); -char *rio_calloc( unsigned int num, unsigned int size); -ERROR rio_mmu_init( uint total_mem ); +char *rio_malloc(unsigned int amount); +char *rio_calloc(unsigned int num, unsigned int size); +ERROR rio_mmu_init(uint total_mem); /* ** partn.c */ -void partition_tx( struct PHB *phb, u_short tx_size, u_short rx_size, u_short rx_limit); +void partition_tx(struct PHB *phb, u_short tx_size, u_short rx_size, u_short rx_limit); /* ** poll.c */ -void tx_poll( Process *tx_poll_p); +void tx_poll(Process * tx_poll_p); /* ** process.c */ -int get_proc_space( Process **pd, int **pws, int wssize); +int get_proc_space(Process ** pd, int **pws, int wssize); /* ** readrom.c @@ -160,85 +160,85 @@ void read_serial_number(char *buf); /* ** rio.c */ -int main( void ); +int main(void); /* ** route.c */ -void route_update ( PKT *pkt, LPB *link); +void route_update(PKT * pkt, LPB * link); /* ** rtainit.c */ #if defined(RTA) void rta_init(ushort RtaType); -#endif /* defined(RTA) */ +#endif /* defined(RTA) */ /* ** rupboot.c */ -void rup_boot( PKT *pkt, RUP *this_rup, LPB *link); +void rup_boot(PKT * pkt, RUP * this_rup, LPB * link); #ifdef RTA -void kill_your_neighbour( int link_to_kill ); +void kill_your_neighbour(int link_to_kill); #endif /* ** rupcmd.c */ -void rup_command( PKT *pkt, struct RUP *this_rup, LPB *link); +void rup_command(PKT * pkt, struct RUP *this_rup, LPB * link); /* ** ruperr.c */ -void rup_error( PKT *pkt, RUP *this_rup, LPB *link ); -void illegal_cmd( PKT *src_pkt ); +void rup_error(PKT * pkt, RUP * this_rup, LPB * link); +void illegal_cmd(PKT * src_pkt); /* ** ruppoll.c */ -void rup_poll( PKT *pkt, RUP *this_rup, LPB *link ); +void rup_poll(PKT * pkt, RUP * this_rup, LPB * link); /* ** ruppower.c */ -void rup_power( PKT *pkt, RUP *this_rup, LPB *link ); +void rup_power(PKT * pkt, RUP * this_rup, LPB * link); /* ** ruprm.c */ -void rup_route_map( PKT *pkt, RUP *this_rup, LPB *link); +void rup_route_map(PKT * pkt, RUP * this_rup, LPB * link); /* ** rupstat.c */ -void rup_status( PKT *pkt, RUP *this_rup, LPB *link); +void rup_status(PKT * pkt, RUP * this_rup, LPB * link); /* ** rupsync.c */ -void rup_sync( PKT *pkt); +void rup_sync(PKT * pkt); /* ** rxpkt.c */ -ERROR rx_pkt( PKT_ptr_ptr pkt_address, LPB *link); +ERROR rx_pkt(PKT_ptr_ptr pkt_address, LPB * link); /* ** sendsts.c */ -void send_status( PKT *requesting_pkt, RUP *this_rup); +void send_status(PKT * requesting_pkt, RUP * this_rup); /* ** serial.c */ -void assign_serial ( char *ser_in, char *ser_out); -int cmp_serial ( char *ser_1, char *ser_2); +void assign_serial(char *ser_in, char *ser_out); +int cmp_serial(char *ser_1, char *ser_2); /* ** txpkt.c */ -ERROR tx_pkt( PKT *pkt, LPB *link); -short send_sync( LPB *link); +ERROR tx_pkt(PKT * pkt, LPB * link); +short send_sync(LPB * link); -#endif /* _prototypes_h */ +#endif /* _prototypes_h */ diff --git a/drivers/char/rio/protsts.h b/drivers/char/rio/protsts.h index 848111ac9380..69fc4bc34153 100644 --- a/drivers/char/rio/protsts.h +++ b/drivers/char/rio/protsts.h @@ -115,5 +115,3 @@ #endif /*********** end of file ***********/ - - diff --git a/drivers/char/rio/qbuf.h b/drivers/char/rio/qbuf.h index 1fce02f8fcfc..acd9e8e5307d 100644 --- a/drivers/char/rio/qbuf.h +++ b/drivers/char/rio/qbuf.h @@ -40,7 +40,7 @@ #ifndef lint #ifdef SCCS_LABELS -static char *_rio_qbuf_h_sccs = "@(#)qbuf.h 1.1" ; +static char *_rio_qbuf_h_sccs = "@(#)qbuf.h 1.1"; #endif #endif @@ -52,16 +52,15 @@ static char *_rio_qbuf_h_sccs = "@(#)qbuf.h 1.1" ; #define PKTS_PER_BUFFER (220 / PKT_LENGTH) #endif -typedef struct Q_BUF Q_BUF ; -struct Q_BUF { - Q_BUF_ptr next ; - Q_BUF_ptr prev ; - PKT_ptr buf[PKTS_PER_BUFFER] ; - } ; +typedef struct Q_BUF Q_BUF; +struct Q_BUF { + Q_BUF_ptr next; + Q_BUF_ptr prev; + PKT_ptr buf[PKTS_PER_BUFFER]; +}; #endif /*********** end of file ***********/ - diff --git a/drivers/char/rio/rio.h b/drivers/char/rio/rio.h index 13a9931958b1..7f45e1ab5332 100644 --- a/drivers/char/rio/rio.h +++ b/drivers/char/rio/rio.h @@ -72,8 +72,8 @@ static char *_rio_h_sccs_ = "@(#)rio.h 1.3"; #define RIO_HOSTS 4 /* number of hosts that can be found */ #define PORTS_PER_HOST 128 /* number of ports per host */ #define LINKS_PER_UNIT 4 /* number of links from a host */ -#define RIO_PORTS (PORTS_PER_HOST * RIO_HOSTS) /* max. no. of ports */ -#define RTAS_PER_HOST (MAX_RUP) /* number of RTAs per host */ +#define RIO_PORTS (PORTS_PER_HOST * RIO_HOSTS) /* max. no. of ports */ +#define RTAS_PER_HOST (MAX_RUP) /* number of RTAs per host */ #define PORTS_PER_RTA (PORTS_PER_HOST/RTAS_PER_HOST) /* ports on a rta */ #define PORTS_PER_MODULE 4 /* number of ports on a plug-in module */ /* number of modules on an RTA */ @@ -216,10 +216,9 @@ static char *_rio_h_sccs_ = "@(#)rio.h 1.3"; #define RIO_PRI (PZERO+10) #define RIO_CLOSE_PRI PZERO-1 /* uninterruptible sleeps for close */ -typedef struct DbInf -{ - uint Flag; - char Name[8]; +typedef struct DbInf { + uint Flag; + char Name[8]; } DbInf; #ifndef TRUE @@ -251,7 +250,7 @@ typedef struct DbInf *((uint *)PK) = PP->PacketInfo; \ } -#define RIO_LINK_ENABLE 0x80FF /* FF is a hack, mainly for Mips, to */ +#define RIO_LINK_ENABLE 0x80FF /* FF is a hack, mainly for Mips, to */ /* prevent a really stupid race condition. */ #define NOT_INITIALISED 0 @@ -291,4 +290,4 @@ typedef struct DbInf #define DIST_LINESW_OUTPUT 0x40 #define DIST_LINESW_MDMINT 0x80 -#endif /* __rio_h__ */ +#endif /* __rio_h__ */ diff --git a/drivers/char/rio/rio_linux.c b/drivers/char/rio/rio_linux.c index 7085a38532b3..8825bd61b7d0 100644 --- a/drivers/char/rio/rio_linux.c +++ b/drivers/char/rio/rio_linux.c @@ -33,7 +33,7 @@ * */ #include -#include +#include #include #include #include @@ -112,7 +112,7 @@ more than 512 ports.... */ #define PCI_DEVICE_ID_SPECIALIX_SX_XIO_IO8 0x2000 #endif -#ifndef RIO_WINDOW_LEN +#ifndef RIO_WINDOW_LEN #define RIO_WINDOW_LEN 0x10000 #endif @@ -140,34 +140,51 @@ more than 512 ports.... */ */ #define RIO_REPORT_FIFO #define RIO_REPORT_OVERRUN -#endif +#endif /* These constants are derived from SCO Source */ static struct Conf -RIOConf = -{ - /* locator */ "RIO Config here", - /* startuptime */ HZ*2, /* how long to wait for card to run */ - /* slowcook */ 0, /* TRUE -> always use line disc. */ - /* intrpolltime */ 1, /* The frequency of OUR polls */ - /* breakinterval */ 25, /* x10 mS XXX: units seem to be 1ms not 10! -- REW*/ - /* timer */ 10, /* mS */ - /* RtaLoadBase */ 0x7000, - /* HostLoadBase */ 0x7C00, - /* XpHz */ 5, /* number of Xprint hits per second */ - /* XpCps */ 120, /* Xprint characters per second */ - /* XpOn */ "\033d#", /* start Xprint for a wyse 60 */ - /* XpOff */ "\024", /* end Xprint for a wyse 60 */ - /* MaxXpCps */ 2000, /* highest Xprint speed */ - /* MinXpCps */ 10, /* slowest Xprint speed */ - /* SpinCmds */ 1, /* non-zero for mega fast boots */ - /* First Addr */ 0x0A0000, /* First address to look at */ - /* Last Addr */ 0xFF0000, /* Last address looked at */ - /* BufferSize */ 1024, /* Bytes per port of buffering */ - /* LowWater */ 256, /* how much data left before wakeup */ - /* LineLength */ 80, /* how wide is the console? */ - /* CmdTimeout */ HZ, /* how long a close command may take */ + RIOConf = { + /* locator */ "RIO Config here", + /* startuptime */ HZ * 2, + /* how long to wait for card to run */ + /* slowcook */ 0, + /* TRUE -> always use line disc. */ + /* intrpolltime */ 1, + /* The frequency of OUR polls */ + /* breakinterval */ 25, + /* x10 mS XXX: units seem to be 1ms not 10! -- REW */ + /* timer */ 10, + /* mS */ + /* RtaLoadBase */ 0x7000, + /* HostLoadBase */ 0x7C00, + /* XpHz */ 5, + /* number of Xprint hits per second */ + /* XpCps */ 120, + /* Xprint characters per second */ + /* XpOn */ "\033d#", + /* start Xprint for a wyse 60 */ + /* XpOff */ "\024", + /* end Xprint for a wyse 60 */ + /* MaxXpCps */ 2000, + /* highest Xprint speed */ + /* MinXpCps */ 10, + /* slowest Xprint speed */ + /* SpinCmds */ 1, + /* non-zero for mega fast boots */ + /* First Addr */ 0x0A0000, + /* First address to look at */ + /* Last Addr */ 0xFF0000, + /* Last address looked at */ + /* BufferSize */ 1024, + /* Bytes per port of buffering */ + /* LowWater */ 256, + /* how much data left before wakeup */ + /* LineLength */ 80, + /* how wide is the console? */ + /* CmdTimeout */ HZ, + /* how long a close command may take */ }; @@ -175,21 +192,20 @@ RIOConf = /* Function prototypes */ -static void rio_disable_tx_interrupts (void * ptr); -static void rio_enable_tx_interrupts (void * ptr); -static void rio_disable_rx_interrupts (void * ptr); -static void rio_enable_rx_interrupts (void * ptr); -static int rio_get_CD (void * ptr); -static void rio_shutdown_port (void * ptr); -static int rio_set_real_termios (void *ptr); -static void rio_hungup (void *ptr); -static void rio_close (void *ptr); -static int rio_chars_in_buffer (void * ptr); -static int rio_fw_ioctl (struct inode *inode, struct file *filp, - unsigned int cmd, unsigned long arg); +static void rio_disable_tx_interrupts(void *ptr); +static void rio_enable_tx_interrupts(void *ptr); +static void rio_disable_rx_interrupts(void *ptr); +static void rio_enable_rx_interrupts(void *ptr); +static int rio_get_CD(void *ptr); +static void rio_shutdown_port(void *ptr); +static int rio_set_real_termios(void *ptr); +static void rio_hungup(void *ptr); +static void rio_close(void *ptr); +static int rio_chars_in_buffer(void *ptr); +static int rio_fw_ioctl(struct inode *inode, struct file *filp, unsigned int cmd, unsigned long arg); static int rio_init_drivers(void); -static void my_hd (void *addr, int len); +static void my_hd(void *addr, int len); static struct tty_driver *rio_driver, *rio_driver2; @@ -209,7 +225,7 @@ static int rio_poll = 1; /* These are the only open spaces in my computer. Yours may have more or less.... */ -static int rio_probe_addrs[]= {0xc0000, 0xd0000, 0xe0000}; +static int rio_probe_addrs[] = { 0xc0000, 0xd0000, 0xe0000 }; #define NR_RIO_ADDRS ARRAY_SIZE(rio_probe_addrs) @@ -227,17 +243,17 @@ module_param(rio_debug, int, 0644); module_param(rio_irqmask, long, 0); static struct real_driver rio_real_driver = { - rio_disable_tx_interrupts, - rio_enable_tx_interrupts, - rio_disable_rx_interrupts, - rio_enable_rx_interrupts, - rio_get_CD, - rio_shutdown_port, - rio_set_real_termios, - rio_chars_in_buffer, - rio_close, - rio_hungup, - NULL + rio_disable_tx_interrupts, + rio_enable_tx_interrupts, + rio_disable_rx_interrupts, + rio_enable_rx_interrupts, + rio_get_CD, + rio_shutdown_port, + rio_set_real_termios, + rio_chars_in_buffer, + rio_close, + rio_hungup, + NULL }; /* @@ -246,8 +262,8 @@ static struct real_driver rio_real_driver = { */ static struct file_operations rio_fw_fops = { - .owner = THIS_MODULE, - .ioctl = rio_fw_ioctl, + .owner = THIS_MODULE, + .ioctl = rio_fw_ioctl, }; static struct miscdevice rio_fw_device = { @@ -262,25 +278,22 @@ static struct miscdevice rio_fw_device = { /* This doesn't work. Who's paranoid around here? Not me! */ -static inline int rio_paranoia_check(struct rio_port const * port, - char *name, const char *routine) +static inline int rio_paranoia_check(struct rio_port const *port, char *name, const char *routine) { - static const char *badmagic = - KERN_ERR "rio: Warning: bad rio port magic number for device %s in %s\n"; - static const char *badinfo = - KERN_ERR "rio: Warning: null rio port for device %s in %s\n"; - - if (!port) { - printk (badinfo, name, routine); - return 1; - } - if (port->magic != RIO_MAGIC) { - printk (badmagic, name, routine); - return 1; - } - - return 0; + static const char *badmagic = KERN_ERR "rio: Warning: bad rio port magic number for device %s in %s\n"; + static const char *badinfo = KERN_ERR "rio: Warning: null rio port for device %s in %s\n"; + + if (!port) { + printk(badinfo, name, routine); + return 1; + } + if (port->magic != RIO_MAGIC) { + printk(badmagic, name, routine); + return 1; + } + + return 0; } #else #define rio_paranoia_check(a,b,c) 0 @@ -288,53 +301,53 @@ static inline int rio_paranoia_check(struct rio_port const * port, #ifdef DEBUG -static void my_hd (void *ad, int len) +static void my_hd(void *ad, int len) { - int i, j, ch; - unsigned char *addr = ad; - - for (i=0;i 0x7f)?'.':ch)); - } - rio_dprintk (RIO_DEBUG_PARAM, "\n"); - } + int i, j, ch; + unsigned char *addr = ad; + + for (i = 0; i < len; i += 16) { + rio_dprintk(RIO_DEBUG_PARAM, "%08x ", (int) addr + i); + for (j = 0; j < 16; j++) { + rio_dprintk(RIO_DEBUG_PARAM, "%02x %s", addr[j + i], (j == 7) ? " " : ""); + } + for (j = 0; j < 16; j++) { + ch = addr[j + i]; + rio_dprintk(RIO_DEBUG_PARAM, "%c", (ch < 0x20) ? '.' : ((ch > 0x7f) ? '.' : ch)); + } + rio_dprintk(RIO_DEBUG_PARAM, "\n"); + } } #else #define my_hd(ad,len) do{/* nothing*/ } while (0) #endif -/* Delay a number of jiffies, allowing a signal to interrupt */ -int RIODelay (struct Port *PortP, int njiffies) +/* Delay a number of jiffies, allowing a signal to interrupt */ +int RIODelay(struct Port *PortP, int njiffies) { - func_enter (); + func_enter(); - rio_dprintk (RIO_DEBUG_DELAY, "delaying %d jiffies\n", njiffies); - msleep_interruptible(jiffies_to_msecs(njiffies)); - func_exit(); + rio_dprintk(RIO_DEBUG_DELAY, "delaying %d jiffies\n", njiffies); + msleep_interruptible(jiffies_to_msecs(njiffies)); + func_exit(); - if (signal_pending(current)) - return RIO_FAIL; - else - return !RIO_FAIL; + if (signal_pending(current)) + return RIO_FAIL; + else + return !RIO_FAIL; } -/* Delay a number of jiffies, disallowing a signal to interrupt */ -int RIODelay_ni (struct Port *PortP, int njiffies) +/* Delay a number of jiffies, disallowing a signal to interrupt */ +int RIODelay_ni(struct Port *PortP, int njiffies) { - func_enter (); + func_enter(); - rio_dprintk (RIO_DEBUG_DELAY, "delaying %d jiffies (ni)\n", njiffies); - msleep(jiffies_to_msecs(njiffies)); - func_exit(); - return !RIO_FAIL; + rio_dprintk(RIO_DEBUG_DELAY, "delaying %d jiffies (ni)\n", njiffies); + msleep(jiffies_to_msecs(njiffies)); + func_exit(); + return !RIO_FAIL; } @@ -350,126 +363,121 @@ int rio_ismodem(struct tty_struct *tty) } -static int rio_set_real_termios (void *ptr) +static int rio_set_real_termios(void *ptr) { - int rv, modem; - struct tty_struct *tty; - func_enter(); + int rv, modem; + struct tty_struct *tty; + func_enter(); - tty = ((struct Port *)ptr)->gs.tty; + tty = ((struct Port *) ptr)->gs.tty; - modem = rio_ismodem(tty); + modem = rio_ismodem(tty); - rv = RIOParam( (struct Port *) ptr, CONFIG, modem, 1); + rv = RIOParam((struct Port *) ptr, CONFIG, modem, 1); - func_exit (); + func_exit(); - return rv; + return rv; } -static void rio_reset_interrupt (struct Host *HostP) +static void rio_reset_interrupt(struct Host *HostP) { - func_enter(); + func_enter(); - switch( HostP->Type ) { - case RIO_AT: - case RIO_MCA: - case RIO_PCI: - WBYTE(HostP->ResetInt , 0xff); - } + switch (HostP->Type) { + case RIO_AT: + case RIO_MCA: + case RIO_PCI: + WBYTE(HostP->ResetInt, 0xff); + } - func_exit(); + func_exit(); } -static irqreturn_t rio_interrupt (int irq, void *ptr, struct pt_regs *regs) +static irqreturn_t rio_interrupt(int irq, void *ptr, struct pt_regs *regs) { - struct Host *HostP; - func_enter (); + struct Host *HostP; + func_enter(); - HostP = (struct Host*)ptr; /* &p->RIOHosts[(long)ptr]; */ - rio_dprintk (RIO_DEBUG_IFLOW, "rio: enter rio_interrupt (%d/%d)\n", - irq, HostP->Ivec); + HostP = (struct Host *) ptr; /* &p->RIOHosts[(long)ptr]; */ + rio_dprintk(RIO_DEBUG_IFLOW, "rio: enter rio_interrupt (%d/%d)\n", irq, HostP->Ivec); - /* AAargh! The order in which to do these things is essential and - not trivial. - - - Rate limit goes before "recursive". Otherwise a series of - recursive calls will hang the machine in the interrupt routine. + /* AAargh! The order in which to do these things is essential and + not trivial. - - hardware twiddling goes before "recursive". Otherwise when we - poll the card, and a recursive interrupt happens, we won't - ack the card, so it might keep on interrupting us. (especially - level sensitive interrupt systems like PCI). + - Rate limit goes before "recursive". Otherwise a series of + recursive calls will hang the machine in the interrupt routine. - - Rate limit goes before hardware twiddling. Otherwise we won't - catch a card that has gone bonkers. + - hardware twiddling goes before "recursive". Otherwise when we + poll the card, and a recursive interrupt happens, we won't + ack the card, so it might keep on interrupting us. (especially + level sensitive interrupt systems like PCI). - - The "initialized" test goes after the hardware twiddling. Otherwise - the card will stick us in the interrupt routine again. + - Rate limit goes before hardware twiddling. Otherwise we won't + catch a card that has gone bonkers. - - The initialized test goes before recursive. - */ + - The "initialized" test goes after the hardware twiddling. Otherwise + the card will stick us in the interrupt routine again. + + - The initialized test goes before recursive. + */ #ifdef IRQ_RATE_LIMIT - /* Aaargh! I'm ashamed. This costs more lines-of-code than the - actual interrupt routine!. (Well, used to when I wrote that comment) */ - { - static int lastjif; - static int nintr=0; - - if (lastjif == jiffies) { - if (++nintr > IRQ_RATE_LIMIT) { - free_irq (HostP->Ivec, ptr); - printk (KERN_ERR "rio: Too many interrupts. Turning off interrupt %d.\n", - HostP->Ivec); - } - } else { - lastjif = jiffies; - nintr = 0; - } - } + /* Aaargh! I'm ashamed. This costs more lines-of-code than the + actual interrupt routine!. (Well, used to when I wrote that comment) */ + { + static int lastjif; + static int nintr = 0; + + if (lastjif == jiffies) { + if (++nintr > IRQ_RATE_LIMIT) { + free_irq(HostP->Ivec, ptr); + printk(KERN_ERR "rio: Too many interrupts. Turning off interrupt %d.\n", HostP->Ivec); + } + } else { + lastjif = jiffies; + nintr = 0; + } + } #endif - rio_dprintk (RIO_DEBUG_IFLOW, "rio: We've have noticed the interrupt\n"); - if (HostP->Ivec == irq) { - /* Tell the card we've noticed the interrupt. */ - rio_reset_interrupt (HostP); - } - - if ((HostP->Flags & RUN_STATE) != RC_RUNNING) - return IRQ_HANDLED; - - if (test_and_set_bit (RIO_BOARD_INTR_LOCK, &HostP->locks)) { - printk (KERN_ERR "Recursive interrupt! (host %d/irq%d)\n", - (int) ptr, HostP->Ivec); - return IRQ_HANDLED; - } - - RIOServiceHost(p, HostP, irq); - - rio_dprintk ( RIO_DEBUG_IFLOW, "riointr() doing host %d type %d\n", - (int) ptr, HostP->Type); - - clear_bit (RIO_BOARD_INTR_LOCK, &HostP->locks); - rio_dprintk (RIO_DEBUG_IFLOW, "rio: exit rio_interrupt (%d/%d)\n", - irq, HostP->Ivec); - func_exit (); - return IRQ_HANDLED; + rio_dprintk(RIO_DEBUG_IFLOW, "rio: We've have noticed the interrupt\n"); + if (HostP->Ivec == irq) { + /* Tell the card we've noticed the interrupt. */ + rio_reset_interrupt(HostP); + } + + if ((HostP->Flags & RUN_STATE) != RC_RUNNING) + return IRQ_HANDLED; + + if (test_and_set_bit(RIO_BOARD_INTR_LOCK, &HostP->locks)) { + printk(KERN_ERR "Recursive interrupt! (host %d/irq%d)\n", (int) ptr, HostP->Ivec); + return IRQ_HANDLED; + } + + RIOServiceHost(p, HostP, irq); + + rio_dprintk(RIO_DEBUG_IFLOW, "riointr() doing host %d type %d\n", (int) ptr, HostP->Type); + + clear_bit(RIO_BOARD_INTR_LOCK, &HostP->locks); + rio_dprintk(RIO_DEBUG_IFLOW, "rio: exit rio_interrupt (%d/%d)\n", irq, HostP->Ivec); + func_exit(); + return IRQ_HANDLED; } -static void rio_pollfunc (unsigned long data) +static void rio_pollfunc(unsigned long data) { - func_enter (); + func_enter(); - rio_interrupt (0, &p->RIOHosts[data], NULL); - p->RIOHosts[data].timer.expires = jiffies + rio_poll; - add_timer (&p->RIOHosts[data].timer); + rio_interrupt(0, &p->RIOHosts[data], NULL); + p->RIOHosts[data].timer.expires = jiffies + rio_poll; + add_timer(&p->RIOHosts[data].timer); - func_exit (); + func_exit(); } @@ -481,106 +489,106 @@ static void rio_pollfunc (unsigned long data) /* Ehhm. I don't know how to fiddle with interrupts on the Specialix cards. .... Hmm. Ok I figured it out. You don't. -- REW */ -static void rio_disable_tx_interrupts (void * ptr) +static void rio_disable_tx_interrupts(void *ptr) { - func_enter(); + func_enter(); - /* port->gs.flags &= ~GS_TX_INTEN; */ + /* port->gs.flags &= ~GS_TX_INTEN; */ - func_exit(); + func_exit(); } -static void rio_enable_tx_interrupts (void * ptr) +static void rio_enable_tx_interrupts(void *ptr) { - struct Port *PortP = ptr; - /* int hn; */ + struct Port *PortP = ptr; + /* int hn; */ - func_enter(); + func_enter(); - /* hn = PortP->HostP - p->RIOHosts; + /* hn = PortP->HostP - p->RIOHosts; - rio_dprintk (RIO_DEBUG_TTY, "Pushing host %d\n", hn); - rio_interrupt (-1,(void *) hn, NULL); */ + rio_dprintk (RIO_DEBUG_TTY, "Pushing host %d\n", hn); + rio_interrupt (-1,(void *) hn, NULL); */ - RIOTxEnable((char *) PortP); + RIOTxEnable((char *) PortP); - /* - * In general we cannot count on "tx empty" interrupts, although - * the interrupt routine seems to be able to tell the difference. - */ - PortP->gs.flags &= ~GS_TX_INTEN; + /* + * In general we cannot count on "tx empty" interrupts, although + * the interrupt routine seems to be able to tell the difference. + */ + PortP->gs.flags &= ~GS_TX_INTEN; - func_exit(); + func_exit(); } -static void rio_disable_rx_interrupts (void * ptr) +static void rio_disable_rx_interrupts(void *ptr) { - func_enter(); - func_exit(); + func_enter(); + func_exit(); } -static void rio_enable_rx_interrupts (void * ptr) +static void rio_enable_rx_interrupts(void *ptr) { - /* struct rio_port *port = ptr; */ - func_enter(); - func_exit(); + /* struct rio_port *port = ptr; */ + func_enter(); + func_exit(); } /* Jeez. Isn't this simple? */ -static int rio_get_CD (void * ptr) +static int rio_get_CD(void *ptr) { - struct Port *PortP = ptr; - int rv; + struct Port *PortP = ptr; + int rv; + + func_enter(); + rv = (PortP->ModemState & MSVR1_CD) != 0; - func_enter(); - rv = (PortP->ModemState & MSVR1_CD) != 0; + rio_dprintk(RIO_DEBUG_INIT, "Getting CD status: %d\n", rv); - rio_dprintk (RIO_DEBUG_INIT, "Getting CD status: %d\n", rv); - - func_exit(); - return rv; + func_exit(); + return rv; } /* Jeez. Isn't this simple? Actually, we can sync with the actual port by just pushing stuff into the queue going to the port... */ -static int rio_chars_in_buffer (void * ptr) +static int rio_chars_in_buffer(void *ptr) { - func_enter(); + func_enter(); - func_exit(); - return 0; + func_exit(); + return 0; } /* Nothing special here... */ -static void rio_shutdown_port (void * ptr) +static void rio_shutdown_port(void *ptr) { - struct Port *PortP; + struct Port *PortP; - func_enter(); + func_enter(); - PortP = (struct Port *)ptr; - PortP->gs.tty = NULL; + PortP = (struct Port *) ptr; + PortP->gs.tty = NULL; #if 0 - port->gs.flags &= ~ GS_ACTIVE; - if (!port->gs.tty) { - rio_dprintk (RIO_DBUG_TTY, "No tty.\n"); - return; - } - if (!port->gs.tty->termios) { - rio_dprintk (RIO_DEBUG_TTY, "No termios.\n"); - return; - } - if (port->gs.tty->termios->c_cflag & HUPCL) { - rio_setsignals (port, 0, 0); - } + port->gs.flags &= ~GS_ACTIVE; + if (!port->gs.tty) { + rio_dprintk(RIO_DBUG_TTY, "No tty.\n"); + return; + } + if (!port->gs.tty->termios) { + rio_dprintk(RIO_DEBUG_TTY, "No termios.\n"); + return; + } + if (port->gs.tty->termios->c_cflag & HUPCL) { + rio_setsignals(port, 0, 0); + } #endif - func_exit(); + func_exit(); } @@ -591,16 +599,16 @@ static void rio_shutdown_port (void * ptr) running minicom on a serial port that is driven by a modularized driver. Have the modem hangup. Then remove the driver module. Then exit minicom. I expect an "oops". -- REW */ -static void rio_hungup (void *ptr) +static void rio_hungup(void *ptr) { - struct Port *PortP; + struct Port *PortP; + + func_enter(); - func_enter(); - - PortP = (struct Port *)ptr; - PortP->gs.tty = NULL; + PortP = (struct Port *) ptr; + PortP->gs.tty = NULL; - func_exit (); + func_exit(); } @@ -608,146 +616,135 @@ static void rio_hungup (void *ptr) this. rs_close (...){save_flags;cli;real_close();dec_use_count;restore_flags;} */ -static void rio_close (void *ptr) +static void rio_close(void *ptr) { - struct Port *PortP; + struct Port *PortP; - func_enter (); + func_enter(); - PortP = (struct Port *)ptr; + PortP = (struct Port *) ptr; - riotclose (ptr); + riotclose(ptr); - if(PortP->gs.count) { - printk (KERN_ERR "WARNING port count:%d\n", PortP->gs.count); - PortP->gs.count = 0; - } + if (PortP->gs.count) { + printk(KERN_ERR "WARNING port count:%d\n", PortP->gs.count); + PortP->gs.count = 0; + } - PortP->gs.tty = NULL; - func_exit (); + PortP->gs.tty = NULL; + func_exit(); } -static int rio_fw_ioctl (struct inode *inode, struct file *filp, - unsigned int cmd, unsigned long arg) +static int rio_fw_ioctl(struct inode *inode, struct file *filp, unsigned int cmd, unsigned long arg) { - int rc = 0; - func_enter(); + int rc = 0; + func_enter(); - /* The "dev" argument isn't used. */ - rc = riocontrol (p, 0, cmd, (void *)arg, capable(CAP_SYS_ADMIN)); + /* The "dev" argument isn't used. */ + rc = riocontrol(p, 0, cmd, (void *) arg, capable(CAP_SYS_ADMIN)); - func_exit (); - return rc; + func_exit(); + return rc; } -extern int RIOShortCommand(struct rio_info *p, struct Port *PortP, - int command, int len, int arg); +extern int RIOShortCommand(struct rio_info *p, struct Port *PortP, int command, int len, int arg); -static int rio_ioctl (struct tty_struct * tty, struct file * filp, - unsigned int cmd, unsigned long arg) +static int rio_ioctl(struct tty_struct *tty, struct file *filp, unsigned int cmd, unsigned long arg) { - int rc; - struct Port *PortP; - int ival; + int rc; + struct Port *PortP; + int ival; - func_enter(); + func_enter(); - PortP = (struct Port *)tty->driver_data; + PortP = (struct Port *) tty->driver_data; - rc = 0; - switch (cmd) { + rc = 0; + switch (cmd) { #if 0 - case TIOCGSOFTCAR: - rc = put_user(((tty->termios->c_cflag & CLOCAL) ? 1 : 0), - (unsigned int *) arg); - break; + case TIOCGSOFTCAR: + rc = put_user(((tty->termios->c_cflag & CLOCAL) ? 1 : 0), (unsigned int *) arg); + break; #endif - case TIOCSSOFTCAR: - if ((rc = get_user(ival, (unsigned int *) arg)) == 0) { - tty->termios->c_cflag = - (tty->termios->c_cflag & ~CLOCAL) | - (ival ? CLOCAL : 0); - } - break; - case TIOCGSERIAL: - rc = -EFAULT; - if (access_ok(VERIFY_WRITE, (void *) arg, - sizeof(struct serial_struct))) - rc = gs_getserial(&PortP->gs, (struct serial_struct *) arg); - break; - case TCSBRK: - if ( PortP->State & RIO_DELETED ) { - rio_dprintk (RIO_DEBUG_TTY, "BREAK on deleted RTA\n"); - rc = -EIO; - } else { - if (RIOShortCommand(p, PortP, SBREAK, 2, 250) == RIO_FAIL) { - rio_dprintk (RIO_DEBUG_INTR, "SBREAK RIOShortCommand failed\n"); - rc = -EIO; - } - } - break; - case TCSBRKP: - if ( PortP->State & RIO_DELETED ) { - rio_dprintk (RIO_DEBUG_TTY, "BREAK on deleted RTA\n"); - rc = -EIO; - } else { - int l; - l = arg?arg*100:250; - if (l > 255) l = 255; - if (RIOShortCommand(p, PortP, SBREAK, 2, arg?arg*100:250) == RIO_FAIL) { - rio_dprintk (RIO_DEBUG_INTR, "SBREAK RIOShortCommand failed\n"); - rc = -EIO; - } - } - break; - case TIOCSSERIAL: - rc = -EFAULT; - if (access_ok(VERIFY_READ, (void *) arg, - sizeof(struct serial_struct))) - rc = gs_setserial(&PortP->gs, (struct serial_struct *) arg); - break; + case TIOCSSOFTCAR: + if ((rc = get_user(ival, (unsigned int *) arg)) == 0) { + tty->termios->c_cflag = (tty->termios->c_cflag & ~CLOCAL) | (ival ? CLOCAL : 0); + } + break; + case TIOCGSERIAL: + rc = -EFAULT; + if (access_ok(VERIFY_WRITE, (void *) arg, sizeof(struct serial_struct))) + rc = gs_getserial(&PortP->gs, (struct serial_struct *) arg); + break; + case TCSBRK: + if (PortP->State & RIO_DELETED) { + rio_dprintk(RIO_DEBUG_TTY, "BREAK on deleted RTA\n"); + rc = -EIO; + } else { + if (RIOShortCommand(p, PortP, SBREAK, 2, 250) == RIO_FAIL) { + rio_dprintk(RIO_DEBUG_INTR, "SBREAK RIOShortCommand failed\n"); + rc = -EIO; + } + } + break; + case TCSBRKP: + if (PortP->State & RIO_DELETED) { + rio_dprintk(RIO_DEBUG_TTY, "BREAK on deleted RTA\n"); + rc = -EIO; + } else { + int l; + l = arg ? arg * 100 : 250; + if (l > 255) + l = 255; + if (RIOShortCommand(p, PortP, SBREAK, 2, arg ? arg * 100 : 250) == RIO_FAIL) { + rio_dprintk(RIO_DEBUG_INTR, "SBREAK RIOShortCommand failed\n"); + rc = -EIO; + } + } + break; + case TIOCSSERIAL: + rc = -EFAULT; + if (access_ok(VERIFY_READ, (void *) arg, sizeof(struct serial_struct))) + rc = gs_setserial(&PortP->gs, (struct serial_struct *) arg); + break; #if 0 - /* - * note: these IOCTLs no longer reach here. Use - * tiocmset/tiocmget driver methods instead. The - * #if 0 disablement predates this comment. - */ - case TIOCMGET: - rc = -EFAULT; - if (access_ok(VERIFY_WRITE, (void *) arg, - sizeof(unsigned int))) { - rc = 0; - ival = rio_getsignals(port); - put_user(ival, (unsigned int *) arg); - } - break; - case TIOCMBIS: - if ((rc = get_user(ival, (unsigned int *) arg)) == 0) { - rio_setsignals(port, ((ival & TIOCM_DTR) ? 1 : -1), - ((ival & TIOCM_RTS) ? 1 : -1)); - } - break; - case TIOCMBIC: - if ((rc = get_user(ival, (unsigned int *) arg)) == 0) { - rio_setsignals(port, ((ival & TIOCM_DTR) ? 0 : -1), - ((ival & TIOCM_RTS) ? 0 : -1)); - } - break; - case TIOCMSET: - if ((rc = get_user(ival, (unsigned int *) arg)) == 0) { - rio_setsignals(port, ((ival & TIOCM_DTR) ? 1 : 0), - ((ival & TIOCM_RTS) ? 1 : 0)); - } - break; + /* + * note: these IOCTLs no longer reach here. Use + * tiocmset/tiocmget driver methods instead. The + * #if 0 disablement predates this comment. + */ + case TIOCMGET: + rc = -EFAULT; + if (access_ok(VERIFY_WRITE, (void *) arg, sizeof(unsigned int))) { + rc = 0; + ival = rio_getsignals(port); + put_user(ival, (unsigned int *) arg); + } + break; + case TIOCMBIS: + if ((rc = get_user(ival, (unsigned int *) arg)) == 0) { + rio_setsignals(port, ((ival & TIOCM_DTR) ? 1 : -1), ((ival & TIOCM_RTS) ? 1 : -1)); + } + break; + case TIOCMBIC: + if ((rc = get_user(ival, (unsigned int *) arg)) == 0) { + rio_setsignals(port, ((ival & TIOCM_DTR) ? 0 : -1), ((ival & TIOCM_RTS) ? 0 : -1)); + } + break; + case TIOCMSET: + if ((rc = get_user(ival, (unsigned int *) arg)) == 0) { + rio_setsignals(port, ((ival & TIOCM_DTR) ? 1 : 0), ((ival & TIOCM_RTS) ? 1 : 0)); + } + break; #endif - default: - rc = -ENOIOCTLCMD; - break; - } - func_exit(); - return rc; + default: + rc = -ENOIOCTLCMD; + break; + } + func_exit(); + return rc; } @@ -767,37 +764,37 @@ static int rio_ioctl (struct tty_struct * tty, struct file * filp, * flow control scheme is in use for that port. -- Simon Allen */ -static void rio_throttle (struct tty_struct * tty) +static void rio_throttle(struct tty_struct *tty) { - struct Port *port = (struct Port *)tty->driver_data; - - func_enter(); - /* If the port is using any type of input flow - * control then throttle the port. - */ - - if((tty->termios->c_cflag & CRTSCTS) || (I_IXOFF(tty)) ) { - port->State |= RIO_THROTTLE_RX; - } - - func_exit(); + struct Port *port = (struct Port *) tty->driver_data; + + func_enter(); + /* If the port is using any type of input flow + * control then throttle the port. + */ + + if ((tty->termios->c_cflag & CRTSCTS) || (I_IXOFF(tty))) { + port->State |= RIO_THROTTLE_RX; + } + + func_exit(); } -static void rio_unthrottle (struct tty_struct * tty) +static void rio_unthrottle(struct tty_struct *tty) { - struct Port *port = (struct Port *)tty->driver_data; + struct Port *port = (struct Port *) tty->driver_data; - func_enter(); - /* Always unthrottle even if flow control is not enabled on - * this port in case we disabled flow control while the port - * was throttled - */ + func_enter(); + /* Always unthrottle even if flow control is not enabled on + * this port in case we disabled flow control while the port + * was throttled + */ - port->State &= ~RIO_THROTTLE_RX; + port->State &= ~RIO_THROTTLE_RX; - func_exit(); - return; + func_exit(); + return; } @@ -809,35 +806,34 @@ static void rio_unthrottle (struct tty_struct * tty) * ********************************************************************** */ -static struct vpd_prom *get_VPD_PROM (struct Host *hp) +static struct vpd_prom *get_VPD_PROM(struct Host *hp) { - static struct vpd_prom vpdp; - char *p; - int i; + static struct vpd_prom vpdp; + char *p; + int i; + + func_enter(); + rio_dprintk(RIO_DEBUG_PROBE, "Going to verify vpd prom at %p.\n", hp->Caddr + RIO_VPD_ROM); - func_enter(); - rio_dprintk (RIO_DEBUG_PROBE, "Going to verify vpd prom at %p.\n", - hp->Caddr + RIO_VPD_ROM); + p = (char *) &vpdp; + for (i = 0; i < sizeof(struct vpd_prom); i++) + *p++ = readb(hp->Caddr + RIO_VPD_ROM + i * 2); + /* read_rio_byte (hp, RIO_VPD_ROM + i*2); */ - p = (char *) &vpdp; - for (i=0;i< sizeof (struct vpd_prom);i++) - *p++ = readb (hp->Caddr+RIO_VPD_ROM + i*2); - /* read_rio_byte (hp, RIO_VPD_ROM + i*2); */ + /* Terminate the identifier string. + *** requires one extra byte in struct vpd_prom *** */ + *p++ = 0; - /* Terminate the identifier string. - *** requires one extra byte in struct vpd_prom *** */ - *p++=0; + if (rio_debug & RIO_DEBUG_PROBE) + my_hd((char *) &vpdp, 0x20); - if (rio_debug & RIO_DEBUG_PROBE) - my_hd ((char *)&vpdp, 0x20); - - func_exit(); + func_exit(); - return &vpdp; + return &vpdp; } static struct tty_operations rio_ops = { - .open = riotopen, + .open = riotopen, .close = gs_close, .write = gs_write, .put_char = gs_put_char, @@ -889,7 +885,7 @@ static int rio_init_drivers(void) rio_driver2->flags = TTY_DRIVER_REAL_RAW; tty_set_operations(rio_driver2, &rio_ops); - rio_dprintk (RIO_DEBUG_INIT, "set_termios = %p\n", gs_set_termios); + rio_dprintk(RIO_DEBUG_INIT, "set_termios = %p\n", gs_set_termios); if ((error = tty_register_driver(rio_driver))) goto out2; @@ -897,116 +893,111 @@ static int rio_init_drivers(void) goto out3; func_exit(); return 0; -out3: + out3: tty_unregister_driver(rio_driver); -out2: + out2: put_tty_driver(rio_driver2); -out1: + out1: put_tty_driver(rio_driver); -out: - printk(KERN_ERR "rio: Couldn't register a rio driver, error = %d\n", - error); + out: + printk(KERN_ERR "rio: Couldn't register a rio driver, error = %d\n", error); return 1; } -static void * ckmalloc (int size) +static void *ckmalloc(int size) { - void *p; + void *p; - p = kmalloc(size, GFP_KERNEL); - if (p) - memset(p, 0, size); - return p; + p = kmalloc(size, GFP_KERNEL); + if (p) + memset(p, 0, size); + return p; } -static int rio_init_datastructures (void) +static int rio_init_datastructures(void) { - int i; - struct Port *port; - func_enter(); - - /* Many drivers statically allocate the maximum number of ports - There is no reason not to allocate them dynamically. Is there? -- REW */ - /* However, the RIO driver allows users to configure their first - RTA as the ports numbered 504-511. We therefore need to allocate - the whole range. :-( -- REW */ - + int i; + struct Port *port; + func_enter(); + + /* Many drivers statically allocate the maximum number of ports + There is no reason not to allocate them dynamically. Is there? -- REW */ + /* However, the RIO driver allows users to configure their first + RTA as the ports numbered 504-511. We therefore need to allocate + the whole range. :-( -- REW */ + #define RI_SZ sizeof(struct rio_info) #define HOST_SZ sizeof(struct Host) #define PORT_SZ sizeof(struct Port *) #define TMIO_SZ sizeof(struct termios *) - rio_dprintk (RIO_DEBUG_INIT, "getting : %d %d %d %d %d bytes\n", - RI_SZ, - RIO_HOSTS * HOST_SZ, - RIO_PORTS * PORT_SZ, - RIO_PORTS * TMIO_SZ, - RIO_PORTS * TMIO_SZ); - - if (!(p = ckmalloc ( RI_SZ))) goto free0; - if (!(p->RIOHosts = ckmalloc (RIO_HOSTS * HOST_SZ))) goto free1; - if (!(p->RIOPortp = ckmalloc (RIO_PORTS * PORT_SZ))) goto free2; - p->RIOConf = RIOConf; - rio_dprintk (RIO_DEBUG_INIT, "Got : %p %p %p\n", - p, p->RIOHosts, p->RIOPortp); + rio_dprintk(RIO_DEBUG_INIT, "getting : %d %d %d %d %d bytes\n", RI_SZ, RIO_HOSTS * HOST_SZ, RIO_PORTS * PORT_SZ, RIO_PORTS * TMIO_SZ, RIO_PORTS * TMIO_SZ); + + if (!(p = ckmalloc(RI_SZ))) + goto free0; + if (!(p->RIOHosts = ckmalloc(RIO_HOSTS * HOST_SZ))) + goto free1; + if (!(p->RIOPortp = ckmalloc(RIO_PORTS * PORT_SZ))) + goto free2; + p->RIOConf = RIOConf; + rio_dprintk(RIO_DEBUG_INIT, "Got : %p %p %p\n", p, p->RIOHosts, p->RIOPortp); #if 1 - for (i = 0; i < RIO_PORTS; i++) { - port = p->RIOPortp[i] = ckmalloc (sizeof (struct Port)); - if (!port) { - goto free6; - } - rio_dprintk (RIO_DEBUG_INIT, "initing port %d (%d)\n", i, port->Mapped); - port->PortNum = i; - port->gs.magic = RIO_MAGIC; - port->gs.close_delay = HZ/2; - port->gs.closing_wait = 30 * HZ; - port->gs.rd = &rio_real_driver; - spin_lock_init(&port->portSem); - /* - * Initializing wait queue - */ - init_waitqueue_head(&port->gs.open_wait); - init_waitqueue_head(&port->gs.close_wait); - } + for (i = 0; i < RIO_PORTS; i++) { + port = p->RIOPortp[i] = ckmalloc(sizeof(struct Port)); + if (!port) { + goto free6; + } + rio_dprintk(RIO_DEBUG_INIT, "initing port %d (%d)\n", i, port->Mapped); + port->PortNum = i; + port->gs.magic = RIO_MAGIC; + port->gs.close_delay = HZ / 2; + port->gs.closing_wait = 30 * HZ; + port->gs.rd = &rio_real_driver; + spin_lock_init(&port->portSem); + /* + * Initializing wait queue + */ + init_waitqueue_head(&port->gs.open_wait); + init_waitqueue_head(&port->gs.close_wait); + } #else - /* We could postpone initializing them to when they are configured. */ + /* We could postpone initializing them to when they are configured. */ #endif - - if (rio_debug & RIO_DEBUG_INIT) { - my_hd (&rio_real_driver, sizeof (rio_real_driver)); - } - - func_exit(); - return 0; + if (rio_debug & RIO_DEBUG_INIT) { + my_hd(&rio_real_driver, sizeof(rio_real_driver)); + } + - free6:for (i--;i>=0;i--) - kfree (p->RIOPortp[i]); + func_exit(); + return 0; + + free6:for (i--; i >= 0; i--) + kfree(p->RIOPortp[i]); /*free5: free4: - free3:*/kfree (p->RIOPortp); - free2:kfree (p->RIOHosts); - free1: - rio_dprintk (RIO_DEBUG_INIT, "Not enough memory! %p %p %p\n", - p, p->RIOHosts, p->RIOPortp); - kfree(p); - free0: - return -ENOMEM; + free3:*/ kfree(p->RIOPortp); + free2:kfree(p->RIOHosts); + free1: + rio_dprintk(RIO_DEBUG_INIT, "Not enough memory! %p %p %p\n", p, p->RIOHosts, p->RIOPortp); + kfree(p); + free0: + return -ENOMEM; } -static void __exit rio_release_drivers(void) +static void __exit rio_release_drivers(void) { - func_enter(); - tty_unregister_driver(rio_driver2); - tty_unregister_driver(rio_driver); - put_tty_driver(rio_driver2); - put_tty_driver(rio_driver); - func_exit(); + func_enter(); + tty_unregister_driver(rio_driver2); + tty_unregister_driver(rio_driver); + put_tty_driver(rio_driver2); + put_tty_driver(rio_driver); + func_exit(); } @@ -1017,7 +1008,7 @@ static void __exit rio_release_drivers(void) There is another bit besides Bit 17. Turning that bit off (on boards shipped with the fix in the eeprom) results in a hang on the next access to the card. - */ + */ /******************************************************** * Setting bit 17 in the CNTRL register of the PLX 9050 * @@ -1030,319 +1021,293 @@ static void __exit rio_release_drivers(void) EEprom. As the bit is read/write for the CPU, we can fix it here, if we detect that it isn't set correctly. -- REW */ -static void fix_rio_pci (struct pci_dev *pdev) +static void fix_rio_pci(struct pci_dev *pdev) { - unsigned int hwbase; - unsigned long rebase; - unsigned int t; + unsigned int hwbase; + unsigned long rebase; + unsigned int t; #define CNTRL_REG_OFFSET 0x50 #define CNTRL_REG_GOODVALUE 0x18260000 - pci_read_config_dword(pdev, PCI_BASE_ADDRESS_0, &hwbase); - hwbase &= PCI_BASE_ADDRESS_MEM_MASK; - rebase = (ulong) ioremap(hwbase, 0x80); - t = readl (rebase + CNTRL_REG_OFFSET); - if (t != CNTRL_REG_GOODVALUE) { - printk (KERN_DEBUG "rio: performing cntrl reg fix: %08x -> %08x\n", - t, CNTRL_REG_GOODVALUE); - writel (CNTRL_REG_GOODVALUE, rebase + CNTRL_REG_OFFSET); - } - iounmap((char*) rebase); + pci_read_config_dword(pdev, PCI_BASE_ADDRESS_0, &hwbase); + hwbase &= PCI_BASE_ADDRESS_MEM_MASK; + rebase = (ulong) ioremap(hwbase, 0x80); + t = readl(rebase + CNTRL_REG_OFFSET); + if (t != CNTRL_REG_GOODVALUE) { + printk(KERN_DEBUG "rio: performing cntrl reg fix: %08x -> %08x\n", t, CNTRL_REG_GOODVALUE); + writel(CNTRL_REG_GOODVALUE, rebase + CNTRL_REG_OFFSET); + } + iounmap((char *) rebase); } #endif -static int __init rio_init(void) +static int __init rio_init(void) { - int found = 0; - int i; - struct Host *hp; - int retval; - struct vpd_prom *vpdp; - int okboard; + int found = 0; + int i; + struct Host *hp; + int retval; + struct vpd_prom *vpdp; + int okboard; #ifdef CONFIG_PCI - struct pci_dev *pdev = NULL; - unsigned int tint; - unsigned short tshort; + struct pci_dev *pdev = NULL; + unsigned int tint; + unsigned short tshort; #endif - func_enter(); - rio_dprintk (RIO_DEBUG_INIT, "Initing rio module... (rio_debug=%d)\n", - rio_debug); - - if (abs ((long) (&rio_debug) - rio_debug) < 0x10000) { - printk (KERN_WARNING "rio: rio_debug is an address, instead of a value. " - "Assuming -1. Was %x/%p.\n", rio_debug, &rio_debug); - rio_debug=-1; - } - - if (misc_register(&rio_fw_device) < 0) { - printk(KERN_ERR "RIO: Unable to register firmware loader driver.\n"); - return -EIO; - } - - retval = rio_init_datastructures (); - if (retval < 0) { - misc_deregister(&rio_fw_device); - return retval; - } - + func_enter(); + rio_dprintk(RIO_DEBUG_INIT, "Initing rio module... (rio_debug=%d)\n", rio_debug); + + if (abs((long) (&rio_debug) - rio_debug) < 0x10000) { + printk(KERN_WARNING "rio: rio_debug is an address, instead of a value. " "Assuming -1. Was %x/%p.\n", rio_debug, &rio_debug); + rio_debug = -1; + } + + if (misc_register(&rio_fw_device) < 0) { + printk(KERN_ERR "RIO: Unable to register firmware loader driver.\n"); + return -EIO; + } + + retval = rio_init_datastructures(); + if (retval < 0) { + misc_deregister(&rio_fw_device); + return retval; + } #ifdef CONFIG_PCI - /* First look for the JET devices: */ - while ((pdev = pci_get_device (PCI_VENDOR_ID_SPECIALIX, - PCI_DEVICE_ID_SPECIALIX_SX_XIO_IO8, - pdev))) { - if (pci_enable_device(pdev)) continue; - - /* Specialix has a whole bunch of cards with - 0x2000 as the device ID. They say its because - the standard requires it. Stupid standard. */ - /* It seems that reading a word doesn't work reliably on 2.0. - Also, reading a non-aligned dword doesn't work. So we read the - whole dword at 0x2c and extract the word at 0x2e (SUBSYSTEM_ID) - ourselves */ - /* I don't know why the define doesn't work, constant 0x2c does --REW */ - pci_read_config_dword (pdev, 0x2c, &tint); - tshort = (tint >> 16) & 0xffff; - rio_dprintk (RIO_DEBUG_PROBE, "Got a specialix card: %x.\n", tint); - if (tshort != 0x0100) { - rio_dprintk (RIO_DEBUG_PROBE, "But it's not a RIO card (%d)...\n", - tshort); - continue; - } - rio_dprintk (RIO_DEBUG_PROBE, "cp1\n"); - - pci_read_config_dword(pdev, PCI_BASE_ADDRESS_2, &tint); - - hp = &p->RIOHosts[p->RIONumHosts]; - hp->PaddrP = tint & PCI_BASE_ADDRESS_MEM_MASK; - hp->Ivec = pdev->irq; - if (((1 << hp->Ivec) & rio_irqmask) == 0) - hp->Ivec = 0; - hp->Caddr = ioremap(p->RIOHosts[p->RIONumHosts].PaddrP, RIO_WINDOW_LEN); - hp->CardP = (struct DpRam *) hp->Caddr; - hp->Type = RIO_PCI; - hp->Copy = rio_pcicopy; - hp->Mode = RIO_PCI_BOOT_FROM_RAM; - spin_lock_init(&hp->HostLock); - rio_reset_interrupt (hp); - rio_start_card_running (hp); - - rio_dprintk (RIO_DEBUG_PROBE, "Going to test it (%p/%p).\n", - (void *)p->RIOHosts[p->RIONumHosts].PaddrP, - p->RIOHosts[p->RIONumHosts].Caddr); - if (RIOBoardTest( p->RIOHosts[p->RIONumHosts].PaddrP, - p->RIOHosts[p->RIONumHosts].Caddr, - RIO_PCI, 0 ) == RIO_SUCCESS) { - rio_dprintk (RIO_DEBUG_INIT, "Done RIOBoardTest\n"); - WBYTE(p->RIOHosts[p->RIONumHosts].ResetInt, 0xff); - p->RIOHosts[p->RIONumHosts].UniqueNum = - ((RBYTE(p->RIOHosts[p->RIONumHosts].Unique[0]) &0xFF)<< 0)| - ((RBYTE(p->RIOHosts[p->RIONumHosts].Unique[1]) &0xFF)<< 8)| - ((RBYTE(p->RIOHosts[p->RIONumHosts].Unique[2]) &0xFF)<<16)| - ((RBYTE(p->RIOHosts[p->RIONumHosts].Unique[3]) &0xFF)<<24); - rio_dprintk (RIO_DEBUG_PROBE, "Hmm Tested ok, uniqid = %x.\n", - p->RIOHosts[p->RIONumHosts].UniqueNum); - - fix_rio_pci (pdev); - p->RIOLastPCISearch = RIO_SUCCESS; - p->RIONumHosts++; - found++; - } else { - iounmap((char*) (p->RIOHosts[p->RIONumHosts].Caddr)); - } - } - - /* Then look for the older PCI card.... : */ - - /* These older PCI cards have problems (only byte-mode access is - supported), which makes them a bit awkward to support. - They also have problems sharing interrupts. Be careful. - (The driver now refuses to share interrupts for these - cards. This should be sufficient). - */ - - /* Then look for the older RIO/PCI devices: */ - while ((pdev = pci_get_device (PCI_VENDOR_ID_SPECIALIX, - PCI_DEVICE_ID_SPECIALIX_RIO, - pdev))) { - if (pci_enable_device(pdev)) continue; + /* First look for the JET devices: */ + while ((pdev = pci_get_device(PCI_VENDOR_ID_SPECIALIX, PCI_DEVICE_ID_SPECIALIX_SX_XIO_IO8, pdev))) { + if (pci_enable_device(pdev)) + continue; + + /* Specialix has a whole bunch of cards with + 0x2000 as the device ID. They say its because + the standard requires it. Stupid standard. */ + /* It seems that reading a word doesn't work reliably on 2.0. + Also, reading a non-aligned dword doesn't work. So we read the + whole dword at 0x2c and extract the word at 0x2e (SUBSYSTEM_ID) + ourselves */ + /* I don't know why the define doesn't work, constant 0x2c does --REW */ + pci_read_config_dword(pdev, 0x2c, &tint); + tshort = (tint >> 16) & 0xffff; + rio_dprintk(RIO_DEBUG_PROBE, "Got a specialix card: %x.\n", tint); + if (tshort != 0x0100) { + rio_dprintk(RIO_DEBUG_PROBE, "But it's not a RIO card (%d)...\n", tshort); + continue; + } + rio_dprintk(RIO_DEBUG_PROBE, "cp1\n"); + + pci_read_config_dword(pdev, PCI_BASE_ADDRESS_2, &tint); + + hp = &p->RIOHosts[p->RIONumHosts]; + hp->PaddrP = tint & PCI_BASE_ADDRESS_MEM_MASK; + hp->Ivec = pdev->irq; + if (((1 << hp->Ivec) & rio_irqmask) == 0) + hp->Ivec = 0; + hp->Caddr = ioremap(p->RIOHosts[p->RIONumHosts].PaddrP, RIO_WINDOW_LEN); + hp->CardP = (struct DpRam *) hp->Caddr; + hp->Type = RIO_PCI; + hp->Copy = rio_pcicopy; + hp->Mode = RIO_PCI_BOOT_FROM_RAM; + spin_lock_init(&hp->HostLock); + rio_reset_interrupt(hp); + rio_start_card_running(hp); + + rio_dprintk(RIO_DEBUG_PROBE, "Going to test it (%p/%p).\n", (void *) p->RIOHosts[p->RIONumHosts].PaddrP, p->RIOHosts[p->RIONumHosts].Caddr); + if (RIOBoardTest(p->RIOHosts[p->RIONumHosts].PaddrP, p->RIOHosts[p->RIONumHosts].Caddr, RIO_PCI, 0) == RIO_SUCCESS) { + rio_dprintk(RIO_DEBUG_INIT, "Done RIOBoardTest\n"); + WBYTE(p->RIOHosts[p->RIONumHosts].ResetInt, 0xff); + p->RIOHosts[p->RIONumHosts].UniqueNum = + ((RBYTE(p->RIOHosts[p->RIONumHosts].Unique[0]) & 0xFF) << 0) | + ((RBYTE(p->RIOHosts[p->RIONumHosts].Unique[1]) & 0xFF) << 8) | ((RBYTE(p->RIOHosts[p->RIONumHosts].Unique[2]) & 0xFF) << 16) | ((RBYTE(p->RIOHosts[p->RIONumHosts].Unique[3]) & 0xFF) << 24); + rio_dprintk(RIO_DEBUG_PROBE, "Hmm Tested ok, uniqid = %x.\n", p->RIOHosts[p->RIONumHosts].UniqueNum); + + fix_rio_pci(pdev); + p->RIOLastPCISearch = RIO_SUCCESS; + p->RIONumHosts++; + found++; + } else { + iounmap((char *) (p->RIOHosts[p->RIONumHosts].Caddr)); + } + } + + /* Then look for the older PCI card.... : */ + + /* These older PCI cards have problems (only byte-mode access is + supported), which makes them a bit awkward to support. + They also have problems sharing interrupts. Be careful. + (The driver now refuses to share interrupts for these + cards. This should be sufficient). + */ + + /* Then look for the older RIO/PCI devices: */ + while ((pdev = pci_get_device(PCI_VENDOR_ID_SPECIALIX, PCI_DEVICE_ID_SPECIALIX_RIO, pdev))) { + if (pci_enable_device(pdev)) + continue; #ifdef CONFIG_RIO_OLDPCI - pci_read_config_dword(pdev, PCI_BASE_ADDRESS_0, &tint); - - hp = &p->RIOHosts[p->RIONumHosts]; - hp->PaddrP = tint & PCI_BASE_ADDRESS_MEM_MASK; - hp->Ivec = pdev->irq; - if (((1 << hp->Ivec) & rio_irqmask) == 0) - hp->Ivec = 0; - hp->Ivec |= 0x8000; /* Mark as non-sharable */ - hp->Caddr = ioremap(p->RIOHosts[p->RIONumHosts].PaddrP, RIO_WINDOW_LEN); - hp->CardP = (struct DpRam *) hp->Caddr; - hp->Type = RIO_PCI; - hp->Copy = rio_pcicopy; - hp->Mode = RIO_PCI_BOOT_FROM_RAM; - spin_lock_init(&hp->HostLock); - - rio_dprintk (RIO_DEBUG_PROBE, "Ivec: %x\n", hp->Ivec); - rio_dprintk (RIO_DEBUG_PROBE, "Mode: %x\n", hp->Mode); - - rio_reset_interrupt (hp); - rio_start_card_running (hp); - rio_dprintk (RIO_DEBUG_PROBE, "Going to test it (%p/%p).\n", - (void *)p->RIOHosts[p->RIONumHosts].PaddrP, - p->RIOHosts[p->RIONumHosts].Caddr); - if (RIOBoardTest( p->RIOHosts[p->RIONumHosts].PaddrP, - p->RIOHosts[p->RIONumHosts].Caddr, - RIO_PCI, 0 ) == RIO_SUCCESS) { - WBYTE(p->RIOHosts[p->RIONumHosts].ResetInt, 0xff); - p->RIOHosts[p->RIONumHosts].UniqueNum = - ((RBYTE(p->RIOHosts[p->RIONumHosts].Unique[0]) &0xFF)<< 0)| - ((RBYTE(p->RIOHosts[p->RIONumHosts].Unique[1]) &0xFF)<< 8)| - ((RBYTE(p->RIOHosts[p->RIONumHosts].Unique[2]) &0xFF)<<16)| - ((RBYTE(p->RIOHosts[p->RIONumHosts].Unique[3]) &0xFF)<<24); - rio_dprintk (RIO_DEBUG_PROBE, "Hmm Tested ok, uniqid = %x.\n", - p->RIOHosts[p->RIONumHosts].UniqueNum); - - p->RIOLastPCISearch = RIO_SUCCESS; - p->RIONumHosts++; - found++; - } else { - iounmap((char*) (p->RIOHosts[p->RIONumHosts].Caddr)); - } + pci_read_config_dword(pdev, PCI_BASE_ADDRESS_0, &tint); + + hp = &p->RIOHosts[p->RIONumHosts]; + hp->PaddrP = tint & PCI_BASE_ADDRESS_MEM_MASK; + hp->Ivec = pdev->irq; + if (((1 << hp->Ivec) & rio_irqmask) == 0) + hp->Ivec = 0; + hp->Ivec |= 0x8000; /* Mark as non-sharable */ + hp->Caddr = ioremap(p->RIOHosts[p->RIONumHosts].PaddrP, RIO_WINDOW_LEN); + hp->CardP = (struct DpRam *) hp->Caddr; + hp->Type = RIO_PCI; + hp->Copy = rio_pcicopy; + hp->Mode = RIO_PCI_BOOT_FROM_RAM; + spin_lock_init(&hp->HostLock); + + rio_dprintk(RIO_DEBUG_PROBE, "Ivec: %x\n", hp->Ivec); + rio_dprintk(RIO_DEBUG_PROBE, "Mode: %x\n", hp->Mode); + + rio_reset_interrupt(hp); + rio_start_card_running(hp); + rio_dprintk(RIO_DEBUG_PROBE, "Going to test it (%p/%p).\n", (void *) p->RIOHosts[p->RIONumHosts].PaddrP, p->RIOHosts[p->RIONumHosts].Caddr); + if (RIOBoardTest(p->RIOHosts[p->RIONumHosts].PaddrP, p->RIOHosts[p->RIONumHosts].Caddr, RIO_PCI, 0) == RIO_SUCCESS) { + WBYTE(p->RIOHosts[p->RIONumHosts].ResetInt, 0xff); + p->RIOHosts[p->RIONumHosts].UniqueNum = + ((RBYTE(p->RIOHosts[p->RIONumHosts].Unique[0]) & 0xFF) << 0) | + ((RBYTE(p->RIOHosts[p->RIONumHosts].Unique[1]) & 0xFF) << 8) | ((RBYTE(p->RIOHosts[p->RIONumHosts].Unique[2]) & 0xFF) << 16) | ((RBYTE(p->RIOHosts[p->RIONumHosts].Unique[3]) & 0xFF) << 24); + rio_dprintk(RIO_DEBUG_PROBE, "Hmm Tested ok, uniqid = %x.\n", p->RIOHosts[p->RIONumHosts].UniqueNum); + + p->RIOLastPCISearch = RIO_SUCCESS; + p->RIONumHosts++; + found++; + } else { + iounmap((char *) (p->RIOHosts[p->RIONumHosts].Caddr)); + } #else - printk (KERN_ERR "Found an older RIO PCI card, but the driver is not " - "compiled to support it.\n"); + printk(KERN_ERR "Found an older RIO PCI card, but the driver is not " "compiled to support it.\n"); #endif - } -#endif /* PCI */ - - /* Now probe for ISA cards... */ - for (i=0;iRIOHosts[p->RIONumHosts]; - hp->PaddrP = rio_probe_addrs[i]; - /* There was something about the IRQs of these cards. 'Forget what.--REW */ - hp->Ivec = 0; - hp->Caddr = ioremap(p->RIOHosts[p->RIONumHosts].PaddrP, RIO_WINDOW_LEN); - hp->CardP = (struct DpRam *) hp->Caddr; - hp->Type = RIO_AT; - hp->Copy = rio_pcicopy; /* AT card PCI???? - PVDL - * -- YES! this is now a normal copy. Only the - * old PCI card uses the special PCI copy. - * Moreover, the ISA card will work with the - * special PCI copy anyway. -- REW */ - hp->Mode = 0; - spin_lock_init(&hp->HostLock); - - vpdp = get_VPD_PROM (hp); - rio_dprintk (RIO_DEBUG_PROBE, "Got VPD ROM\n"); - okboard = 0; - if ((strncmp (vpdp->identifier, RIO_ISA_IDENT, 16) == 0) || - (strncmp (vpdp->identifier, RIO_ISA2_IDENT, 16) == 0) || - (strncmp (vpdp->identifier, RIO_ISA3_IDENT, 16) == 0)) { - /* Board is present... */ - if (RIOBoardTest (hp->PaddrP, - hp->Caddr, RIO_AT, 0) == RIO_SUCCESS) { - /* ... and feeling fine!!!! */ - rio_dprintk (RIO_DEBUG_PROBE, "Hmm Tested ok, uniqid = %x.\n", - p->RIOHosts[p->RIONumHosts].UniqueNum); - if (RIOAssignAT(p, hp->PaddrP, hp->Caddr, 0)) { - rio_dprintk (RIO_DEBUG_PROBE, "Hmm Tested ok, host%d uniqid = %x.\n", - p->RIONumHosts, - p->RIOHosts[p->RIONumHosts-1].UniqueNum); - okboard++; - found++; - } - } - - if (!okboard) - iounmap ((char*) (hp->Caddr)); - } - } - - - for (i=0;iRIONumHosts;i++) { - hp = &p->RIOHosts[i]; - if (hp->Ivec) { - int mode = SA_SHIRQ; - if (hp->Ivec & 0x8000) {mode = 0; hp->Ivec &= 0x7fff;} - rio_dprintk (RIO_DEBUG_INIT, "Requesting interrupt hp: %p rio_interrupt: %d Mode: %x\n", hp,hp->Ivec, hp->Mode); - retval = request_irq (hp->Ivec, rio_interrupt, mode, "rio", hp); - rio_dprintk (RIO_DEBUG_INIT, "Return value from request_irq: %d\n", retval); - if (retval) { - printk(KERN_ERR "rio: Cannot allocate irq %d.\n", hp->Ivec); - hp->Ivec = 0; - } - rio_dprintk (RIO_DEBUG_INIT, "Got irq %d.\n", hp->Ivec); - if (hp->Ivec != 0){ - rio_dprintk (RIO_DEBUG_INIT, "Enabling interrupts on rio card.\n"); - hp->Mode |= RIO_PCI_INT_ENABLE; - } else - hp->Mode &= !RIO_PCI_INT_ENABLE; - rio_dprintk (RIO_DEBUG_INIT, "New Mode: %x\n", hp->Mode); - rio_start_card_running (hp); - } - /* Init the timer "always" to make sure that it can safely be - deleted when we unload... */ - - init_timer (&hp->timer); - if (!hp->Ivec) { - rio_dprintk (RIO_DEBUG_INIT, "Starting polling at %dj intervals.\n", - rio_poll); - hp->timer.data = i; - hp->timer.function = rio_pollfunc; - hp->timer.expires = jiffies + rio_poll; - add_timer (&hp->timer); - } - } - - if (found) { - rio_dprintk (RIO_DEBUG_INIT, "rio: total of %d boards detected.\n", found); - rio_init_drivers (); - } else { - /* deregister the misc device we created earlier */ - misc_deregister(&rio_fw_device); - } - - func_exit(); - return found?0:-EIO; + } +#endif /* PCI */ + + /* Now probe for ISA cards... */ + for (i = 0; i < NR_RIO_ADDRS; i++) { + hp = &p->RIOHosts[p->RIONumHosts]; + hp->PaddrP = rio_probe_addrs[i]; + /* There was something about the IRQs of these cards. 'Forget what.--REW */ + hp->Ivec = 0; + hp->Caddr = ioremap(p->RIOHosts[p->RIONumHosts].PaddrP, RIO_WINDOW_LEN); + hp->CardP = (struct DpRam *) hp->Caddr; + hp->Type = RIO_AT; + hp->Copy = rio_pcicopy; /* AT card PCI???? - PVDL + * -- YES! this is now a normal copy. Only the + * old PCI card uses the special PCI copy. + * Moreover, the ISA card will work with the + * special PCI copy anyway. -- REW */ + hp->Mode = 0; + spin_lock_init(&hp->HostLock); + + vpdp = get_VPD_PROM(hp); + rio_dprintk(RIO_DEBUG_PROBE, "Got VPD ROM\n"); + okboard = 0; + if ((strncmp(vpdp->identifier, RIO_ISA_IDENT, 16) == 0) || (strncmp(vpdp->identifier, RIO_ISA2_IDENT, 16) == 0) || (strncmp(vpdp->identifier, RIO_ISA3_IDENT, 16) == 0)) { + /* Board is present... */ + if (RIOBoardTest(hp->PaddrP, hp->Caddr, RIO_AT, 0) == RIO_SUCCESS) { + /* ... and feeling fine!!!! */ + rio_dprintk(RIO_DEBUG_PROBE, "Hmm Tested ok, uniqid = %x.\n", p->RIOHosts[p->RIONumHosts].UniqueNum); + if (RIOAssignAT(p, hp->PaddrP, hp->Caddr, 0)) { + rio_dprintk(RIO_DEBUG_PROBE, "Hmm Tested ok, host%d uniqid = %x.\n", p->RIONumHosts, p->RIOHosts[p->RIONumHosts - 1].UniqueNum); + okboard++; + found++; + } + } + + if (!okboard) + iounmap((char *) (hp->Caddr)); + } + } + + + for (i = 0; i < p->RIONumHosts; i++) { + hp = &p->RIOHosts[i]; + if (hp->Ivec) { + int mode = SA_SHIRQ; + if (hp->Ivec & 0x8000) { + mode = 0; + hp->Ivec &= 0x7fff; + } + rio_dprintk(RIO_DEBUG_INIT, "Requesting interrupt hp: %p rio_interrupt: %d Mode: %x\n", hp, hp->Ivec, hp->Mode); + retval = request_irq(hp->Ivec, rio_interrupt, mode, "rio", hp); + rio_dprintk(RIO_DEBUG_INIT, "Return value from request_irq: %d\n", retval); + if (retval) { + printk(KERN_ERR "rio: Cannot allocate irq %d.\n", hp->Ivec); + hp->Ivec = 0; + } + rio_dprintk(RIO_DEBUG_INIT, "Got irq %d.\n", hp->Ivec); + if (hp->Ivec != 0) { + rio_dprintk(RIO_DEBUG_INIT, "Enabling interrupts on rio card.\n"); + hp->Mode |= RIO_PCI_INT_ENABLE; + } else + hp->Mode &= !RIO_PCI_INT_ENABLE; + rio_dprintk(RIO_DEBUG_INIT, "New Mode: %x\n", hp->Mode); + rio_start_card_running(hp); + } + /* Init the timer "always" to make sure that it can safely be + deleted when we unload... */ + + init_timer(&hp->timer); + if (!hp->Ivec) { + rio_dprintk(RIO_DEBUG_INIT, "Starting polling at %dj intervals.\n", rio_poll); + hp->timer.data = i; + hp->timer.function = rio_pollfunc; + hp->timer.expires = jiffies + rio_poll; + add_timer(&hp->timer); + } + } + + if (found) { + rio_dprintk(RIO_DEBUG_INIT, "rio: total of %d boards detected.\n", found); + rio_init_drivers(); + } else { + /* deregister the misc device we created earlier */ + misc_deregister(&rio_fw_device); + } + + func_exit(); + return found ? 0 : -EIO; } -static void __exit rio_exit (void) +static void __exit rio_exit(void) { - int i; - struct Host *hp; - - func_enter(); + int i; + struct Host *hp; + + func_enter(); - for (i=0,hp=p->RIOHosts;iRIONumHosts;i++, hp++) { - RIOHostReset (hp->Type, hp->CardP, hp->Slot); - if (hp->Ivec) { - free_irq (hp->Ivec, hp); - rio_dprintk (RIO_DEBUG_INIT, "freed irq %d.\n", hp->Ivec); - } - /* It is safe/allowed to del_timer a non-active timer */ - del_timer (&hp->timer); - } + for (i = 0, hp = p->RIOHosts; i < p->RIONumHosts; i++, hp++) { + RIOHostReset(hp->Type, hp->CardP, hp->Slot); + if (hp->Ivec) { + free_irq(hp->Ivec, hp); + rio_dprintk(RIO_DEBUG_INIT, "freed irq %d.\n", hp->Ivec); + } + /* It is safe/allowed to del_timer a non-active timer */ + del_timer(&hp->timer); + } - if (misc_deregister(&rio_fw_device) < 0) { - printk (KERN_INFO "rio: couldn't deregister control-device\n"); - } + if (misc_deregister(&rio_fw_device) < 0) { + printk(KERN_INFO "rio: couldn't deregister control-device\n"); + } - rio_dprintk (RIO_DEBUG_CLEANUP, "Cleaning up drivers\n"); + rio_dprintk(RIO_DEBUG_CLEANUP, "Cleaning up drivers\n"); - rio_release_drivers (); + rio_release_drivers(); - /* Release dynamically allocated memory */ - kfree (p->RIOPortp); - kfree (p->RIOHosts); - kfree (p); + /* Release dynamically allocated memory */ + kfree(p->RIOPortp); + kfree(p->RIOHosts); + kfree(p); - func_exit(); + func_exit(); } module_init(rio_init); @@ -1368,4 +1333,3 @@ module_exit(rio_exit); * tab-width: 8 * End: */ - diff --git a/drivers/char/rio/rio_linux.h b/drivers/char/rio/rio_linux.h index 1fba19d5b66a..4ce77fb1fae5 100644 --- a/drivers/char/rio/rio_linux.h +++ b/drivers/char/rio/rio_linux.h @@ -37,15 +37,15 @@ struct vpd_prom { - unsigned short id; - char hwrev; - char hwass; - int uniqid; - char myear; - char mweek; - char hw_feature[5]; - char oem_id; - char identifier[16]; + unsigned short id; + char hwrev; + char hwass; + int uniqid; + char myear; + char mweek; + char hw_feature[5]; + char oem_id; + char identifier[16]; }; @@ -75,13 +75,13 @@ struct vpd_prom { (L_ISIG(tty))) -#endif /* __KERNEL__ */ +#endif /* __KERNEL__ */ #define RIO_BOARD_INTR_LOCK 1 -#ifndef RIOCTL_MISC_MINOR +#ifndef RIOCTL_MISC_MINOR /* Allow others to gather this into "major.h" or something like that */ #define RIOCTL_MISC_MINOR 169 #endif @@ -121,39 +121,39 @@ struct vpd_prom { spin_unlock_irqrestore(sem, flags) #define rio_spin_lock(sem) \ - spin_lock(sem) + spin_lock(sem) #define rio_spin_unlock(sem) \ - spin_unlock(sem) + spin_unlock(sem) #endif #ifdef CONFIG_RIO_OLDPCI -static inline void *rio_memcpy_toio (void *dummy, void *dest, void *source, int n) +static inline void *rio_memcpy_toio(void *dummy, void *dest, void *source, int n) { - char *dst = dest; - char *src = source; + char *dst = dest; + char *src = source; - while (n--) { - writeb (*src++, dst++); - (void) readb (dummy); - } + while (n--) { + writeb(*src++, dst++); + (void) readb(dummy); + } - return dest; + return dest; } -static inline void *rio_memcpy_fromio (void *dest, void *source, int n) +static inline void *rio_memcpy_fromio(void *dest, void *source, int n) { - char *dst = dest; - char *src = source; + char *dst = dest; + char *src = source; - while (n--) - *dst++ = readb (src++); + while (n--) + *dst++ = readb(src++); - return dest; + return dest; } #else @@ -179,9 +179,8 @@ static inline void *rio_memcpy_fromio (void *dest, void *source, int n) #define func_exit() rio_dprintk (RIO_DEBUG_FLOW, "rio: exit %s\n", __FUNCTION__) #define func_enter2() rio_dprintk (RIO_DEBUG_FLOW, "rio: enter %s (port %d)\n",__FUNCTION__, port->line) #else -#define rio_dprintk(f, str...) /* nothing */ +#define rio_dprintk(f, str...) /* nothing */ #define func_enter() #define func_exit() #define func_enter2() #endif - diff --git a/drivers/char/rio/rioboard.h b/drivers/char/rio/rioboard.h index cc6ac6a98f65..822c071a693b 100644 --- a/drivers/char/rio/rioboard.h +++ b/drivers/char/rio/rioboard.h @@ -35,7 +35,7 @@ */ -#ifndef _rioboard_h /* If RIOBOARD.H not already defined */ +#ifndef _rioboard_h /* If RIOBOARD.H not already defined */ #define _rioboard_h 1 /***************************************************************************** @@ -46,7 +46,7 @@ /* Hardware Registers... */ -#define RIO_REG_BASE 0x7C00 /* Base of control registers */ +#define RIO_REG_BASE 0x7C00 /* Base of control registers */ #define RIO_CONFIG RIO_REG_BASE + 0x0000 /* WRITE: Configuration Register */ #define RIO_INTSET RIO_REG_BASE + 0x0080 /* WRITE: Interrupt Set */ @@ -58,30 +58,30 @@ #define RIO_RESETSTAT RIO_REG_BASE + 0x0100 /* READ: Reset Status (Jet boards only) */ /* RIO_VPD_ROM definitions... */ -#define VPD_SLX_ID1 0x00 /* READ: Specialix Identifier #1 */ -#define VPD_SLX_ID2 0x01 /* READ: Specialix Identifier #2 */ -#define VPD_HW_REV 0x02 /* READ: Hardware Revision */ -#define VPD_HW_ASSEM 0x03 /* READ: Hardware Assembly Level */ -#define VPD_UNIQUEID4 0x04 /* READ: Unique Identifier #4 */ -#define VPD_UNIQUEID3 0x05 /* READ: Unique Identifier #3 */ -#define VPD_UNIQUEID2 0x06 /* READ: Unique Identifier #2 */ -#define VPD_UNIQUEID1 0x07 /* READ: Unique Identifier #1 */ -#define VPD_MANU_YEAR 0x08 /* READ: Year Of Manufacture (0 = 1970) */ -#define VPD_MANU_WEEK 0x09 /* READ: Week Of Manufacture (0 = week 1 Jan) */ -#define VPD_HWFEATURE1 0x0A /* READ: Hardware Feature Byte 1 */ -#define VPD_HWFEATURE2 0x0B /* READ: Hardware Feature Byte 2 */ -#define VPD_HWFEATURE3 0x0C /* READ: Hardware Feature Byte 3 */ -#define VPD_HWFEATURE4 0x0D /* READ: Hardware Feature Byte 4 */ -#define VPD_HWFEATURE5 0x0E /* READ: Hardware Feature Byte 5 */ -#define VPD_OEMID 0x0F /* READ: OEM Identifier */ -#define VPD_IDENT 0x10 /* READ: Identifier string (16 bytes) */ +#define VPD_SLX_ID1 0x00 /* READ: Specialix Identifier #1 */ +#define VPD_SLX_ID2 0x01 /* READ: Specialix Identifier #2 */ +#define VPD_HW_REV 0x02 /* READ: Hardware Revision */ +#define VPD_HW_ASSEM 0x03 /* READ: Hardware Assembly Level */ +#define VPD_UNIQUEID4 0x04 /* READ: Unique Identifier #4 */ +#define VPD_UNIQUEID3 0x05 /* READ: Unique Identifier #3 */ +#define VPD_UNIQUEID2 0x06 /* READ: Unique Identifier #2 */ +#define VPD_UNIQUEID1 0x07 /* READ: Unique Identifier #1 */ +#define VPD_MANU_YEAR 0x08 /* READ: Year Of Manufacture (0 = 1970) */ +#define VPD_MANU_WEEK 0x09 /* READ: Week Of Manufacture (0 = week 1 Jan) */ +#define VPD_HWFEATURE1 0x0A /* READ: Hardware Feature Byte 1 */ +#define VPD_HWFEATURE2 0x0B /* READ: Hardware Feature Byte 2 */ +#define VPD_HWFEATURE3 0x0C /* READ: Hardware Feature Byte 3 */ +#define VPD_HWFEATURE4 0x0D /* READ: Hardware Feature Byte 4 */ +#define VPD_HWFEATURE5 0x0E /* READ: Hardware Feature Byte 5 */ +#define VPD_OEMID 0x0F /* READ: OEM Identifier */ +#define VPD_IDENT 0x10 /* READ: Identifier string (16 bytes) */ #define VPD_IDENT_LEN 0x10 /* VPD ROM Definitions... */ #define SLX_ID1 0x4D #define SLX_ID2 0x98 -#define PRODUCT_ID(a) ((a>>4)&0xF) /* Use to obtain Product ID from VPD_UNIQUEID1 */ +#define PRODUCT_ID(a) ((a>>4)&0xF) /* Use to obtain Product ID from VPD_UNIQUEID1 */ #define ID_SX_ISA 0x2 #define ID_RIO_EISA 0x3 @@ -101,7 +101,7 @@ /* Firmware load position... */ -#define FIRMWARELOADADDR 0x7C00 /* Firmware is loaded _before_ this address */ +#define FIRMWARELOADADDR 0x7C00 /* Firmware is loaded _before_ this address */ /***************************************************************************** ***************************** ***************************** @@ -112,14 +112,14 @@ /* Control Register Definitions... */ #define RIO_ISA_IDENT "JBJGPGGHINSMJPJR" -#define RIO_ISA_CFG_BOOTRAM 0x01 /* Boot from RAM, else Link */ -#define RIO_ISA_CFG_BUSENABLE 0x02 /* Enable processor bus */ -#define RIO_ISA_CFG_IRQMASK 0x30 /* Interrupt mask */ -#define RIO_ISA_CFG_IRQ12 0x10 /* Interrupt Level 12 */ -#define RIO_ISA_CFG_IRQ11 0x20 /* Interrupt Level 11 */ -#define RIO_ISA_CFG_IRQ9 0x30 /* Interrupt Level 9 */ -#define RIO_ISA_CFG_LINK20 0x40 /* 20Mbps link, else 10Mbps */ -#define RIO_ISA_CFG_WAITSTATE0 0x80 /* 0 waitstates, else 1 */ +#define RIO_ISA_CFG_BOOTRAM 0x01 /* Boot from RAM, else Link */ +#define RIO_ISA_CFG_BUSENABLE 0x02 /* Enable processor bus */ +#define RIO_ISA_CFG_IRQMASK 0x30 /* Interrupt mask */ +#define RIO_ISA_CFG_IRQ12 0x10 /* Interrupt Level 12 */ +#define RIO_ISA_CFG_IRQ11 0x20 /* Interrupt Level 11 */ +#define RIO_ISA_CFG_IRQ9 0x30 /* Interrupt Level 9 */ +#define RIO_ISA_CFG_LINK20 0x40 /* 20Mbps link, else 10Mbps */ +#define RIO_ISA_CFG_WAITSTATE0 0x80 /* 0 waitstates, else 1 */ /***************************************************************************** ***************************** ***************************** @@ -130,17 +130,17 @@ /* Control Register Definitions... */ #define RIO_ISA2_IDENT "JBJGPGGHINSMJPJR" -#define RIO_ISA2_CFG_BOOTRAM 0x01 /* Boot from RAM, else Link */ -#define RIO_ISA2_CFG_BUSENABLE 0x02 /* Enable processor bus */ -#define RIO_ISA2_CFG_INTENABLE 0x04 /* Interrupt enable, else disable */ -#define RIO_ISA2_CFG_16BIT 0x08 /* 16bit mode, else 8bit */ -#define RIO_ISA2_CFG_IRQMASK 0x30 /* Interrupt mask */ -#define RIO_ISA2_CFG_IRQ15 0x00 /* Interrupt Level 15 */ -#define RIO_ISA2_CFG_IRQ12 0x10 /* Interrupt Level 12 */ -#define RIO_ISA2_CFG_IRQ11 0x20 /* Interrupt Level 11 */ -#define RIO_ISA2_CFG_IRQ9 0x30 /* Interrupt Level 9 */ -#define RIO_ISA2_CFG_LINK20 0x40 /* 20Mbps link, else 10Mbps */ -#define RIO_ISA2_CFG_WAITSTATE0 0x80 /* 0 waitstates, else 1 */ +#define RIO_ISA2_CFG_BOOTRAM 0x01 /* Boot from RAM, else Link */ +#define RIO_ISA2_CFG_BUSENABLE 0x02 /* Enable processor bus */ +#define RIO_ISA2_CFG_INTENABLE 0x04 /* Interrupt enable, else disable */ +#define RIO_ISA2_CFG_16BIT 0x08 /* 16bit mode, else 8bit */ +#define RIO_ISA2_CFG_IRQMASK 0x30 /* Interrupt mask */ +#define RIO_ISA2_CFG_IRQ15 0x00 /* Interrupt Level 15 */ +#define RIO_ISA2_CFG_IRQ12 0x10 /* Interrupt Level 12 */ +#define RIO_ISA2_CFG_IRQ11 0x20 /* Interrupt Level 11 */ +#define RIO_ISA2_CFG_IRQ9 0x30 /* Interrupt Level 9 */ +#define RIO_ISA2_CFG_LINK20 0x40 /* 20Mbps link, else 10Mbps */ +#define RIO_ISA2_CFG_WAITSTATE0 0x80 /* 0 waitstates, else 1 */ /***************************************************************************** ***************************** ****************************** @@ -151,14 +151,14 @@ /* Control Register Definitions... */ #define RIO_ISA3_IDENT "JET HOST BY KEV#" -#define RIO_ISA3_CFG_BUSENABLE 0x02 /* Enable processor bus */ -#define RIO_ISA3_CFG_INTENABLE 0x04 /* Interrupt enable, else disable */ -#define RIO_ISA32_CFG_IRQMASK 0xF30 /* Interrupt mask */ -#define RIO_ISA3_CFG_IRQ15 0xF0 /* Interrupt Level 15 */ -#define RIO_ISA3_CFG_IRQ12 0xC0 /* Interrupt Level 12 */ -#define RIO_ISA3_CFG_IRQ11 0xB0 /* Interrupt Level 11 */ -#define RIO_ISA3_CFG_IRQ10 0xA0 /* Interrupt Level 10 */ -#define RIO_ISA3_CFG_IRQ9 0x90 /* Interrupt Level 9 */ +#define RIO_ISA3_CFG_BUSENABLE 0x02 /* Enable processor bus */ +#define RIO_ISA3_CFG_INTENABLE 0x04 /* Interrupt enable, else disable */ +#define RIO_ISA32_CFG_IRQMASK 0xF30 /* Interrupt mask */ +#define RIO_ISA3_CFG_IRQ15 0xF0 /* Interrupt Level 15 */ +#define RIO_ISA3_CFG_IRQ12 0xC0 /* Interrupt Level 12 */ +#define RIO_ISA3_CFG_IRQ11 0xB0 /* Interrupt Level 11 */ +#define RIO_ISA3_CFG_IRQ10 0xA0 /* Interrupt Level 10 */ +#define RIO_ISA3_CFG_IRQ9 0x90 /* Interrupt Level 9 */ /***************************************************************************** ********************************* ******************************** @@ -169,9 +169,9 @@ /* Control Register Definitions... */ #define RIO_MCA_IDENT "JBJGPGGHINSMJPJR" -#define RIO_MCA_CFG_BOOTRAM 0x01 /* Boot from RAM, else Link */ -#define RIO_MCA_CFG_BUSENABLE 0x02 /* Enable processor bus */ -#define RIO_MCA_CFG_LINK20 0x40 /* 20Mbps link, else 10Mbps */ +#define RIO_MCA_CFG_BOOTRAM 0x01 /* Boot from RAM, else Link */ +#define RIO_MCA_CFG_BUSENABLE 0x02 /* Enable processor bus */ +#define RIO_MCA_CFG_LINK20 0x40 /* 20Mbps link, else 10Mbps */ /***************************************************************************** ******************************** ******************************** @@ -185,35 +185,35 @@ #define EISA_PRODUCT_NUMBER 0xC82 #define EISA_REVISION_NUMBER 0xC83 #define EISA_CARD_ENABLE 0xC84 -#define EISA_VPD_UNIQUEID4 0xC88 /* READ: Unique Identifier #4 */ -#define EISA_VPD_UNIQUEID3 0xC8A /* READ: Unique Identifier #3 */ -#define EISA_VPD_UNIQUEID2 0xC90 /* READ: Unique Identifier #2 */ -#define EISA_VPD_UNIQUEID1 0xC92 /* READ: Unique Identifier #1 */ -#define EISA_VPD_MANU_YEAR 0xC98 /* READ: Year Of Manufacture (0 = 1970) */ -#define EISA_VPD_MANU_WEEK 0xC9A /* READ: Week Of Manufacture (0 = week 1 Jan) */ +#define EISA_VPD_UNIQUEID4 0xC88 /* READ: Unique Identifier #4 */ +#define EISA_VPD_UNIQUEID3 0xC8A /* READ: Unique Identifier #3 */ +#define EISA_VPD_UNIQUEID2 0xC90 /* READ: Unique Identifier #2 */ +#define EISA_VPD_UNIQUEID1 0xC92 /* READ: Unique Identifier #1 */ +#define EISA_VPD_MANU_YEAR 0xC98 /* READ: Year Of Manufacture (0 = 1970) */ +#define EISA_VPD_MANU_WEEK 0xC9A /* READ: Week Of Manufacture (0 = week 1 Jan) */ #define EISA_MEM_ADDR_23_16 0xC00 #define EISA_MEM_ADDR_31_24 0xC01 -#define EISA_RIO_CONFIG 0xC02 /* WRITE: Configuration Register */ -#define EISA_RIO_INTSET 0xC03 /* WRITE: Interrupt Set */ -#define EISA_RIO_INTRESET 0xC03 /* READ: Interrupt Reset */ +#define EISA_RIO_CONFIG 0xC02 /* WRITE: Configuration Register */ +#define EISA_RIO_INTSET 0xC03 /* WRITE: Interrupt Set */ +#define EISA_RIO_INTRESET 0xC03 /* READ: Interrupt Reset */ /* Control Register Definitions... */ -#define RIO_EISA_CFG_BOOTRAM 0x01 /* Boot from RAM, else Link */ -#define RIO_EISA_CFG_LINK20 0x02 /* 20Mbps link, else 10Mbps */ -#define RIO_EISA_CFG_BUSENABLE 0x04 /* Enable processor bus */ -#define RIO_EISA_CFG_PROCRUN 0x08 /* Processor running, else reset */ -#define RIO_EISA_CFG_IRQMASK 0xF0 /* Interrupt mask */ -#define RIO_EISA_CFG_IRQ15 0xF0 /* Interrupt Level 15 */ -#define RIO_EISA_CFG_IRQ14 0xE0 /* Interrupt Level 14 */ -#define RIO_EISA_CFG_IRQ12 0xC0 /* Interrupt Level 12 */ -#define RIO_EISA_CFG_IRQ11 0xB0 /* Interrupt Level 11 */ -#define RIO_EISA_CFG_IRQ10 0xA0 /* Interrupt Level 10 */ -#define RIO_EISA_CFG_IRQ9 0x90 /* Interrupt Level 9 */ -#define RIO_EISA_CFG_IRQ7 0x70 /* Interrupt Level 7 */ -#define RIO_EISA_CFG_IRQ6 0x60 /* Interrupt Level 6 */ -#define RIO_EISA_CFG_IRQ5 0x50 /* Interrupt Level 5 */ -#define RIO_EISA_CFG_IRQ4 0x40 /* Interrupt Level 4 */ -#define RIO_EISA_CFG_IRQ3 0x30 /* Interrupt Level 3 */ +#define RIO_EISA_CFG_BOOTRAM 0x01 /* Boot from RAM, else Link */ +#define RIO_EISA_CFG_LINK20 0x02 /* 20Mbps link, else 10Mbps */ +#define RIO_EISA_CFG_BUSENABLE 0x04 /* Enable processor bus */ +#define RIO_EISA_CFG_PROCRUN 0x08 /* Processor running, else reset */ +#define RIO_EISA_CFG_IRQMASK 0xF0 /* Interrupt mask */ +#define RIO_EISA_CFG_IRQ15 0xF0 /* Interrupt Level 15 */ +#define RIO_EISA_CFG_IRQ14 0xE0 /* Interrupt Level 14 */ +#define RIO_EISA_CFG_IRQ12 0xC0 /* Interrupt Level 12 */ +#define RIO_EISA_CFG_IRQ11 0xB0 /* Interrupt Level 11 */ +#define RIO_EISA_CFG_IRQ10 0xA0 /* Interrupt Level 10 */ +#define RIO_EISA_CFG_IRQ9 0x90 /* Interrupt Level 9 */ +#define RIO_EISA_CFG_IRQ7 0x70 /* Interrupt Level 7 */ +#define RIO_EISA_CFG_IRQ6 0x60 /* Interrupt Level 6 */ +#define RIO_EISA_CFG_IRQ5 0x50 /* Interrupt Level 5 */ +#define RIO_EISA_CFG_IRQ4 0x40 /* Interrupt Level 4 */ +#define RIO_EISA_CFG_IRQ3 0x30 /* Interrupt Level 3 */ /***************************************************************************** ******************************** ******************************** @@ -224,20 +224,20 @@ /* Control Register Definitions... */ #define RIO_SBUS_IDENT "JBPGK#\0\0\0\0\0\0\0\0\0\0" -#define RIO_SBUS_CFG_BOOTRAM 0x01 /* Boot from RAM, else Link */ -#define RIO_SBUS_CFG_BUSENABLE 0x02 /* Enable processor bus */ -#define RIO_SBUS_CFG_INTENABLE 0x04 /* Interrupt enable, else disable */ -#define RIO_SBUS_CFG_IRQMASK 0x38 /* Interrupt mask */ -#define RIO_SBUS_CFG_IRQNONE 0x00 /* No Interrupt */ -#define RIO_SBUS_CFG_IRQ7 0x38 /* Interrupt Level 7 */ -#define RIO_SBUS_CFG_IRQ6 0x30 /* Interrupt Level 6 */ -#define RIO_SBUS_CFG_IRQ5 0x28 /* Interrupt Level 5 */ -#define RIO_SBUS_CFG_IRQ4 0x20 /* Interrupt Level 4 */ -#define RIO_SBUS_CFG_IRQ3 0x18 /* Interrupt Level 3 */ -#define RIO_SBUS_CFG_IRQ2 0x10 /* Interrupt Level 2 */ -#define RIO_SBUS_CFG_IRQ1 0x08 /* Interrupt Level 1 */ -#define RIO_SBUS_CFG_LINK20 0x40 /* 20Mbps link, else 10Mbps */ -#define RIO_SBUS_CFG_PROC25 0x80 /* 25Mhz processor clock, else 20Mhz */ +#define RIO_SBUS_CFG_BOOTRAM 0x01 /* Boot from RAM, else Link */ +#define RIO_SBUS_CFG_BUSENABLE 0x02 /* Enable processor bus */ +#define RIO_SBUS_CFG_INTENABLE 0x04 /* Interrupt enable, else disable */ +#define RIO_SBUS_CFG_IRQMASK 0x38 /* Interrupt mask */ +#define RIO_SBUS_CFG_IRQNONE 0x00 /* No Interrupt */ +#define RIO_SBUS_CFG_IRQ7 0x38 /* Interrupt Level 7 */ +#define RIO_SBUS_CFG_IRQ6 0x30 /* Interrupt Level 6 */ +#define RIO_SBUS_CFG_IRQ5 0x28 /* Interrupt Level 5 */ +#define RIO_SBUS_CFG_IRQ4 0x20 /* Interrupt Level 4 */ +#define RIO_SBUS_CFG_IRQ3 0x18 /* Interrupt Level 3 */ +#define RIO_SBUS_CFG_IRQ2 0x10 /* Interrupt Level 2 */ +#define RIO_SBUS_CFG_IRQ1 0x08 /* Interrupt Level 1 */ +#define RIO_SBUS_CFG_LINK20 0x40 /* 20Mbps link, else 10Mbps */ +#define RIO_SBUS_CFG_PROC25 0x80 /* 25Mhz processor clock, else 20Mhz */ /***************************************************************************** ********************************* ******************************** @@ -248,18 +248,18 @@ /* Control Register Definitions... */ #define RIO_PCI_IDENT "ECDDPGJGJHJRGSK#" -#define RIO_PCI_CFG_BOOTRAM 0x01 /* Boot from RAM, else Link */ -#define RIO_PCI_CFG_BUSENABLE 0x02 /* Enable processor bus */ -#define RIO_PCI_CFG_INTENABLE 0x04 /* Interrupt enable, else disable */ -#define RIO_PCI_CFG_LINK20 0x40 /* 20Mbps link, else 10Mbps */ -#define RIO_PCI_CFG_PROC25 0x80 /* 25Mhz processor clock, else 20Mhz */ +#define RIO_PCI_CFG_BOOTRAM 0x01 /* Boot from RAM, else Link */ +#define RIO_PCI_CFG_BUSENABLE 0x02 /* Enable processor bus */ +#define RIO_PCI_CFG_INTENABLE 0x04 /* Interrupt enable, else disable */ +#define RIO_PCI_CFG_LINK20 0x40 /* 20Mbps link, else 10Mbps */ +#define RIO_PCI_CFG_PROC25 0x80 /* 25Mhz processor clock, else 20Mhz */ /* PCI Definitions... */ -#define SPX_VENDOR_ID 0x11CB /* Assigned by the PCI SIG */ -#define SPX_DEVICE_ID 0x8000 /* RIO bridge boards */ -#define SPX_PLXDEVICE_ID 0x2000 /* PLX bridge boards */ +#define SPX_VENDOR_ID 0x11CB /* Assigned by the PCI SIG */ +#define SPX_DEVICE_ID 0x8000 /* RIO bridge boards */ +#define SPX_PLXDEVICE_ID 0x2000 /* PLX bridge boards */ #define SPX_SUB_VENDOR_ID SPX_VENDOR_ID /* Same as vendor id */ -#define RIO_SUB_SYS_ID 0x0800 /* RIO PCI board */ +#define RIO_SUB_SYS_ID 0x0800 /* RIO PCI board */ /***************************************************************************** ***************************** ****************************** @@ -270,11 +270,11 @@ /* Control Register Definitions... */ #define RIO_PCI2_IDENT "JET HOST BY KEV#" -#define RIO_PCI2_CFG_BUSENABLE 0x02 /* Enable processor bus */ -#define RIO_PCI2_CFG_INTENABLE 0x04 /* Interrupt enable, else disable */ +#define RIO_PCI2_CFG_BUSENABLE 0x02 /* Enable processor bus */ +#define RIO_PCI2_CFG_INTENABLE 0x04 /* Interrupt enable, else disable */ /* PCI Definitions... */ -#define RIO2_SUB_SYS_ID 0x0100 /* RIO (Jet) PCI board */ +#define RIO2_SUB_SYS_ID 0x0100 /* RIO (Jet) PCI board */ #endif /*_rioboard_h */ diff --git a/drivers/char/rio/riocmd.c b/drivers/char/rio/riocmd.c index 533085ec6f1b..b97dd9fdb6ba 100644 --- a/drivers/char/rio/riocmd.c +++ b/drivers/char/rio/riocmd.c @@ -83,102 +83,98 @@ static char *_riocmd_c_sccs_ = "@(#)riocmd.c 1.2"; static struct IdentifyRta IdRta; static struct KillNeighbour KillUnit; -int -RIOFoadRta(struct Host *HostP, struct Map *MapP) +int RIOFoadRta(struct Host *HostP, struct Map *MapP) { struct CmdBlk *CmdBlkP; - rio_dprintk (RIO_DEBUG_CMD, "FOAD RTA\n"); + rio_dprintk(RIO_DEBUG_CMD, "FOAD RTA\n"); CmdBlkP = RIOGetCmdBlk(); - if ( !CmdBlkP ) { - rio_dprintk (RIO_DEBUG_CMD, "FOAD RTA: GetCmdBlk failed\n"); + if (!CmdBlkP) { + rio_dprintk(RIO_DEBUG_CMD, "FOAD RTA: GetCmdBlk failed\n"); return -ENXIO; } CmdBlkP->Packet.dest_unit = MapP->ID; CmdBlkP->Packet.dest_port = BOOT_RUP; - CmdBlkP->Packet.src_unit = 0; - CmdBlkP->Packet.src_port = BOOT_RUP; - CmdBlkP->Packet.len = 0x84; - CmdBlkP->Packet.data[0] = IFOAD; - CmdBlkP->Packet.data[1] = 0; - CmdBlkP->Packet.data[2] = IFOAD_MAGIC & 0xFF; - CmdBlkP->Packet.data[3] = (IFOAD_MAGIC >> 8) & 0xFF; - - if ( RIOQueueCmdBlk( HostP, MapP->ID-1, CmdBlkP) == RIO_FAIL ) { - rio_dprintk (RIO_DEBUG_CMD, "FOAD RTA: Failed to queue foad command\n"); + CmdBlkP->Packet.src_unit = 0; + CmdBlkP->Packet.src_port = BOOT_RUP; + CmdBlkP->Packet.len = 0x84; + CmdBlkP->Packet.data[0] = IFOAD; + CmdBlkP->Packet.data[1] = 0; + CmdBlkP->Packet.data[2] = IFOAD_MAGIC & 0xFF; + CmdBlkP->Packet.data[3] = (IFOAD_MAGIC >> 8) & 0xFF; + + if (RIOQueueCmdBlk(HostP, MapP->ID - 1, CmdBlkP) == RIO_FAIL) { + rio_dprintk(RIO_DEBUG_CMD, "FOAD RTA: Failed to queue foad command\n"); return -EIO; } return 0; } -int -RIOZombieRta(struct Host *HostP, struct Map *MapP) +int RIOZombieRta(struct Host *HostP, struct Map *MapP) { struct CmdBlk *CmdBlkP; - rio_dprintk (RIO_DEBUG_CMD, "ZOMBIE RTA\n"); + rio_dprintk(RIO_DEBUG_CMD, "ZOMBIE RTA\n"); CmdBlkP = RIOGetCmdBlk(); - if ( !CmdBlkP ) { - rio_dprintk (RIO_DEBUG_CMD, "ZOMBIE RTA: GetCmdBlk failed\n"); + if (!CmdBlkP) { + rio_dprintk(RIO_DEBUG_CMD, "ZOMBIE RTA: GetCmdBlk failed\n"); return -ENXIO; } CmdBlkP->Packet.dest_unit = MapP->ID; CmdBlkP->Packet.dest_port = BOOT_RUP; - CmdBlkP->Packet.src_unit = 0; - CmdBlkP->Packet.src_port = BOOT_RUP; - CmdBlkP->Packet.len = 0x84; - CmdBlkP->Packet.data[0] = ZOMBIE; - CmdBlkP->Packet.data[1] = 0; - CmdBlkP->Packet.data[2] = ZOMBIE_MAGIC & 0xFF; - CmdBlkP->Packet.data[3] = (ZOMBIE_MAGIC >> 8) & 0xFF; - - if ( RIOQueueCmdBlk( HostP, MapP->ID-1, CmdBlkP) == RIO_FAIL ) { - rio_dprintk (RIO_DEBUG_CMD, "ZOMBIE RTA: Failed to queue zombie command\n"); + CmdBlkP->Packet.src_unit = 0; + CmdBlkP->Packet.src_port = BOOT_RUP; + CmdBlkP->Packet.len = 0x84; + CmdBlkP->Packet.data[0] = ZOMBIE; + CmdBlkP->Packet.data[1] = 0; + CmdBlkP->Packet.data[2] = ZOMBIE_MAGIC & 0xFF; + CmdBlkP->Packet.data[3] = (ZOMBIE_MAGIC >> 8) & 0xFF; + + if (RIOQueueCmdBlk(HostP, MapP->ID - 1, CmdBlkP) == RIO_FAIL) { + rio_dprintk(RIO_DEBUG_CMD, "ZOMBIE RTA: Failed to queue zombie command\n"); return -EIO; } return 0; } -int -RIOCommandRta(struct rio_info *p, uint RtaUnique, - int (* func)(struct Host *HostP, struct Map *MapP)) +int RIOCommandRta(struct rio_info *p, uint RtaUnique, int (*func) (struct Host * HostP, struct Map * MapP)) { uint Host; - rio_dprintk (RIO_DEBUG_CMD, "Command RTA 0x%x func 0x%x\n", RtaUnique, (int)func); + rio_dprintk(RIO_DEBUG_CMD, "Command RTA 0x%x func 0x%x\n", RtaUnique, (int) func); - if ( !RtaUnique ) - return(0); + if (!RtaUnique) + return (0); - for ( Host = 0; Host < p->RIONumHosts; Host++ ) { + for (Host = 0; Host < p->RIONumHosts; Host++) { uint Rta; struct Host *HostP = &p->RIOHosts[Host]; - for ( Rta = 0; Rta < RTAS_PER_HOST; Rta++ ) { + for (Rta = 0; Rta < RTAS_PER_HOST; Rta++) { struct Map *MapP = &HostP->Mapping[Rta]; - if ( MapP->RtaUniqueNum == RtaUnique ) { + if (MapP->RtaUniqueNum == RtaUnique) { uint Link; /* - ** now, lets just check we have a route to it... - ** IF the routing stuff is working, then one of the - ** topology entries for this unit will have a legit - ** route *somewhere*. We care not where - if its got - ** any connections, we can get to it. - */ - for ( Link = 0; Link < LINKS_PER_UNIT; Link++ ) { - if ( MapP->Topology[Link].Unit <= (uchar)MAX_RUP ) { + ** now, lets just check we have a route to it... + ** IF the routing stuff is working, then one of the + ** topology entries for this unit will have a legit + ** route *somewhere*. We care not where - if its got + ** any connections, we can get to it. + */ + for (Link = 0; Link < LINKS_PER_UNIT; Link++) { + if (MapP->Topology[Link].Unit <= (uchar) MAX_RUP) { /* - ** Its worth trying the operation... - */ - return (*func)( HostP, MapP ); + ** Its worth trying the operation... + */ + return (*func) (HostP, MapP); } } } @@ -188,60 +184,59 @@ RIOCommandRta(struct rio_info *p, uint RtaUnique, } -int -RIOIdentifyRta(struct rio_info *p, caddr_t arg) +int RIOIdentifyRta(struct rio_info *p, caddr_t arg) { uint Host; - if ( copyin( (int)arg, (caddr_t)&IdRta, sizeof(IdRta) ) == COPYFAIL ) { - rio_dprintk (RIO_DEBUG_CMD, "RIO_IDENTIFY_RTA copy failed\n"); + if (copyin((int) arg, (caddr_t) & IdRta, sizeof(IdRta)) == COPYFAIL) { + rio_dprintk(RIO_DEBUG_CMD, "RIO_IDENTIFY_RTA copy failed\n"); p->RIOError.Error = COPYIN_FAILED; return -EFAULT; } - for ( Host = 0 ; Host < p->RIONumHosts; Host++ ) { + for (Host = 0; Host < p->RIONumHosts; Host++) { uint Rta; struct Host *HostP = &p->RIOHosts[Host]; - for ( Rta = 0; Rta < RTAS_PER_HOST; Rta++ ) { + for (Rta = 0; Rta < RTAS_PER_HOST; Rta++) { struct Map *MapP = &HostP->Mapping[Rta]; - if ( MapP->RtaUniqueNum == IdRta.RtaUnique ) { + if (MapP->RtaUniqueNum == IdRta.RtaUnique) { uint Link; /* - ** now, lets just check we have a route to it... - ** IF the routing stuff is working, then one of the - ** topology entries for this unit will have a legit - ** route *somewhere*. We care not where - if its got - ** any connections, we can get to it. - */ - for ( Link = 0; Link < LINKS_PER_UNIT; Link++ ) { - if ( MapP->Topology[Link].Unit <= (uchar)MAX_RUP ) { + ** now, lets just check we have a route to it... + ** IF the routing stuff is working, then one of the + ** topology entries for this unit will have a legit + ** route *somewhere*. We care not where - if its got + ** any connections, we can get to it. + */ + for (Link = 0; Link < LINKS_PER_UNIT; Link++) { + if (MapP->Topology[Link].Unit <= (uchar) MAX_RUP) { /* - ** Its worth trying the operation... - */ + ** Its worth trying the operation... + */ struct CmdBlk *CmdBlkP; - rio_dprintk (RIO_DEBUG_CMD, "IDENTIFY RTA\n"); + rio_dprintk(RIO_DEBUG_CMD, "IDENTIFY RTA\n"); CmdBlkP = RIOGetCmdBlk(); - if ( !CmdBlkP ) { - rio_dprintk (RIO_DEBUG_CMD, "IDENTIFY RTA: GetCmdBlk failed\n"); + if (!CmdBlkP) { + rio_dprintk(RIO_DEBUG_CMD, "IDENTIFY RTA: GetCmdBlk failed\n"); return -ENXIO; } - + CmdBlkP->Packet.dest_unit = MapP->ID; CmdBlkP->Packet.dest_port = BOOT_RUP; - CmdBlkP->Packet.src_unit = 0; - CmdBlkP->Packet.src_port = BOOT_RUP; - CmdBlkP->Packet.len = 0x84; - CmdBlkP->Packet.data[0] = IDENTIFY; - CmdBlkP->Packet.data[1] = 0; - CmdBlkP->Packet.data[2] = IdRta.ID; - - if ( RIOQueueCmdBlk( HostP, MapP->ID-1, CmdBlkP) == RIO_FAIL ) { - rio_dprintk (RIO_DEBUG_CMD, "IDENTIFY RTA: Failed to queue command\n"); + CmdBlkP->Packet.src_unit = 0; + CmdBlkP->Packet.src_port = BOOT_RUP; + CmdBlkP->Packet.len = 0x84; + CmdBlkP->Packet.data[0] = IDENTIFY; + CmdBlkP->Packet.data[1] = 0; + CmdBlkP->Packet.data[2] = IdRta.ID; + + if (RIOQueueCmdBlk(HostP, MapP->ID - 1, CmdBlkP) == RIO_FAIL) { + rio_dprintk(RIO_DEBUG_CMD, "IDENTIFY RTA: Failed to queue command\n"); return -EIO; } return 0; @@ -249,114 +244,110 @@ RIOIdentifyRta(struct rio_info *p, caddr_t arg) } } } - } + } return -ENOENT; } -int -RIOKillNeighbour(struct rio_info *p, caddr_t arg) +int RIOKillNeighbour(struct rio_info *p, caddr_t arg) { uint Host; uint ID; struct Host *HostP; struct CmdBlk *CmdBlkP; - rio_dprintk (RIO_DEBUG_CMD, "KILL HOST NEIGHBOUR\n"); + rio_dprintk(RIO_DEBUG_CMD, "KILL HOST NEIGHBOUR\n"); - if ( copyin( (int)arg, (caddr_t)&KillUnit, sizeof(KillUnit) ) == COPYFAIL ) { - rio_dprintk (RIO_DEBUG_CMD, "RIO_KILL_NEIGHBOUR copy failed\n"); + if (copyin((int) arg, (caddr_t) & KillUnit, sizeof(KillUnit)) == COPYFAIL) { + rio_dprintk(RIO_DEBUG_CMD, "RIO_KILL_NEIGHBOUR copy failed\n"); p->RIOError.Error = COPYIN_FAILED; return -EFAULT; } - if ( KillUnit.Link > 3 ) + if (KillUnit.Link > 3) return -ENXIO; - + CmdBlkP = RIOGetCmdBlk(); - if ( !CmdBlkP ) { - rio_dprintk (RIO_DEBUG_CMD, "UFOAD: GetCmdBlk failed\n"); + if (!CmdBlkP) { + rio_dprintk(RIO_DEBUG_CMD, "UFOAD: GetCmdBlk failed\n"); return -ENXIO; } CmdBlkP->Packet.dest_unit = 0; - CmdBlkP->Packet.src_unit = 0; + CmdBlkP->Packet.src_unit = 0; CmdBlkP->Packet.dest_port = BOOT_RUP; - CmdBlkP->Packet.src_port = BOOT_RUP; - CmdBlkP->Packet.len = 0x84; - CmdBlkP->Packet.data[0] = UFOAD; - CmdBlkP->Packet.data[1] = KillUnit.Link; - CmdBlkP->Packet.data[2] = UFOAD_MAGIC & 0xFF; - CmdBlkP->Packet.data[3] = (UFOAD_MAGIC >> 8) & 0xFF; - - for ( Host = 0; Host < p->RIONumHosts; Host++ ) { + CmdBlkP->Packet.src_port = BOOT_RUP; + CmdBlkP->Packet.len = 0x84; + CmdBlkP->Packet.data[0] = UFOAD; + CmdBlkP->Packet.data[1] = KillUnit.Link; + CmdBlkP->Packet.data[2] = UFOAD_MAGIC & 0xFF; + CmdBlkP->Packet.data[3] = (UFOAD_MAGIC >> 8) & 0xFF; + + for (Host = 0; Host < p->RIONumHosts; Host++) { ID = 0; HostP = &p->RIOHosts[Host]; - if ( HostP->UniqueNum == KillUnit.UniqueNum ) { - if ( RIOQueueCmdBlk( HostP, RTAS_PER_HOST+KillUnit.Link, - CmdBlkP) == RIO_FAIL ) { - rio_dprintk (RIO_DEBUG_CMD, "UFOAD: Failed queue command\n"); + if (HostP->UniqueNum == KillUnit.UniqueNum) { + if (RIOQueueCmdBlk(HostP, RTAS_PER_HOST + KillUnit.Link, CmdBlkP) == RIO_FAIL) { + rio_dprintk(RIO_DEBUG_CMD, "UFOAD: Failed queue command\n"); return -EIO; } return 0; } - for ( ID=0; ID < RTAS_PER_HOST; ID++ ) { - if ( HostP->Mapping[ID].RtaUniqueNum == KillUnit.UniqueNum ) { - CmdBlkP->Packet.dest_unit = ID+1; - if ( RIOQueueCmdBlk( HostP, ID, CmdBlkP) == RIO_FAIL ) { - rio_dprintk (RIO_DEBUG_CMD, "UFOAD: Failed queue command\n"); + for (ID = 0; ID < RTAS_PER_HOST; ID++) { + if (HostP->Mapping[ID].RtaUniqueNum == KillUnit.UniqueNum) { + CmdBlkP->Packet.dest_unit = ID + 1; + if (RIOQueueCmdBlk(HostP, ID, CmdBlkP) == RIO_FAIL) { + rio_dprintk(RIO_DEBUG_CMD, "UFOAD: Failed queue command\n"); return -EIO; } return 0; } } } - RIOFreeCmdBlk( CmdBlkP ); + RIOFreeCmdBlk(CmdBlkP); return -ENXIO; } -int -RIOSuspendBootRta(struct Host *HostP, int ID, int Link) +int RIOSuspendBootRta(struct Host *HostP, int ID, int Link) { struct CmdBlk *CmdBlkP; - rio_dprintk (RIO_DEBUG_CMD, "SUSPEND BOOT ON RTA ID %d, link %c\n", ID, 'A' + Link); + rio_dprintk(RIO_DEBUG_CMD, "SUSPEND BOOT ON RTA ID %d, link %c\n", ID, 'A' + Link); CmdBlkP = RIOGetCmdBlk(); - if ( !CmdBlkP ) { - rio_dprintk (RIO_DEBUG_CMD, "SUSPEND BOOT ON RTA: GetCmdBlk failed\n"); + if (!CmdBlkP) { + rio_dprintk(RIO_DEBUG_CMD, "SUSPEND BOOT ON RTA: GetCmdBlk failed\n"); return -ENXIO; } CmdBlkP->Packet.dest_unit = ID; CmdBlkP->Packet.dest_port = BOOT_RUP; - CmdBlkP->Packet.src_unit = 0; - CmdBlkP->Packet.src_port = BOOT_RUP; - CmdBlkP->Packet.len = 0x84; - CmdBlkP->Packet.data[0] = IWAIT; - CmdBlkP->Packet.data[1] = Link; - CmdBlkP->Packet.data[2] = IWAIT_MAGIC & 0xFF; - CmdBlkP->Packet.data[3] = (IWAIT_MAGIC >> 8) & 0xFF; - - if ( RIOQueueCmdBlk( HostP, ID - 1, CmdBlkP) == RIO_FAIL ) { - rio_dprintk (RIO_DEBUG_CMD, "SUSPEND BOOT ON RTA: Failed to queue iwait command\n"); + CmdBlkP->Packet.src_unit = 0; + CmdBlkP->Packet.src_port = BOOT_RUP; + CmdBlkP->Packet.len = 0x84; + CmdBlkP->Packet.data[0] = IWAIT; + CmdBlkP->Packet.data[1] = Link; + CmdBlkP->Packet.data[2] = IWAIT_MAGIC & 0xFF; + CmdBlkP->Packet.data[3] = (IWAIT_MAGIC >> 8) & 0xFF; + + if (RIOQueueCmdBlk(HostP, ID - 1, CmdBlkP) == RIO_FAIL) { + rio_dprintk(RIO_DEBUG_CMD, "SUSPEND BOOT ON RTA: Failed to queue iwait command\n"); return -EIO; } return 0; } -int -RIOFoadWakeup(struct rio_info *p) +int RIOFoadWakeup(struct rio_info *p) { int port; register struct Port *PortP; unsigned long flags; - for ( port=0; portRIOPortp[port]; rio_spin_lock_irqsave(&PortP->portSem, flags); @@ -377,16 +368,15 @@ RIOFoadWakeup(struct rio_info *p) PortP->TxBufferOut = 0; rio_spin_unlock_irqrestore(&PortP->portSem, flags); } - return(0); + return (0); } /* ** Incoming command on the COMMAND_RUP to be processed. */ -static int -RIOCommandRup(struct rio_info *p, uint Rup, struct Host *HostP, PKT *PacketP) +static int RIOCommandRup(struct rio_info *p, uint Rup, struct Host *HostP, PKT * PacketP) { - struct PktCmd *PktCmdP = (struct PktCmd *)PacketP->data; + struct PktCmd *PktCmdP = (struct PktCmd *) PacketP->data; struct Port *PortP; struct UnixRup *UnixRupP; ushort SysPort; @@ -395,128 +385,114 @@ RIOCommandRup(struct rio_info *p, uint Rup, struct Host *HostP, PKT *PacketP) ushort subCommand; unsigned long flags; - func_enter (); + func_enter(); #ifdef CHECK - CheckHost( Host ); - CheckHostP( HostP ); - CheckPacketP( PacketP ); + CheckHost(Host); + CheckHostP(HostP); + CheckPacketP(PacketP); #endif /* - ** 16 port RTA note: - ** Command rup packets coming from the RTA will have pkt->data[1] (which - ** translates to PktCmdP->PhbNum) set to the host port number for the - ** particular unit. To access the correct BaseSysPort for a 16 port RTA, - ** we can use PhbNum to get the rup number for the appropriate 8 port - ** block (for the first block, this should be equal to 'Rup'). - */ - rup = RBYTE(PktCmdP->PhbNum) / (ushort)PORTS_PER_RTA; + ** 16 port RTA note: + ** Command rup packets coming from the RTA will have pkt->data[1] (which + ** translates to PktCmdP->PhbNum) set to the host port number for the + ** particular unit. To access the correct BaseSysPort for a 16 port RTA, + ** we can use PhbNum to get the rup number for the appropriate 8 port + ** block (for the first block, this should be equal to 'Rup'). + */ + rup = RBYTE(PktCmdP->PhbNum) / (ushort) PORTS_PER_RTA; UnixRupP = &HostP->UnixRups[rup]; - SysPort = UnixRupP->BaseSysPort + - (RBYTE(PktCmdP->PhbNum) % (ushort)PORTS_PER_RTA); - rio_dprintk (RIO_DEBUG_CMD, "Command on rup %d, port %d\n", rup, SysPort); + SysPort = UnixRupP->BaseSysPort + (RBYTE(PktCmdP->PhbNum) % (ushort) PORTS_PER_RTA); + rio_dprintk(RIO_DEBUG_CMD, "Command on rup %d, port %d\n", rup, SysPort); #ifdef CHECK - CheckRup( rup ); - CheckUnixRupP( UnixRupP ); + CheckRup(rup); + CheckUnixRupP(UnixRupP); #endif - if ( UnixRupP->BaseSysPort == NO_PORT ) { - rio_dprintk (RIO_DEBUG_CMD, "OBSCURE ERROR!\n"); - rio_dprintk (RIO_DEBUG_CMD, "Diagnostics follow. Please WRITE THESE DOWN and report them to Specialix Technical Support\n"); - rio_dprintk (RIO_DEBUG_CMD, "CONTROL information: Host number %d, name ``%s''\n", - HostP-p->RIOHosts, HostP->Name ); - rio_dprintk (RIO_DEBUG_CMD, "CONTROL information: Rup number 0x%x\n", rup); - - if ( Rup >= (ushort)MAX_RUP ) { - rio_dprintk (RIO_DEBUG_CMD, "CONTROL information: This is the RUP for RTA ``%s''\n", - HostP->Mapping[Rup].Name); + if (UnixRupP->BaseSysPort == NO_PORT) { + rio_dprintk(RIO_DEBUG_CMD, "OBSCURE ERROR!\n"); + rio_dprintk(RIO_DEBUG_CMD, "Diagnostics follow. Please WRITE THESE DOWN and report them to Specialix Technical Support\n"); + rio_dprintk(RIO_DEBUG_CMD, "CONTROL information: Host number %d, name ``%s''\n", HostP - p->RIOHosts, HostP->Name); + rio_dprintk(RIO_DEBUG_CMD, "CONTROL information: Rup number 0x%x\n", rup); + + if (Rup >= (ushort) MAX_RUP) { + rio_dprintk(RIO_DEBUG_CMD, "CONTROL information: This is the RUP for RTA ``%s''\n", HostP->Mapping[Rup].Name); } else - rio_dprintk (RIO_DEBUG_CMD, "CONTROL information: This is the RUP for link ``%c'' of host ``%s''\n", - ('A' + Rup - MAX_RUP), HostP->Name); - - rio_dprintk (RIO_DEBUG_CMD, "PACKET information: Destination 0x%x:0x%x\n", - PacketP->dest_unit, PacketP->dest_port ); - rio_dprintk (RIO_DEBUG_CMD, "PACKET information: Source 0x%x:0x%x\n", - PacketP->src_unit, PacketP->src_port ); - rio_dprintk (RIO_DEBUG_CMD, "PACKET information: Length 0x%x (%d)\n", PacketP->len,PacketP->len ); - rio_dprintk (RIO_DEBUG_CMD, "PACKET information: Control 0x%x (%d)\n", PacketP->control, PacketP->control); - rio_dprintk (RIO_DEBUG_CMD, "PACKET information: Check 0x%x (%d)\n", PacketP->csum, PacketP->csum ); - rio_dprintk (RIO_DEBUG_CMD, "COMMAND information: Host Port Number 0x%x, " - "Command Code 0x%x\n", PktCmdP->PhbNum, PktCmdP->Command ); + rio_dprintk(RIO_DEBUG_CMD, "CONTROL information: This is the RUP for link ``%c'' of host ``%s''\n", ('A' + Rup - MAX_RUP), HostP->Name); + + rio_dprintk(RIO_DEBUG_CMD, "PACKET information: Destination 0x%x:0x%x\n", PacketP->dest_unit, PacketP->dest_port); + rio_dprintk(RIO_DEBUG_CMD, "PACKET information: Source 0x%x:0x%x\n", PacketP->src_unit, PacketP->src_port); + rio_dprintk(RIO_DEBUG_CMD, "PACKET information: Length 0x%x (%d)\n", PacketP->len, PacketP->len); + rio_dprintk(RIO_DEBUG_CMD, "PACKET information: Control 0x%x (%d)\n", PacketP->control, PacketP->control); + rio_dprintk(RIO_DEBUG_CMD, "PACKET information: Check 0x%x (%d)\n", PacketP->csum, PacketP->csum); + rio_dprintk(RIO_DEBUG_CMD, "COMMAND information: Host Port Number 0x%x, " "Command Code 0x%x\n", PktCmdP->PhbNum, PktCmdP->Command); return TRUE; } - #ifdef CHECK - CheckSysPort( SysPort ); + CheckSysPort(SysPort); #endif - PortP = p->RIOPortp[ SysPort ]; + PortP = p->RIOPortp[SysPort]; rio_spin_lock_irqsave(&PortP->portSem, flags); - switch( RBYTE(PktCmdP->Command) ) { - case BREAK_RECEIVED: - rio_dprintk (RIO_DEBUG_CMD, "Received a break!\n"); - /* If the current line disc. is not multi-threading and - the current processor is not the default, reset rup_intr - and return FALSE to ensure that the command packet is - not freed. */ - /* Call tmgr HANGUP HERE */ - /* Fix this later when every thing works !!!! RAMRAJ */ - gs_got_break (&PortP->gs); + switch (RBYTE(PktCmdP->Command)) { + case BREAK_RECEIVED: + rio_dprintk(RIO_DEBUG_CMD, "Received a break!\n"); + /* If the current line disc. is not multi-threading and + the current processor is not the default, reset rup_intr + and return FALSE to ensure that the command packet is + not freed. */ + /* Call tmgr HANGUP HERE */ + /* Fix this later when every thing works !!!! RAMRAJ */ + gs_got_break(&PortP->gs); + break; + + case COMPLETE: + rio_dprintk(RIO_DEBUG_CMD, "Command complete on phb %d host %d\n", RBYTE(PktCmdP->PhbNum), HostP - p->RIOHosts); + subCommand = 1; + switch (RBYTE(PktCmdP->SubCommand)) { + case MEMDUMP: + rio_dprintk(RIO_DEBUG_CMD, "Memory dump cmd (0x%x) from addr 0x%x\n", RBYTE(PktCmdP->SubCommand), RWORD(PktCmdP->SubAddr)); break; + case READ_REGISTER: + rio_dprintk(RIO_DEBUG_CMD, "Read register (0x%x)\n", RWORD(PktCmdP->SubAddr)); + p->CdRegister = (RBYTE(PktCmdP->ModemStatus) & MSVR1_HOST); + break; + default: + subCommand = 0; + break; + } + if (subCommand) + break; + rio_dprintk(RIO_DEBUG_CMD, "New status is 0x%x was 0x%x\n", RBYTE(PktCmdP->PortStatus), PortP->PortState); + if (PortP->PortState != RBYTE(PktCmdP->PortStatus)) { + rio_dprintk(RIO_DEBUG_CMD, "Mark status & wakeup\n"); + PortP->PortState = RBYTE(PktCmdP->PortStatus); + /* What should we do here ... + wakeup( &PortP->PortState ); + */ + } else + rio_dprintk(RIO_DEBUG_CMD, "No change\n"); - case COMPLETE: - rio_dprintk (RIO_DEBUG_CMD, "Command complete on phb %d host %d\n", - RBYTE(PktCmdP->PhbNum), HostP-p->RIOHosts); - subCommand = 1; - switch (RBYTE(PktCmdP->SubCommand)) { - case MEMDUMP : - rio_dprintk (RIO_DEBUG_CMD, "Memory dump cmd (0x%x) from addr 0x%x\n", - RBYTE(PktCmdP->SubCommand), RWORD(PktCmdP->SubAddr)); - break; - case READ_REGISTER : - rio_dprintk (RIO_DEBUG_CMD, "Read register (0x%x)\n", RWORD(PktCmdP->SubAddr)); - p->CdRegister = (RBYTE(PktCmdP->ModemStatus) & MSVR1_HOST); - break; - default : - subCommand = 0; - break; - } - if (subCommand) - break; - rio_dprintk (RIO_DEBUG_CMD, "New status is 0x%x was 0x%x\n", - RBYTE(PktCmdP->PortStatus),PortP->PortState); - if (PortP->PortState != RBYTE(PktCmdP->PortStatus)) { - rio_dprintk (RIO_DEBUG_CMD, "Mark status & wakeup\n"); - PortP->PortState = RBYTE(PktCmdP->PortStatus); - /* What should we do here ... - wakeup( &PortP->PortState ); - */ - } else - rio_dprintk (RIO_DEBUG_CMD, "No change\n"); - - /* FALLTHROUGH */ - case MODEM_STATUS: + /* FALLTHROUGH */ + case MODEM_STATUS: + /* + ** Knock out the tbusy and tstop bits, as these are not relevant + ** to the check for modem status change (they're just there because + ** it's a convenient place to put them!). + */ + ReportedModemStatus = RBYTE(PktCmdP->ModemStatus); + if ((PortP->ModemState & MSVR1_HOST) == (ReportedModemStatus & MSVR1_HOST)) { + rio_dprintk(RIO_DEBUG_CMD, "Modem status unchanged 0x%x\n", PortP->ModemState); /* - ** Knock out the tbusy and tstop bits, as these are not relevant - ** to the check for modem status change (they're just there because - ** it's a convenient place to put them!). - */ - ReportedModemStatus = RBYTE(PktCmdP->ModemStatus); - if ((PortP->ModemState & MSVR1_HOST) == - (ReportedModemStatus & MSVR1_HOST)) { - rio_dprintk (RIO_DEBUG_CMD, "Modem status unchanged 0x%x\n", PortP->ModemState); - /* - ** Update ModemState just in case tbusy or tstop states have - ** changed. - */ - PortP->ModemState = ReportedModemStatus; - } - else { - rio_dprintk (RIO_DEBUG_CMD, "Modem status change from 0x%x to 0x%x\n", - PortP->ModemState, ReportedModemStatus); - PortP->ModemState = ReportedModemStatus; + ** Update ModemState just in case tbusy or tstop states have + ** changed. + */ + PortP->ModemState = ReportedModemStatus; + } else { + rio_dprintk(RIO_DEBUG_CMD, "Modem status change from 0x%x to 0x%x\n", PortP->ModemState, ReportedModemStatus); + PortP->ModemState = ReportedModemStatus; #ifdef MODEM_SUPPORT - if ( PortP->Mapped ) { + if (PortP->Mapped) { /***********************************************************\ ************************************************************* *** *** @@ -525,68 +501,67 @@ RIOCommandRup(struct rio_info *p, uint Rup, struct Host *HostP, PKT *PacketP) ************************************************************* \***********************************************************/ /* - ** If the device is a modem, then check the modem - ** carrier. - */ + ** If the device is a modem, then check the modem + ** carrier. + */ if (PortP->gs.tty == NULL) break; if (PortP->gs.tty->termios == NULL) break; - - if (!(PortP->gs.tty->termios->c_cflag & CLOCAL) && - ((PortP->State & (RIO_MOPEN|RIO_WOPEN)))) { - rio_dprintk (RIO_DEBUG_CMD, "Is there a Carrier?\n"); - /* - ** Is there a carrier? - */ - if ( PortP->ModemState & MSVR1_CD ) { - /* - ** Has carrier just appeared? - */ + if (!(PortP->gs.tty->termios->c_cflag & CLOCAL) && ((PortP->State & (RIO_MOPEN | RIO_WOPEN)))) { + + rio_dprintk(RIO_DEBUG_CMD, "Is there a Carrier?\n"); + /* + ** Is there a carrier? + */ + if (PortP->ModemState & MSVR1_CD) { + /* + ** Has carrier just appeared? + */ if (!(PortP->State & RIO_CARR_ON)) { - rio_dprintk (RIO_DEBUG_CMD, "Carrier just came up.\n"); + rio_dprintk(RIO_DEBUG_CMD, "Carrier just came up.\n"); PortP->State |= RIO_CARR_ON; - /* - ** wakeup anyone in WOPEN - */ - if (PortP->State & (PORT_ISOPEN | RIO_WOPEN) ) - wake_up_interruptible (&PortP->gs.open_wait); + /* + ** wakeup anyone in WOPEN + */ + if (PortP->State & (PORT_ISOPEN | RIO_WOPEN)) + wake_up_interruptible(&PortP->gs.open_wait); #ifdef STATS - PortP->Stat.ModemOnCnt++; + PortP->Stat.ModemOnCnt++; #endif - } + } } else { - /* - ** Has carrier just dropped? - */ + /* + ** Has carrier just dropped? + */ if (PortP->State & RIO_CARR_ON) { - if (PortP->State & (PORT_ISOPEN|RIO_WOPEN|RIO_MOPEN)) - tty_hangup (PortP->gs.tty); + if (PortP->State & (PORT_ISOPEN | RIO_WOPEN | RIO_MOPEN)) + tty_hangup(PortP->gs.tty); PortP->State &= ~RIO_CARR_ON; - rio_dprintk (RIO_DEBUG_CMD, "Carrirer just went down\n"); + rio_dprintk(RIO_DEBUG_CMD, "Carrirer just went down\n"); #ifdef STATS - PortP->Stat.ModemOffCnt++; + PortP->Stat.ModemOffCnt++; #endif + } + } + } } - } - } - } #endif - } - break; + } + break; - default: - rio_dprintk (RIO_DEBUG_CMD, "Unknown command %d on CMD_RUP of host %d\n", - RBYTE(PktCmdP->Command),HostP-p->RIOHosts); - break; + default: + rio_dprintk(RIO_DEBUG_CMD, "Unknown command %d on CMD_RUP of host %d\n", RBYTE(PktCmdP->Command), HostP - p->RIOHosts); + break; } rio_spin_unlock_irqrestore(&PortP->portSem, flags); - func_exit (); + func_exit(); return TRUE; } + /* ** The command mechanism: ** Each rup has a chain of commands associated with it. @@ -600,12 +575,11 @@ RIOCommandRup(struct rio_info *p, uint Rup, struct Host *HostP, PKT *PacketP) /* ** Allocate an empty command block. */ -struct CmdBlk * -RIOGetCmdBlk(void) +struct CmdBlk *RIOGetCmdBlk(void) { struct CmdBlk *CmdBlkP; - CmdBlkP = (struct CmdBlk *)sysbrk(sizeof(struct CmdBlk)); + CmdBlkP = (struct CmdBlk *) sysbrk(sizeof(struct CmdBlk)); if (CmdBlkP) bzero(CmdBlkP, sizeof(struct CmdBlk)); @@ -615,31 +589,29 @@ RIOGetCmdBlk(void) /* ** Return a block to the head of the free list. */ -void -RIOFreeCmdBlk(struct CmdBlk *CmdBlkP) +void RIOFreeCmdBlk(struct CmdBlk *CmdBlkP) { - sysfree((void *)CmdBlkP, sizeof(struct CmdBlk)); + sysfree((void *) CmdBlkP, sizeof(struct CmdBlk)); } /* ** attach a command block to the list of commands to be performed for ** a given rup. */ -int -RIOQueueCmdBlk(struct Host *HostP, uint Rup, struct CmdBlk *CmdBlkP) +int RIOQueueCmdBlk(struct Host *HostP, uint Rup, struct CmdBlk *CmdBlkP) { struct CmdBlk **Base; struct UnixRup *UnixRupP; unsigned long flags; #ifdef CHECK - CheckHostP( HostP ); - CheckRup( Rup ); - CheckCmdBlkP( CmdBlkP ); + CheckHostP(HostP); + CheckRup(Rup); + CheckCmdBlkP(CmdBlkP); #endif - if ( Rup >= (ushort)(MAX_RUP+LINKS_PER_UNIT) ) { - rio_dprintk (RIO_DEBUG_CMD, "Illegal rup number %d in RIOQueueCmdBlk\n",Rup); - RIOFreeCmdBlk( CmdBlkP ); + if (Rup >= (ushort) (MAX_RUP + LINKS_PER_UNIT)) { + rio_dprintk(RIO_DEBUG_CMD, "Illegal rup number %d in RIOQueueCmdBlk\n", Rup); + RIOFreeCmdBlk(CmdBlkP); return RIO_FAIL; } @@ -648,57 +620,52 @@ RIOQueueCmdBlk(struct Host *HostP, uint Rup, struct CmdBlk *CmdBlkP) rio_spin_lock_irqsave(&UnixRupP->RupLock, flags); /* - ** If the RUP is currently inactive, then put the request - ** straight on the RUP.... - */ - if ( (UnixRupP->CmdsWaitingP == NULL) && (UnixRupP->CmdPendingP == NULL) && - (RWORD(UnixRupP->RupP->txcontrol) == TX_RUP_INACTIVE ) && - (CmdBlkP->PreFuncP ? (*CmdBlkP->PreFuncP)(CmdBlkP->PreArg,CmdBlkP) - :TRUE)) { - rio_dprintk (RIO_DEBUG_CMD, "RUP inactive-placing command straight on. Cmd byte is 0x%x\n", - CmdBlkP->Packet.data[0]); + ** If the RUP is currently inactive, then put the request + ** straight on the RUP.... + */ + if ((UnixRupP->CmdsWaitingP == NULL) && (UnixRupP->CmdPendingP == NULL) && (RWORD(UnixRupP->RupP->txcontrol) == TX_RUP_INACTIVE) && (CmdBlkP->PreFuncP ? (*CmdBlkP->PreFuncP) (CmdBlkP->PreArg, CmdBlkP) + : TRUE)) { + rio_dprintk(RIO_DEBUG_CMD, "RUP inactive-placing command straight on. Cmd byte is 0x%x\n", CmdBlkP->Packet.data[0]); /* - ** Whammy! blat that pack! - */ - HostP->Copy( (caddr_t)&CmdBlkP->Packet, - RIO_PTR(HostP->Caddr, UnixRupP->RupP->txpkt ), sizeof(PKT) ); + ** Whammy! blat that pack! + */ + HostP->Copy((caddr_t) & CmdBlkP->Packet, RIO_PTR(HostP->Caddr, UnixRupP->RupP->txpkt), sizeof(PKT)); /* - ** place command packet on the pending position. - */ + ** place command packet on the pending position. + */ UnixRupP->CmdPendingP = CmdBlkP; /* - ** set the command register - */ - WWORD(UnixRupP->RupP->txcontrol , TX_PACKET_READY); + ** set the command register + */ + WWORD(UnixRupP->RupP->txcontrol, TX_PACKET_READY); rio_spin_unlock_irqrestore(&UnixRupP->RupLock, flags); return RIO_SUCCESS; } - rio_dprintk (RIO_DEBUG_CMD, "RUP active - en-queing\n"); + rio_dprintk(RIO_DEBUG_CMD, "RUP active - en-queing\n"); - if ( UnixRupP->CmdsWaitingP != NULL) - rio_dprintk (RIO_DEBUG_CMD, "Rup active - command waiting\n"); - if ( UnixRupP->CmdPendingP != NULL ) - rio_dprintk (RIO_DEBUG_CMD, "Rup active - command pending\n"); - if ( RWORD(UnixRupP->RupP->txcontrol) != TX_RUP_INACTIVE ) - rio_dprintk (RIO_DEBUG_CMD, "Rup active - command rup not ready\n"); + if (UnixRupP->CmdsWaitingP != NULL) + rio_dprintk(RIO_DEBUG_CMD, "Rup active - command waiting\n"); + if (UnixRupP->CmdPendingP != NULL) + rio_dprintk(RIO_DEBUG_CMD, "Rup active - command pending\n"); + if (RWORD(UnixRupP->RupP->txcontrol) != TX_RUP_INACTIVE) + rio_dprintk(RIO_DEBUG_CMD, "Rup active - command rup not ready\n"); Base = &UnixRupP->CmdsWaitingP; - rio_dprintk (RIO_DEBUG_CMD, "First try to queue cmdblk 0x%x at 0x%x\n", (int)CmdBlkP,(int)Base); + rio_dprintk(RIO_DEBUG_CMD, "First try to queue cmdblk 0x%x at 0x%x\n", (int) CmdBlkP, (int) Base); - while ( *Base ) { - rio_dprintk (RIO_DEBUG_CMD, "Command cmdblk 0x%x here\n", (int)(*Base)); + while (*Base) { + rio_dprintk(RIO_DEBUG_CMD, "Command cmdblk 0x%x here\n", (int) (*Base)); Base = &((*Base)->NextP); - rio_dprintk (RIO_DEBUG_CMD, "Now try to queue cmd cmdblk 0x%x at 0x%x\n", - (int)CmdBlkP,(int)Base); + rio_dprintk(RIO_DEBUG_CMD, "Now try to queue cmd cmdblk 0x%x at 0x%x\n", (int) CmdBlkP, (int) Base); } - rio_dprintk (RIO_DEBUG_CMD, "Will queue cmdblk 0x%x at 0x%x\n",(int)CmdBlkP,(int)Base); + rio_dprintk(RIO_DEBUG_CMD, "Will queue cmdblk 0x%x at 0x%x\n", (int) CmdBlkP, (int) Base); *Base = CmdBlkP; @@ -713,8 +680,7 @@ RIOQueueCmdBlk(struct Host *HostP, uint Rup, struct CmdBlk *CmdBlkP) ** Here we go - if there is an empty rup, fill it! ** must be called at splrio() or higher. */ -void -RIOPollHostCommands(struct rio_info *p, struct Host *HostP) +void RIOPollHostCommands(struct rio_info *p, struct Host *HostP) { register struct CmdBlk *CmdBlkP; register struct UnixRup *UnixRupP; @@ -723,262 +689,246 @@ RIOPollHostCommands(struct rio_info *p, struct Host *HostP) unsigned long flags; - Rup = MAX_RUP+LINKS_PER_UNIT; + Rup = MAX_RUP + LINKS_PER_UNIT; - do { /* do this loop for each RUP */ + do { /* do this loop for each RUP */ /* - ** locate the rup we are processing & lock it - */ + ** locate the rup we are processing & lock it + */ UnixRupP = &HostP->UnixRups[--Rup]; spin_lock_irqsave(&UnixRupP->RupLock, flags); /* - ** First check for incoming commands: - */ - if ( RWORD(UnixRupP->RupP->rxcontrol) != RX_RUP_INACTIVE ) { + ** First check for incoming commands: + */ + if (RWORD(UnixRupP->RupP->rxcontrol) != RX_RUP_INACTIVE) { int FreeMe; - PacketP =(PKT *)RIO_PTR(HostP->Caddr,RWORD(UnixRupP->RupP->rxpkt)); + PacketP = (PKT *) RIO_PTR(HostP->Caddr, RWORD(UnixRupP->RupP->rxpkt)); - ShowPacket( DBG_CMD, PacketP ); + ShowPacket(DBG_CMD, PacketP); - switch ( RBYTE(PacketP->dest_port) ) { - case BOOT_RUP: - rio_dprintk (RIO_DEBUG_CMD, "Incoming Boot %s packet '%x'\n", - RBYTE(PacketP->len) & 0x80 ? "Command":"Data", - RBYTE(PacketP->data[0])); - rio_spin_unlock_irqrestore(&UnixRupP->RupLock, flags); - FreeMe= RIOBootRup(p, Rup,HostP,PacketP); - rio_spin_lock_irqsave(&UnixRupP->RupLock, flags); - break; + switch (RBYTE(PacketP->dest_port)) { + case BOOT_RUP: + rio_dprintk(RIO_DEBUG_CMD, "Incoming Boot %s packet '%x'\n", RBYTE(PacketP->len) & 0x80 ? "Command" : "Data", RBYTE(PacketP->data[0])); + rio_spin_unlock_irqrestore(&UnixRupP->RupLock, flags); + FreeMe = RIOBootRup(p, Rup, HostP, PacketP); + rio_spin_lock_irqsave(&UnixRupP->RupLock, flags); + break; - case COMMAND_RUP: - /* - ** Free the RUP lock as loss of carrier causes a - ** ttyflush which will (eventually) call another - ** routine that uses the RUP lock. - */ - rio_spin_unlock_irqrestore(&UnixRupP->RupLock, flags); - FreeMe= RIOCommandRup(p, Rup,HostP,PacketP); - if (PacketP->data[5] == MEMDUMP) { - rio_dprintk (RIO_DEBUG_CMD, "Memdump from 0x%x complete\n", - *(ushort *) &(PacketP->data[6])); - HostP->Copy( (caddr_t)&(PacketP->data[8]), - (caddr_t)p->RIOMemDump, 32 ); - } - rio_spin_lock_irqsave(&UnixRupP->RupLock, flags); - break; + case COMMAND_RUP: + /* + ** Free the RUP lock as loss of carrier causes a + ** ttyflush which will (eventually) call another + ** routine that uses the RUP lock. + */ + rio_spin_unlock_irqrestore(&UnixRupP->RupLock, flags); + FreeMe = RIOCommandRup(p, Rup, HostP, PacketP); + if (PacketP->data[5] == MEMDUMP) { + rio_dprintk(RIO_DEBUG_CMD, "Memdump from 0x%x complete\n", *(ushort *) & (PacketP->data[6])); + HostP->Copy((caddr_t) & (PacketP->data[8]), (caddr_t) p->RIOMemDump, 32); + } + rio_spin_lock_irqsave(&UnixRupP->RupLock, flags); + break; - case ROUTE_RUP: - rio_spin_unlock_irqrestore( &UnixRupP->RupLock, flags); - FreeMe = RIORouteRup(p, Rup, HostP, PacketP ); - rio_spin_lock_irqsave( &UnixRupP->RupLock, flags ); - break; + case ROUTE_RUP: + rio_spin_unlock_irqrestore(&UnixRupP->RupLock, flags); + FreeMe = RIORouteRup(p, Rup, HostP, PacketP); + rio_spin_lock_irqsave(&UnixRupP->RupLock, flags); + break; - default: - rio_dprintk (RIO_DEBUG_CMD, "Unknown RUP %d\n", RBYTE(PacketP->dest_port)); - FreeMe = 1; - break; + default: + rio_dprintk(RIO_DEBUG_CMD, "Unknown RUP %d\n", RBYTE(PacketP->dest_port)); + FreeMe = 1; + break; } - if ( FreeMe ) { - rio_dprintk (RIO_DEBUG_CMD, "Free processed incoming command packet\n"); - put_free_end(HostP,PacketP); + if (FreeMe) { + rio_dprintk(RIO_DEBUG_CMD, "Free processed incoming command packet\n"); + put_free_end(HostP, PacketP); - WWORD(UnixRupP->RupP->rxcontrol , RX_RUP_INACTIVE); + WWORD(UnixRupP->RupP->rxcontrol, RX_RUP_INACTIVE); - if ( RWORD(UnixRupP->RupP->handshake)==PHB_HANDSHAKE_SET ) { - rio_dprintk (RIO_DEBUG_CMD, "Handshake rup %d\n",Rup); - WWORD(UnixRupP->RupP->handshake, - PHB_HANDSHAKE_SET|PHB_HANDSHAKE_RESET); + if (RWORD(UnixRupP->RupP->handshake) == PHB_HANDSHAKE_SET) { + rio_dprintk(RIO_DEBUG_CMD, "Handshake rup %d\n", Rup); + WWORD(UnixRupP->RupP->handshake, PHB_HANDSHAKE_SET | PHB_HANDSHAKE_RESET); } } } /* - ** IF a command was running on the port, - ** and it has completed, then tidy it up. - */ - if ( (CmdBlkP = UnixRupP->CmdPendingP) && /* ASSIGN! */ - (RWORD(UnixRupP->RupP->txcontrol) == TX_RUP_INACTIVE)) { + ** IF a command was running on the port, + ** and it has completed, then tidy it up. + */ + if ((CmdBlkP = UnixRupP->CmdPendingP) && /* ASSIGN! */ + (RWORD(UnixRupP->RupP->txcontrol) == TX_RUP_INACTIVE)) { /* - ** we are idle. - ** there is a command in pending. - ** Therefore, this command has finished. - ** So, wakeup whoever is waiting for it (and tell them - ** what happened). - */ - if ( CmdBlkP->Packet.dest_port == BOOT_RUP ) - rio_dprintk (RIO_DEBUG_CMD, "Free Boot %s Command Block '%x'\n", - CmdBlkP->Packet.len & 0x80 ? "Command":"Data", - CmdBlkP->Packet.data[0]); - - rio_dprintk (RIO_DEBUG_CMD, "Command 0x%x completed\n",(int)CmdBlkP); + ** we are idle. + ** there is a command in pending. + ** Therefore, this command has finished. + ** So, wakeup whoever is waiting for it (and tell them + ** what happened). + */ + if (CmdBlkP->Packet.dest_port == BOOT_RUP) + rio_dprintk(RIO_DEBUG_CMD, "Free Boot %s Command Block '%x'\n", CmdBlkP->Packet.len & 0x80 ? "Command" : "Data", CmdBlkP->Packet.data[0]); + + rio_dprintk(RIO_DEBUG_CMD, "Command 0x%x completed\n", (int) CmdBlkP); /* - ** Clear the Rup lock to prevent mutual exclusion. - */ - if ( CmdBlkP->PostFuncP ) { + ** Clear the Rup lock to prevent mutual exclusion. + */ + if (CmdBlkP->PostFuncP) { rio_spin_unlock_irqrestore(&UnixRupP->RupLock, flags); - (*CmdBlkP->PostFuncP) (CmdBlkP->PostArg,CmdBlkP); + (*CmdBlkP->PostFuncP) (CmdBlkP->PostArg, CmdBlkP); rio_spin_lock_irqsave(&UnixRupP->RupLock, flags); } /* - ** ....clear the pending flag.... - */ + ** ....clear the pending flag.... + */ UnixRupP->CmdPendingP = NULL; /* - ** ....and return the command block to the freelist. - */ - RIOFreeCmdBlk( CmdBlkP ); + ** ....and return the command block to the freelist. + */ + RIOFreeCmdBlk(CmdBlkP); } /* - ** If there is a command for this rup, and the rup - ** is idle, then process the command - */ - if ( (CmdBlkP = UnixRupP->CmdsWaitingP) && /* ASSIGN! */ - (UnixRupP->CmdPendingP == NULL) && - (RWORD(UnixRupP->RupP->txcontrol) == TX_RUP_INACTIVE)) { + ** If there is a command for this rup, and the rup + ** is idle, then process the command + */ + if ((CmdBlkP = UnixRupP->CmdsWaitingP) && /* ASSIGN! */ + (UnixRupP->CmdPendingP == NULL) && (RWORD(UnixRupP->RupP->txcontrol) == TX_RUP_INACTIVE)) { /* - ** if the pre-function is non-zero, call it. - ** If it returns RIO_FAIL then don't - ** send this command yet! - */ + ** if the pre-function is non-zero, call it. + ** If it returns RIO_FAIL then don't + ** send this command yet! + */ #ifdef CHECK - CheckCmdBlkP (CmdBlkP); + CheckCmdBlkP(CmdBlkP); #endif - if ( !(CmdBlkP->PreFuncP ? - (*CmdBlkP->PreFuncP)(CmdBlkP->PreArg, CmdBlkP) : TRUE)) { - rio_dprintk (RIO_DEBUG_CMD, "Not ready to start command 0x%x\n",(int)CmdBlkP); - } - else { - rio_dprintk (RIO_DEBUG_CMD, "Start new command 0x%x Cmd byte is 0x%x\n", - (int)CmdBlkP, CmdBlkP->Packet.data[0]); + if (!(CmdBlkP->PreFuncP ? (*CmdBlkP->PreFuncP) (CmdBlkP->PreArg, CmdBlkP) : TRUE)) { + rio_dprintk(RIO_DEBUG_CMD, "Not ready to start command 0x%x\n", (int) CmdBlkP); + } else { + rio_dprintk(RIO_DEBUG_CMD, "Start new command 0x%x Cmd byte is 0x%x\n", (int) CmdBlkP, CmdBlkP->Packet.data[0]); /* - ** Whammy! blat that pack! - */ + ** Whammy! blat that pack! + */ #ifdef CHECK - CheckPacketP ((PKT *)RIO_PTR(HostP->Caddr, UnixRupP->RupP->txpkt)); + CheckPacketP((PKT *) RIO_PTR(HostP->Caddr, UnixRupP->RupP->txpkt)); #endif - HostP->Copy( (caddr_t)&CmdBlkP->Packet, - RIO_PTR(HostP->Caddr, UnixRupP->RupP->txpkt), sizeof(PKT)); + HostP->Copy((caddr_t) & CmdBlkP->Packet, RIO_PTR(HostP->Caddr, UnixRupP->RupP->txpkt), sizeof(PKT)); /* - ** remove the command from the rup command queue... - */ + ** remove the command from the rup command queue... + */ UnixRupP->CmdsWaitingP = CmdBlkP->NextP; /* - ** ...and place it on the pending position. - */ + ** ...and place it on the pending position. + */ UnixRupP->CmdPendingP = CmdBlkP; /* - ** set the command register - */ - WWORD(UnixRupP->RupP->txcontrol,TX_PACKET_READY); + ** set the command register + */ + WWORD(UnixRupP->RupP->txcontrol, TX_PACKET_READY); /* - ** the command block will be freed - ** when the command has been processed. - */ + ** the command block will be freed + ** when the command has been processed. + */ } } spin_unlock_irqrestore(&UnixRupP->RupLock, flags); - } while ( Rup ); + } while (Rup); } -int -RIOWFlushMark(int iPortP, struct CmdBlk *CmdBlkP) +int RIOWFlushMark(int iPortP, struct CmdBlk *CmdBlkP) { - struct Port * PortP = (struct Port *)iPortP; + struct Port *PortP = (struct Port *) iPortP; unsigned long flags; rio_spin_lock_irqsave(&PortP->portSem, flags); #ifdef CHECK - CheckPortP( PortP ); + CheckPortP(PortP); #endif PortP->WflushFlag++; PortP->MagicFlags |= MAGIC_FLUSH; rio_spin_unlock_irqrestore(&PortP->portSem, flags); - return RIOUnUse( iPortP, CmdBlkP ); + return RIOUnUse(iPortP, CmdBlkP); } -int -RIORFlushEnable(int iPortP, struct CmdBlk *CmdBlkP) +int RIORFlushEnable(int iPortP, struct CmdBlk *CmdBlkP) { - struct Port * PortP = (struct Port *)iPortP; + struct Port *PortP = (struct Port *) iPortP; PKT *PacketP; unsigned long flags; rio_spin_lock_irqsave(&PortP->portSem, flags); - while ( can_remove_receive(&PacketP, PortP) ) { + while (can_remove_receive(&PacketP, PortP)) { remove_receive(PortP); - ShowPacket(DBG_PROC, PacketP ); - put_free_end( PortP->HostP, PacketP ); + ShowPacket(DBG_PROC, PacketP); + put_free_end(PortP->HostP, PacketP); } - if ( RWORD(PortP->PhbP->handshake)==PHB_HANDSHAKE_SET ) { + if (RWORD(PortP->PhbP->handshake) == PHB_HANDSHAKE_SET) { /* - ** MAGIC! (Basically, handshake the RX buffer, so that - ** the RTAs upstream can be re-enabled.) - */ - rio_dprintk (RIO_DEBUG_CMD, "Util: Set RX handshake bit\n"); - WWORD(PortP->PhbP->handshake, PHB_HANDSHAKE_SET|PHB_HANDSHAKE_RESET); + ** MAGIC! (Basically, handshake the RX buffer, so that + ** the RTAs upstream can be re-enabled.) + */ + rio_dprintk(RIO_DEBUG_CMD, "Util: Set RX handshake bit\n"); + WWORD(PortP->PhbP->handshake, PHB_HANDSHAKE_SET | PHB_HANDSHAKE_RESET); } rio_spin_unlock_irqrestore(&PortP->portSem, flags); - return RIOUnUse( iPortP, CmdBlkP ); + return RIOUnUse(iPortP, CmdBlkP); } -int -RIOUnUse(int iPortP, struct CmdBlk *CmdBlkP) +int RIOUnUse(int iPortP, struct CmdBlk *CmdBlkP) { - struct Port * PortP = (struct Port *)iPortP; + struct Port *PortP = (struct Port *) iPortP; unsigned long flags; rio_spin_lock_irqsave(&PortP->portSem, flags); #ifdef CHECK - CheckPortP( PortP ); + CheckPortP(PortP); #endif - rio_dprintk (RIO_DEBUG_CMD, "Decrement in use count for port\n"); + rio_dprintk(RIO_DEBUG_CMD, "Decrement in use count for port\n"); if (PortP->InUse) { - if ( --PortP->InUse != NOT_INUSE ) { + if (--PortP->InUse != NOT_INUSE) { rio_spin_unlock_irqrestore(&PortP->portSem, flags); return 0; } } /* - ** While PortP->InUse is set (i.e. a preemptive command has been sent to - ** the RTA and is awaiting completion), any transmit data is prevented from - ** being transferred from the write queue into the transmit packets - ** (add_transmit) and no furthur transmit interrupt will be sent for that - ** data. The next interrupt will occur up to 500ms later (RIOIntr is called - ** twice a second as a saftey measure). This was the case when kermit was - ** used to send data into a RIO port. After each packet was sent, TCFLSH - ** was called to flush the read queue preemptively. PortP->InUse was - ** incremented, thereby blocking the 6 byte acknowledgement packet - ** transmitted back. This acknowledgment hung around for 500ms before - ** being sent, thus reducing input performance substantially!. - ** When PortP->InUse becomes NOT_INUSE, we must ensure that any data - ** hanging around in the transmit buffer is sent immediately. - */ + ** While PortP->InUse is set (i.e. a preemptive command has been sent to + ** the RTA and is awaiting completion), any transmit data is prevented from + ** being transferred from the write queue into the transmit packets + ** (add_transmit) and no furthur transmit interrupt will be sent for that + ** data. The next interrupt will occur up to 500ms later (RIOIntr is called + ** twice a second as a saftey measure). This was the case when kermit was + ** used to send data into a RIO port. After each packet was sent, TCFLSH + ** was called to flush the read queue preemptively. PortP->InUse was + ** incremented, thereby blocking the 6 byte acknowledgement packet + ** transmitted back. This acknowledgment hung around for 500ms before + ** being sent, thus reducing input performance substantially!. + ** When PortP->InUse becomes NOT_INUSE, we must ensure that any data + ** hanging around in the transmit buffer is sent immediately. + */ WWORD(PortP->HostP->ParmMapP->tx_intr, 1); /* What to do here .. - wakeup( (caddr_t)&(PortP->InUse) ); - */ + wakeup( (caddr_t)&(PortP->InUse) ); + */ rio_spin_unlock_irqrestore(&PortP->portSem, flags); return 0; } -void -ShowPacket(uint Flags, struct PKT *PacketP) +void ShowPacket(uint Flags, struct PKT *PacketP) { } diff --git a/drivers/char/rio/rioctrl.c b/drivers/char/rio/rioctrl.c index b4d1a23e27e4..0b7700d2f049 100644 --- a/drivers/char/rio/rioctrl.c +++ b/drivers/char/rio/rioctrl.c @@ -82,16 +82,16 @@ static char *_rioctrl_c_sccs_ = "@(#)rioctrl.c 1.3"; #include "rioioctl.h" -static struct LpbReq LpbReq; -static struct RupReq RupReq; -static struct PortReq PortReq; -static struct HostReq HostReq; +static struct LpbReq LpbReq; +static struct RupReq RupReq; +static struct PortReq PortReq; +static struct HostReq HostReq; static struct HostDpRam HostDpRam; static struct DebugCtrl DebugCtrl; -static struct Map MapEnt; +static struct Map MapEnt; static struct PortSetup PortSetup; -static struct DownLoad DownLoad; -static struct SendPack SendPack; +static struct DownLoad DownLoad; +static struct SendPack SendPack; /* static struct StreamInfo StreamInfo; */ /* static char modemtable[RIO_PORTS]; */ static struct SpecialRupCmd SpecialRupCmd; @@ -99,18 +99,18 @@ static struct PortParams PortParams; static struct portStats portStats; static struct SubCmdStruct { - ushort Host; - ushort Rup; - ushort Port; - ushort Addr; + ushort Host; + ushort Rup; + ushort Port; + ushort Addr; } SubCmd; struct PortTty { - uint port; - struct ttystatics Tty; + uint port; + struct ttystatics Tty; }; -static struct PortTty PortTty; +static struct PortTty PortTty; typedef struct ttystatics TERMIO; /* @@ -121,267 +121,264 @@ typedef struct ttystatics TERMIO; ** The RIOBootCodeUNKNOWN entry is there to politely tell the calling ** process to bog off. */ -static int -(*RIOBootTable[MAX_PRODUCT])(struct rio_info *, struct DownLoad *) = -{ -/* 0 */ RIOBootCodeHOST, /* Host Card */ -/* 1 */ RIOBootCodeRTA, /* RTA */ +static int + (*RIOBootTable[MAX_PRODUCT]) (struct rio_info *, struct DownLoad *) = { + /* 0 */ RIOBootCodeHOST, + /* Host Card */ + /* 1 */ RIOBootCodeRTA, + /* RTA */ }; #define drv_makedev(maj, min) ((((uint) maj & 0xff) << 8) | ((uint) min & 0xff)) -int copyin (int arg, caddr_t dp, int siz) +int copyin(int arg, caddr_t dp, int siz) { - int rv; + int rv; - rio_dprintk (RIO_DEBUG_CTRL, "Copying %d bytes from user %p to %p.\n", siz, (void *)arg, dp); - rv = copy_from_user (dp, (void *)arg, siz); - if (rv) return COPYFAIL; - else return rv; + rio_dprintk(RIO_DEBUG_CTRL, "Copying %d bytes from user %p to %p.\n", siz, (void *) arg, dp); + rv = copy_from_user(dp, (void *) arg, siz); + if (rv) + return COPYFAIL; + else + return rv; } -static int copyout (caddr_t dp, int arg, int siz) +static int copyout(caddr_t dp, int arg, int siz) { - int rv; + int rv; - rio_dprintk (RIO_DEBUG_CTRL, "Copying %d bytes to user %p from %p.\n", siz, (void *)arg, dp); - rv = copy_to_user ((void *)arg, dp, siz); - if (rv) return COPYFAIL; - else return rv; + rio_dprintk(RIO_DEBUG_CTRL, "Copying %d bytes to user %p from %p.\n", siz, (void *) arg, dp); + rv = copy_to_user((void *) arg, dp, siz); + if (rv) + return COPYFAIL; + else + return rv; } -int -riocontrol(p, dev, cmd, arg, su) -struct rio_info * p; -dev_t dev; -int cmd; -caddr_t arg; -int su; +int riocontrol(p, dev, cmd, arg, su) +struct rio_info *p; +dev_t dev; +int cmd; +caddr_t arg; +int su; { - uint Host; /* leave me unsigned! */ - uint port; /* and me! */ - struct Host *HostP; - ushort loop; - int Entry; - struct Port *PortP; - PKT *PacketP; - int retval = 0; + uint Host; /* leave me unsigned! */ + uint port; /* and me! */ + struct Host *HostP; + ushort loop; + int Entry; + struct Port *PortP; + PKT *PacketP; + int retval = 0; unsigned long flags; - - func_enter (); - + + func_enter(); + /* Confuse the compiler to think that we've initialized these */ - Host=0; + Host = 0; PortP = NULL; - rio_dprintk (RIO_DEBUG_CTRL, "control ioctl cmd: 0x%x arg: 0x%x\n", cmd, (int)arg); + rio_dprintk(RIO_DEBUG_CTRL, "control ioctl cmd: 0x%x arg: 0x%x\n", cmd, (int) arg); switch (cmd) { /* - ** RIO_SET_TIMER - ** - ** Change the value of the host card interrupt timer. - ** If the host card number is -1 then all host cards are changed - ** otherwise just the specified host card will be changed. - */ - case RIO_SET_TIMER: - rio_dprintk (RIO_DEBUG_CTRL, "RIO_SET_TIMER to %dms\n", (uint)arg); - { - int host, value; - host = (uint)arg >> 16; - value = (uint)arg & 0x0000ffff; - if (host == -1) { - for (host = 0; host < p->RIONumHosts; host++) { - if (p->RIOHosts[host].Flags == RC_RUNNING) { - WWORD(p->RIOHosts[host].ParmMapP->timer , value); - } - } - } else if (host >= p->RIONumHosts) { - return -EINVAL; - } else { - if ( p->RIOHosts[host].Flags == RC_RUNNING ) { - WWORD(p->RIOHosts[host].ParmMapP->timer , value); + ** RIO_SET_TIMER + ** + ** Change the value of the host card interrupt timer. + ** If the host card number is -1 then all host cards are changed + ** otherwise just the specified host card will be changed. + */ + case RIO_SET_TIMER: + rio_dprintk(RIO_DEBUG_CTRL, "RIO_SET_TIMER to %dms\n", (uint) arg); + { + int host, value; + host = (uint) arg >> 16; + value = (uint) arg & 0x0000ffff; + if (host == -1) { + for (host = 0; host < p->RIONumHosts; host++) { + if (p->RIOHosts[host].Flags == RC_RUNNING) { + WWORD(p->RIOHosts[host].ParmMapP->timer, value); } } - } - return 0; - - case RIO_IDENTIFY_DRIVER: - /* - ** 15.10.1998 ARG - ESIL 0760 part fix - ** Added driver ident string output. - ** -#ifndef __THIS_RELEASE__ -#warning Driver Version string not defined ! -#endif - cprintf("%s %s %s %s\n", - RIO_DRV_STR, - __THIS_RELEASE__, - __DATE__, __TIME__ ); - - return 0; - - case RIO_DISPLAY_HOST_CFG: - ** - ** 15.10.1998 ARG - ESIL 0760 part fix - ** Added driver host card ident string output. - ** - ** Note that the only types currently supported - ** are ISA and PCI. Also this driver does not - ** (yet) distinguish between the Old PCI card - ** and the Jet PCI card. In fact I think this - ** driver only supports JET PCI ! - ** - - for (Host = 0; Host < p->RIONumHosts; Host++) - { - HostP = &(p->RIOHosts[Host]); - - switch ( HostP->Type ) - { - case RIO_AT : - strcpy( host_type, RIO_AT_HOST_STR ); - break; - - case RIO_PCI : - strcpy( host_type, RIO_PCI_HOST_STR ); - break; - - default : - strcpy( host_type, "Unknown" ); - break; + } else if (host >= p->RIONumHosts) { + return -EINVAL; + } else { + if (p->RIOHosts[host].Flags == RC_RUNNING) { + WWORD(p->RIOHosts[host].ParmMapP->timer, value); } + } + } + return 0; - cprintf( - "RIO Host %d - Type:%s Addr:%X IRQ:%d\n", - Host, host_type, - (uint)HostP->PaddrP, - (int)HostP->Ivec - 32 ); + case RIO_IDENTIFY_DRIVER: + /* + ** 15.10.1998 ARG - ESIL 0760 part fix + ** Added driver ident string output. + ** + #ifndef __THIS_RELEASE__ + #warning Driver Version string not defined ! + #endif + cprintf("%s %s %s %s\n", + RIO_DRV_STR, + __THIS_RELEASE__, + __DATE__, __TIME__ ); + + return 0; + + case RIO_DISPLAY_HOST_CFG: + ** + ** 15.10.1998 ARG - ESIL 0760 part fix + ** Added driver host card ident string output. + ** + ** Note that the only types currently supported + ** are ISA and PCI. Also this driver does not + ** (yet) distinguish between the Old PCI card + ** and the Jet PCI card. In fact I think this + ** driver only supports JET PCI ! + ** + + for (Host = 0; Host < p->RIONumHosts; Host++) + { + HostP = &(p->RIOHosts[Host]); + + switch ( HostP->Type ) + { + case RIO_AT : + strcpy( host_type, RIO_AT_HOST_STR ); + break; + + case RIO_PCI : + strcpy( host_type, RIO_PCI_HOST_STR ); + break; + + default : + strcpy( host_type, "Unknown" ); + break; + } + + cprintf( + "RIO Host %d - Type:%s Addr:%X IRQ:%d\n", + Host, host_type, + (uint)HostP->PaddrP, + (int)HostP->Ivec - 32 ); + } + return 0; + ** + */ + + case RIO_FOAD_RTA: + rio_dprintk(RIO_DEBUG_CTRL, "RIO_FOAD_RTA\n"); + return RIOCommandRta(p, (uint) arg, RIOFoadRta); + + case RIO_ZOMBIE_RTA: + rio_dprintk(RIO_DEBUG_CTRL, "RIO_ZOMBIE_RTA\n"); + return RIOCommandRta(p, (uint) arg, RIOZombieRta); + + case RIO_IDENTIFY_RTA: + rio_dprintk(RIO_DEBUG_CTRL, "RIO_IDENTIFY_RTA\n"); + return RIOIdentifyRta(p, arg); + + case RIO_KILL_NEIGHBOUR: + rio_dprintk(RIO_DEBUG_CTRL, "RIO_KILL_NEIGHBOUR\n"); + return RIOKillNeighbour(p, arg); + + case SPECIAL_RUP_CMD: + { + struct CmdBlk *CmdBlkP; + + rio_dprintk(RIO_DEBUG_CTRL, "SPECIAL_RUP_CMD\n"); + if (copyin((int) arg, (caddr_t) & SpecialRupCmd, sizeof(SpecialRupCmd)) == COPYFAIL) { + rio_dprintk(RIO_DEBUG_CTRL, "SPECIAL_RUP_CMD copy failed\n"); + p->RIOError.Error = COPYIN_FAILED; + return -EFAULT; + } + CmdBlkP = RIOGetCmdBlk(); + if (!CmdBlkP) { + rio_dprintk(RIO_DEBUG_CTRL, "SPECIAL_RUP_CMD GetCmdBlk failed\n"); + return -ENXIO; + } + CmdBlkP->Packet = SpecialRupCmd.Packet; + if (SpecialRupCmd.Host >= p->RIONumHosts) + SpecialRupCmd.Host = 0; + rio_dprintk(RIO_DEBUG_CTRL, "Queue special rup command for host %d rup %d\n", SpecialRupCmd.Host, SpecialRupCmd.RupNum); + if (RIOQueueCmdBlk(&p->RIOHosts[SpecialRupCmd.Host], SpecialRupCmd.RupNum, CmdBlkP) == RIO_FAIL) { + cprintf("FAILED TO QUEUE SPECIAL RUP COMMAND\n"); } return 0; - ** - */ - - case RIO_FOAD_RTA: - rio_dprintk (RIO_DEBUG_CTRL, "RIO_FOAD_RTA\n"); - return RIOCommandRta(p, (uint)arg, RIOFoadRta); - - case RIO_ZOMBIE_RTA: - rio_dprintk (RIO_DEBUG_CTRL, "RIO_ZOMBIE_RTA\n"); - return RIOCommandRta(p, (uint)arg, RIOZombieRta); - - case RIO_IDENTIFY_RTA: - rio_dprintk (RIO_DEBUG_CTRL, "RIO_IDENTIFY_RTA\n"); - return RIOIdentifyRta(p, arg); - - case RIO_KILL_NEIGHBOUR: - rio_dprintk (RIO_DEBUG_CTRL, "RIO_KILL_NEIGHBOUR\n"); - return RIOKillNeighbour(p, arg); - - case SPECIAL_RUP_CMD: - { - struct CmdBlk *CmdBlkP; - - rio_dprintk (RIO_DEBUG_CTRL, "SPECIAL_RUP_CMD\n"); - if (copyin((int)arg, (caddr_t)&SpecialRupCmd, - sizeof(SpecialRupCmd)) == COPYFAIL ) { - rio_dprintk (RIO_DEBUG_CTRL, "SPECIAL_RUP_CMD copy failed\n"); - p->RIOError.Error = COPYIN_FAILED; - return -EFAULT; - } - CmdBlkP = RIOGetCmdBlk(); - if ( !CmdBlkP ) { - rio_dprintk (RIO_DEBUG_CTRL, "SPECIAL_RUP_CMD GetCmdBlk failed\n"); - return -ENXIO; - } - CmdBlkP->Packet = SpecialRupCmd.Packet; - if ( SpecialRupCmd.Host >= p->RIONumHosts ) - SpecialRupCmd.Host = 0; - rio_dprintk (RIO_DEBUG_CTRL, "Queue special rup command for host %d rup %d\n", - SpecialRupCmd.Host, SpecialRupCmd.RupNum); - if (RIOQueueCmdBlk(&p->RIOHosts[SpecialRupCmd.Host], - SpecialRupCmd.RupNum, CmdBlkP) == RIO_FAIL) { - cprintf("FAILED TO QUEUE SPECIAL RUP COMMAND\n"); - } - return 0; - } + } - case RIO_DEBUG_MEM: + case RIO_DEBUG_MEM: #ifdef DEBUG_MEM_SUPPORT -RIO_DEBUG_CTRL, if (su) - return rio_RIODebugMemory(RIO_DEBUG_CTRL, arg); - else + RIO_DEBUG_CTRL, if (su) + return rio_RIODebugMemory(RIO_DEBUG_CTRL, arg); + else #endif - return -EPERM; - - case RIO_ALL_MODEM: - rio_dprintk (RIO_DEBUG_CTRL, "RIO_ALL_MODEM\n"); - p->RIOError.Error = IOCTL_COMMAND_UNKNOWN; - return -EINVAL; - - case RIO_GET_TABLE: - /* - ** Read the routing table from the device driver to user space - */ - rio_dprintk (RIO_DEBUG_CTRL, "RIO_GET_TABLE\n"); + return -EPERM; - if ((retval = RIOApel(p)) != 0) - return retval; + case RIO_ALL_MODEM: + rio_dprintk(RIO_DEBUG_CTRL, "RIO_ALL_MODEM\n"); + p->RIOError.Error = IOCTL_COMMAND_UNKNOWN; + return -EINVAL; - if (copyout((caddr_t)p->RIOConnectTable, (int)arg, - TOTAL_MAP_ENTRIES*sizeof(struct Map)) == COPYFAIL) { - rio_dprintk (RIO_DEBUG_CTRL, "RIO_GET_TABLE copy failed\n"); - p->RIOError.Error = COPYOUT_FAILED; - return -EFAULT; - } + case RIO_GET_TABLE: + /* + ** Read the routing table from the device driver to user space + */ + rio_dprintk(RIO_DEBUG_CTRL, "RIO_GET_TABLE\n"); + + if ((retval = RIOApel(p)) != 0) + return retval; + + if (copyout((caddr_t) p->RIOConnectTable, (int) arg, TOTAL_MAP_ENTRIES * sizeof(struct Map)) == COPYFAIL) { + rio_dprintk(RIO_DEBUG_CTRL, "RIO_GET_TABLE copy failed\n"); + p->RIOError.Error = COPYOUT_FAILED; + return -EFAULT; + } + + { + int entry; + rio_dprintk(RIO_DEBUG_CTRL, "*****\nMAP ENTRIES\n"); + for (entry = 0; entry < TOTAL_MAP_ENTRIES; entry++) { + if ((p->RIOConnectTable[entry].ID == 0) && (p->RIOConnectTable[entry].HostUniqueNum == 0) && (p->RIOConnectTable[entry].RtaUniqueNum == 0)) + continue; + + rio_dprintk(RIO_DEBUG_CTRL, "Map entry %d.HostUniqueNum = 0x%x\n", entry, p->RIOConnectTable[entry].HostUniqueNum); + rio_dprintk(RIO_DEBUG_CTRL, "Map entry %d.RtaUniqueNum = 0x%x\n", entry, p->RIOConnectTable[entry].RtaUniqueNum); + rio_dprintk(RIO_DEBUG_CTRL, "Map entry %d.ID = 0x%x\n", entry, p->RIOConnectTable[entry].ID); + rio_dprintk(RIO_DEBUG_CTRL, "Map entry %d.ID2 = 0x%x\n", entry, p->RIOConnectTable[entry].ID2); + rio_dprintk(RIO_DEBUG_CTRL, "Map entry %d.Flags = 0x%x\n", entry, (int) p->RIOConnectTable[entry].Flags); + rio_dprintk(RIO_DEBUG_CTRL, "Map entry %d.SysPort = 0x%x\n", entry, (int) p->RIOConnectTable[entry].SysPort); + rio_dprintk(RIO_DEBUG_CTRL, "Map entry %d.Top[0].Unit = %x\n", entry, p->RIOConnectTable[entry].Topology[0].Unit); + rio_dprintk(RIO_DEBUG_CTRL, "Map entry %d.Top[0].Link = %x\n", entry, p->RIOConnectTable[entry].Topology[0].Link); + rio_dprintk(RIO_DEBUG_CTRL, "Map entry %d.Top[1].Unit = %x\n", entry, p->RIOConnectTable[entry].Topology[1].Unit); + rio_dprintk(RIO_DEBUG_CTRL, "Map entry %d.Top[1].Link = %x\n", entry, p->RIOConnectTable[entry].Topology[1].Link); + rio_dprintk(RIO_DEBUG_CTRL, "Map entry %d.Top[2].Unit = %x\n", entry, p->RIOConnectTable[entry].Topology[2].Unit); + rio_dprintk(RIO_DEBUG_CTRL, "Map entry %d.Top[2].Link = %x\n", entry, p->RIOConnectTable[entry].Topology[2].Link); + rio_dprintk(RIO_DEBUG_CTRL, "Map entry %d.Top[3].Unit = %x\n", entry, p->RIOConnectTable[entry].Topology[3].Unit); + rio_dprintk(RIO_DEBUG_CTRL, "Map entry %d.Top[4].Link = %x\n", entry, p->RIOConnectTable[entry].Topology[3].Link); + rio_dprintk(RIO_DEBUG_CTRL, "Map entry %d.Name = %s\n", entry, p->RIOConnectTable[entry].Name); + } + rio_dprintk(RIO_DEBUG_CTRL, "*****\nEND MAP ENTRIES\n"); + } + p->RIOQuickCheck = NOT_CHANGED; /* a table has been gotten */ + return 0; - { - int entry; - rio_dprintk (RIO_DEBUG_CTRL, "*****\nMAP ENTRIES\n"); - for ( entry=0; entryRIOConnectTable[entry].ID == 0) && - (p->RIOConnectTable[entry].HostUniqueNum == 0) && - (p->RIOConnectTable[entry].RtaUniqueNum == 0)) continue; - - rio_dprintk (RIO_DEBUG_CTRL, "Map entry %d.HostUniqueNum = 0x%x\n", entry, p->RIOConnectTable[entry].HostUniqueNum ); - rio_dprintk (RIO_DEBUG_CTRL, "Map entry %d.RtaUniqueNum = 0x%x\n", entry, p->RIOConnectTable[entry].RtaUniqueNum ); - rio_dprintk (RIO_DEBUG_CTRL, "Map entry %d.ID = 0x%x\n", entry, p->RIOConnectTable[entry].ID ); - rio_dprintk (RIO_DEBUG_CTRL, "Map entry %d.ID2 = 0x%x\n", entry, p->RIOConnectTable[entry].ID2 ); - rio_dprintk (RIO_DEBUG_CTRL, "Map entry %d.Flags = 0x%x\n", entry, (int)p->RIOConnectTable[entry].Flags ); - rio_dprintk (RIO_DEBUG_CTRL, "Map entry %d.SysPort = 0x%x\n", entry, (int)p->RIOConnectTable[entry].SysPort ); - rio_dprintk (RIO_DEBUG_CTRL, "Map entry %d.Top[0].Unit = %x\n", entry, p->RIOConnectTable[entry].Topology[0].Unit ); - rio_dprintk (RIO_DEBUG_CTRL, "Map entry %d.Top[0].Link = %x\n", entry, p->RIOConnectTable[entry].Topology[0].Link ); - rio_dprintk (RIO_DEBUG_CTRL, "Map entry %d.Top[1].Unit = %x\n", entry, p->RIOConnectTable[entry].Topology[1].Unit ); - rio_dprintk (RIO_DEBUG_CTRL, "Map entry %d.Top[1].Link = %x\n", entry, p->RIOConnectTable[entry].Topology[1].Link ); - rio_dprintk (RIO_DEBUG_CTRL, "Map entry %d.Top[2].Unit = %x\n", entry, p->RIOConnectTable[entry].Topology[2].Unit ); - rio_dprintk (RIO_DEBUG_CTRL, "Map entry %d.Top[2].Link = %x\n", entry, p->RIOConnectTable[entry].Topology[2].Link ); - rio_dprintk (RIO_DEBUG_CTRL, "Map entry %d.Top[3].Unit = %x\n", entry, p->RIOConnectTable[entry].Topology[3].Unit ); - rio_dprintk (RIO_DEBUG_CTRL, "Map entry %d.Top[4].Link = %x\n", entry, p->RIOConnectTable[entry].Topology[3].Link ); - rio_dprintk (RIO_DEBUG_CTRL, "Map entry %d.Name = %s\n", entry, p->RIOConnectTable[entry].Name ); - } - rio_dprintk (RIO_DEBUG_CTRL, "*****\nEND MAP ENTRIES\n"); - } - p->RIOQuickCheck = NOT_CHANGED; /* a table has been gotten */ - return 0; - - case RIO_PUT_TABLE: - /* - ** Write the routing table to the device driver from user space - */ - rio_dprintk (RIO_DEBUG_CTRL, "RIO_PUT_TABLE\n"); - - if ( !su ) { - rio_dprintk (RIO_DEBUG_CTRL, "RIO_PUT_TABLE !Root\n"); - p->RIOError.Error = NOT_SUPER_USER; - return -EPERM; - } - if ( copyin((int)arg, (caddr_t)&p->RIOConnectTable[0], - TOTAL_MAP_ENTRIES*sizeof(struct Map) ) == COPYFAIL ) { - rio_dprintk (RIO_DEBUG_CTRL, "RIO_PUT_TABLE copy failed\n"); - p->RIOError.Error = COPYIN_FAILED; - return -EFAULT; - } + case RIO_PUT_TABLE: + /* + ** Write the routing table to the device driver from user space + */ + rio_dprintk(RIO_DEBUG_CTRL, "RIO_PUT_TABLE\n"); + + if (!su) { + rio_dprintk(RIO_DEBUG_CTRL, "RIO_PUT_TABLE !Root\n"); + p->RIOError.Error = NOT_SUPER_USER; + return -EPERM; + } + if (copyin((int) arg, (caddr_t) & p->RIOConnectTable[0], TOTAL_MAP_ENTRIES * sizeof(struct Map)) == COPYFAIL) { + rio_dprintk(RIO_DEBUG_CTRL, "RIO_PUT_TABLE copy failed\n"); + p->RIOError.Error = COPYIN_FAILED; + return -EFAULT; + } /* *********************************** { @@ -409,1353 +406,1244 @@ RIO_DEBUG_CTRL, if (su) } *********************************** */ - return RIONewTable(p); - - case RIO_GET_BINDINGS : - /* - ** Send bindings table, containing unique numbers of RTAs owned - ** by this system to user space - */ - rio_dprintk (RIO_DEBUG_CTRL, "RIO_GET_BINDINGS\n"); + return RIONewTable(p); - if ( !su ) - { - rio_dprintk (RIO_DEBUG_CTRL, "RIO_GET_BINDINGS !Root\n"); - p->RIOError.Error = NOT_SUPER_USER; - return -EPERM; - } - if (copyout((caddr_t) p->RIOBindTab, (int)arg, - (sizeof(ulong) * MAX_RTA_BINDINGS)) == COPYFAIL ) { - rio_dprintk (RIO_DEBUG_CTRL, "RIO_GET_BINDINGS copy failed\n"); - p->RIOError.Error = COPYOUT_FAILED; - return -EFAULT; - } - return 0; - - case RIO_PUT_BINDINGS : + case RIO_GET_BINDINGS: + /* + ** Send bindings table, containing unique numbers of RTAs owned + ** by this system to user space + */ + rio_dprintk(RIO_DEBUG_CTRL, "RIO_GET_BINDINGS\n"); + + if (!su) { + rio_dprintk(RIO_DEBUG_CTRL, "RIO_GET_BINDINGS !Root\n"); + p->RIOError.Error = NOT_SUPER_USER; + return -EPERM; + } + if (copyout((caddr_t) p->RIOBindTab, (int) arg, (sizeof(ulong) * MAX_RTA_BINDINGS)) == COPYFAIL) { + rio_dprintk(RIO_DEBUG_CTRL, "RIO_GET_BINDINGS copy failed\n"); + p->RIOError.Error = COPYOUT_FAILED; + return -EFAULT; + } + return 0; + + case RIO_PUT_BINDINGS: + /* + ** Receive a bindings table, containing unique numbers of RTAs owned + ** by this system + */ + rio_dprintk(RIO_DEBUG_CTRL, "RIO_PUT_BINDINGS\n"); + + if (!su) { + rio_dprintk(RIO_DEBUG_CTRL, "RIO_PUT_BINDINGS !Root\n"); + p->RIOError.Error = NOT_SUPER_USER; + return -EPERM; + } + if (copyin((int) arg, (caddr_t) & p->RIOBindTab[0], (sizeof(ulong) * MAX_RTA_BINDINGS)) == COPYFAIL) { + rio_dprintk(RIO_DEBUG_CTRL, "RIO_PUT_BINDINGS copy failed\n"); + p->RIOError.Error = COPYIN_FAILED; + return -EFAULT; + } + return 0; + + case RIO_BIND_RTA: + { + int EmptySlot = -1; /* - ** Receive a bindings table, containing unique numbers of RTAs owned - ** by this system - */ - rio_dprintk (RIO_DEBUG_CTRL, "RIO_PUT_BINDINGS\n"); - - if ( !su ) - { - rio_dprintk (RIO_DEBUG_CTRL, "RIO_PUT_BINDINGS !Root\n"); - p->RIOError.Error = NOT_SUPER_USER; - return -EPERM; - } - if (copyin((int)arg, (caddr_t)&p->RIOBindTab[0], - (sizeof(ulong) * MAX_RTA_BINDINGS))==COPYFAIL ) { - rio_dprintk (RIO_DEBUG_CTRL, "RIO_PUT_BINDINGS copy failed\n"); - p->RIOError.Error = COPYIN_FAILED; - return -EFAULT; - } - return 0; - - case RIO_BIND_RTA : - { - int EmptySlot = -1; - /* - ** Bind this RTA to host, so that it will be booted by - ** host in 'boot owned RTAs' mode. - */ - rio_dprintk (RIO_DEBUG_CTRL, "RIO_BIND_RTA\n"); - - if ( !su ) { - rio_dprintk (RIO_DEBUG_CTRL, "RIO_BIND_RTA !Root\n"); - p->RIOError.Error = NOT_SUPER_USER; - return -EPERM; - } - for (Entry = 0; Entry < MAX_RTA_BINDINGS; Entry++) { - if ((EmptySlot == -1) && (p->RIOBindTab[Entry] == 0L)) - EmptySlot = Entry; - else if (p->RIOBindTab[Entry] == (int) arg) { - /* - ** Already exists - delete - */ - p->RIOBindTab[Entry] = 0L; - rio_dprintk (RIO_DEBUG_CTRL, "Removing Rta %x from p->RIOBindTab\n", - (int) arg); - return 0; - } - } + ** Bind this RTA to host, so that it will be booted by + ** host in 'boot owned RTAs' mode. + */ + rio_dprintk(RIO_DEBUG_CTRL, "RIO_BIND_RTA\n"); + + if (!su) { + rio_dprintk(RIO_DEBUG_CTRL, "RIO_BIND_RTA !Root\n"); + p->RIOError.Error = NOT_SUPER_USER; + return -EPERM; + } + for (Entry = 0; Entry < MAX_RTA_BINDINGS; Entry++) { + if ((EmptySlot == -1) && (p->RIOBindTab[Entry] == 0L)) + EmptySlot = Entry; + else if (p->RIOBindTab[Entry] == (int) arg) { /* - ** Dosen't exist - add - */ - if (EmptySlot != -1) { - p->RIOBindTab[EmptySlot] = (int) arg; - rio_dprintk (RIO_DEBUG_CTRL, "Adding Rta %x to p->RIOBindTab\n", - (int) arg); - } - else { - rio_dprintk (RIO_DEBUG_CTRL, "p->RIOBindTab full! - Rta %x not added\n", - (int) arg); - return -ENOMEM; - } + ** Already exists - delete + */ + p->RIOBindTab[Entry] = 0L; + rio_dprintk(RIO_DEBUG_CTRL, "Removing Rta %x from p->RIOBindTab\n", (int) arg); return 0; } - - case RIO_RESUME : - rio_dprintk (RIO_DEBUG_CTRL, "RIO_RESUME\n"); - port = (uint) arg; - if ((port < 0) || (port > 511)) { - rio_dprintk (RIO_DEBUG_CTRL, "RIO_RESUME: Bad port number %d\n", port); - p->RIOError.Error = PORT_NUMBER_OUT_OF_RANGE; - return -EINVAL; - } - PortP = p->RIOPortp[port]; - if (!PortP->Mapped) { - rio_dprintk (RIO_DEBUG_CTRL, "RIO_RESUME: Port %d not mapped\n", port); - p->RIOError.Error = PORT_NOT_MAPPED_INTO_SYSTEM; - return -EINVAL; - } - if (!(PortP->State & (RIO_LOPEN | RIO_MOPEN))) { - rio_dprintk (RIO_DEBUG_CTRL, "RIO_RESUME: Port %d not open\n", port); - return -EINVAL; - } - - rio_spin_lock_irqsave(&PortP->portSem, flags); - if (RIOPreemptiveCmd(p, (p->RIOPortp[port]), RESUME) == - RIO_FAIL) { - rio_dprintk (RIO_DEBUG_CTRL, "RIO_RESUME failed\n"); - rio_spin_unlock_irqrestore(&PortP->portSem, flags); - return -EBUSY; - } - else { - rio_dprintk (RIO_DEBUG_CTRL, "RIO_RESUME: Port %d resumed\n", port); - PortP->State |= RIO_BUSY; - } - rio_spin_unlock_irqrestore(&PortP->portSem, flags); - return retval; - - case RIO_ASSIGN_RTA: - rio_dprintk (RIO_DEBUG_CTRL, "RIO_ASSIGN_RTA\n"); - if ( !su ) { - rio_dprintk (RIO_DEBUG_CTRL, "RIO_ASSIGN_RTA !Root\n"); - p->RIOError.Error = NOT_SUPER_USER; - return -EPERM; - } - if (copyin((int)arg, (caddr_t)&MapEnt, sizeof(MapEnt)) - == COPYFAIL) { - rio_dprintk (RIO_DEBUG_CTRL, "Copy from user space failed\n"); - p->RIOError.Error = COPYIN_FAILED; - return -EFAULT; - } - return RIOAssignRta(p, &MapEnt); - - case RIO_CHANGE_NAME: - rio_dprintk (RIO_DEBUG_CTRL, "RIO_CHANGE_NAME\n"); - if ( !su ) { - rio_dprintk (RIO_DEBUG_CTRL, "RIO_CHANGE_NAME !Root\n"); - p->RIOError.Error = NOT_SUPER_USER; - return -EPERM; - } - if (copyin((int)arg, (caddr_t)&MapEnt, sizeof(MapEnt)) - == COPYFAIL) { - rio_dprintk (RIO_DEBUG_CTRL, "Copy from user space failed\n"); - p->RIOError.Error = COPYIN_FAILED; - return -EFAULT; - } - return RIOChangeName(p, &MapEnt); - - case RIO_DELETE_RTA: - rio_dprintk (RIO_DEBUG_CTRL, "RIO_DELETE_RTA\n"); - if ( !su ) { - rio_dprintk (RIO_DEBUG_CTRL, "RIO_DELETE_RTA !Root\n"); - p->RIOError.Error = NOT_SUPER_USER; - return -EPERM; - } - if (copyin((int)arg, (caddr_t)&MapEnt, sizeof(MapEnt)) - == COPYFAIL ) { - rio_dprintk (RIO_DEBUG_CTRL, "Copy from data space failed\n"); - p->RIOError.Error = COPYIN_FAILED; - return -EFAULT; - } - return RIODeleteRta(p, &MapEnt); - - case RIO_QUICK_CHECK: - /* - ** 09.12.1998 ARG - ESIL 0776 part fix - ** A customer was using this to get the RTAs - ** connect/disconnect status. - ** RIOConCon() had been botched use RIOHalted - ** to keep track of RTA connections and - ** disconnections. That has been changed and - ** RIORtaDisCons in the rio_info struct now - ** does the job. So we need to return the value - ** of RIORtaCons instead of RIOHalted. - ** - if (copyout((caddr_t)&p->RIOHalted,(int)arg, - sizeof(uint))==COPYFAIL) { - ** - */ - - if (copyout((caddr_t)&p->RIORtaDisCons,(int)arg, - sizeof(uint))==COPYFAIL) { - p->RIOError.Error = COPYOUT_FAILED; - return -EFAULT; - } - return 0; - - case RIO_LAST_ERROR: - if (copyout((caddr_t)&p->RIOError, (int)arg, - sizeof(struct Error)) ==COPYFAIL ) - return -EFAULT; - return 0; - - case RIO_GET_LOG: - rio_dprintk (RIO_DEBUG_CTRL, "RIO_GET_LOG\n"); + } + /* + ** Dosen't exist - add + */ + if (EmptySlot != -1) { + p->RIOBindTab[EmptySlot] = (int) arg; + rio_dprintk(RIO_DEBUG_CTRL, "Adding Rta %x to p->RIOBindTab\n", (int) arg); + } else { + rio_dprintk(RIO_DEBUG_CTRL, "p->RIOBindTab full! - Rta %x not added\n", (int) arg); + return -ENOMEM; + } + return 0; + } + + case RIO_RESUME: + rio_dprintk(RIO_DEBUG_CTRL, "RIO_RESUME\n"); + port = (uint) arg; + if ((port < 0) || (port > 511)) { + rio_dprintk(RIO_DEBUG_CTRL, "RIO_RESUME: Bad port number %d\n", port); + p->RIOError.Error = PORT_NUMBER_OUT_OF_RANGE; + return -EINVAL; + } + PortP = p->RIOPortp[port]; + if (!PortP->Mapped) { + rio_dprintk(RIO_DEBUG_CTRL, "RIO_RESUME: Port %d not mapped\n", port); + p->RIOError.Error = PORT_NOT_MAPPED_INTO_SYSTEM; + return -EINVAL; + } + if (!(PortP->State & (RIO_LOPEN | RIO_MOPEN))) { + rio_dprintk(RIO_DEBUG_CTRL, "RIO_RESUME: Port %d not open\n", port); + return -EINVAL; + } + + rio_spin_lock_irqsave(&PortP->portSem, flags); + if (RIOPreemptiveCmd(p, (p->RIOPortp[port]), RESUME) == RIO_FAIL) { + rio_dprintk(RIO_DEBUG_CTRL, "RIO_RESUME failed\n"); + rio_spin_unlock_irqrestore(&PortP->portSem, flags); + return -EBUSY; + } else { + rio_dprintk(RIO_DEBUG_CTRL, "RIO_RESUME: Port %d resumed\n", port); + PortP->State |= RIO_BUSY; + } + rio_spin_unlock_irqrestore(&PortP->portSem, flags); + return retval; + + case RIO_ASSIGN_RTA: + rio_dprintk(RIO_DEBUG_CTRL, "RIO_ASSIGN_RTA\n"); + if (!su) { + rio_dprintk(RIO_DEBUG_CTRL, "RIO_ASSIGN_RTA !Root\n"); + p->RIOError.Error = NOT_SUPER_USER; + return -EPERM; + } + if (copyin((int) arg, (caddr_t) & MapEnt, sizeof(MapEnt)) + == COPYFAIL) { + rio_dprintk(RIO_DEBUG_CTRL, "Copy from user space failed\n"); + p->RIOError.Error = COPYIN_FAILED; + return -EFAULT; + } + return RIOAssignRta(p, &MapEnt); + + case RIO_CHANGE_NAME: + rio_dprintk(RIO_DEBUG_CTRL, "RIO_CHANGE_NAME\n"); + if (!su) { + rio_dprintk(RIO_DEBUG_CTRL, "RIO_CHANGE_NAME !Root\n"); + p->RIOError.Error = NOT_SUPER_USER; + return -EPERM; + } + if (copyin((int) arg, (caddr_t) & MapEnt, sizeof(MapEnt)) + == COPYFAIL) { + rio_dprintk(RIO_DEBUG_CTRL, "Copy from user space failed\n"); + p->RIOError.Error = COPYIN_FAILED; + return -EFAULT; + } + return RIOChangeName(p, &MapEnt); + + case RIO_DELETE_RTA: + rio_dprintk(RIO_DEBUG_CTRL, "RIO_DELETE_RTA\n"); + if (!su) { + rio_dprintk(RIO_DEBUG_CTRL, "RIO_DELETE_RTA !Root\n"); + p->RIOError.Error = NOT_SUPER_USER; + return -EPERM; + } + if (copyin((int) arg, (caddr_t) & MapEnt, sizeof(MapEnt)) + == COPYFAIL) { + rio_dprintk(RIO_DEBUG_CTRL, "Copy from data space failed\n"); + p->RIOError.Error = COPYIN_FAILED; + return -EFAULT; + } + return RIODeleteRta(p, &MapEnt); + + case RIO_QUICK_CHECK: + /* + ** 09.12.1998 ARG - ESIL 0776 part fix + ** A customer was using this to get the RTAs + ** connect/disconnect status. + ** RIOConCon() had been botched use RIOHalted + ** to keep track of RTA connections and + ** disconnections. That has been changed and + ** RIORtaDisCons in the rio_info struct now + ** does the job. So we need to return the value + ** of RIORtaCons instead of RIOHalted. + ** + if (copyout((caddr_t)&p->RIOHalted,(int)arg, + sizeof(uint))==COPYFAIL) { + ** + */ + + if (copyout((caddr_t) & p->RIORtaDisCons, (int) arg, sizeof(uint)) == COPYFAIL) { + p->RIOError.Error = COPYOUT_FAILED; + return -EFAULT; + } + return 0; + + case RIO_LAST_ERROR: + if (copyout((caddr_t) & p->RIOError, (int) arg, sizeof(struct Error)) == COPYFAIL) + return -EFAULT; + return 0; + + case RIO_GET_LOG: + rio_dprintk(RIO_DEBUG_CTRL, "RIO_GET_LOG\n"); #ifdef LOGGING - RIOGetLog(arg); - return 0; + RIOGetLog(arg); + return 0; #else - return -EINVAL; + return -EINVAL; #endif - case RIO_GET_MODTYPE: - if ( copyin( (int)arg, (caddr_t)&port, - sizeof(uint)) == COPYFAIL ) - { - p->RIOError.Error = COPYIN_FAILED; - return -EFAULT; - } - rio_dprintk (RIO_DEBUG_CTRL, "Get module type for port %d\n", port); - if ( port < 0 || port > 511 ) - { - rio_dprintk (RIO_DEBUG_CTRL, "RIO_GET_MODTYPE: Bad port number %d\n", port); - p->RIOError.Error = PORT_NUMBER_OUT_OF_RANGE; - return -EINVAL; - } - PortP = (p->RIOPortp[port]); - if (!PortP->Mapped) - { - rio_dprintk (RIO_DEBUG_CTRL, "RIO_GET_MODTYPE: Port %d not mapped\n", port); - p->RIOError.Error = PORT_NOT_MAPPED_INTO_SYSTEM; - return -EINVAL; - } - /* - ** Return module type of port - */ - port = PortP->HostP->UnixRups[PortP->RupNum].ModTypes; - if (copyout((caddr_t)&port, (int)arg, - sizeof(uint)) == COPYFAIL) { - p->RIOError.Error = COPYOUT_FAILED; - return -EFAULT; - } - return(0); - /* - ** 02.03.1999 ARG - ESIL 0820 fix - ** We are no longer using "Boot Mode", so these ioctls - ** are not required : - ** - case RIO_GET_BOOT_MODE : - rio_dprint(RIO_DEBUG_CTRL, ("Get boot mode - %x\n", p->RIOBootMode)); - ** - ** Return boot state of system - BOOT_ALL, BOOT_OWN or BOOT_NONE - ** - if (copyout((caddr_t)&p->RIOBootMode, (int)arg, - sizeof(p->RIOBootMode)) == COPYFAIL) { - p->RIOError.Error = COPYOUT_FAILED; - return -EFAULT; - } - return(0); - - case RIO_SET_BOOT_MODE : - p->RIOBootMode = (uint) arg; - rio_dprint(RIO_DEBUG_CTRL, ("Set boot mode to 0x%x\n", p->RIOBootMode)); - return(0); - ** - ** End ESIL 0820 fix - */ - - case RIO_BLOCK_OPENS: - rio_dprintk (RIO_DEBUG_CTRL, "Opens block until booted\n"); - for ( Entry=0; Entry < RIO_PORTS; Entry++ ) { - rio_spin_lock_irqsave(&PortP->portSem, flags); - p->RIOPortp[Entry]->WaitUntilBooted = 1; - rio_spin_unlock_irqrestore(&PortP->portSem, flags); - } - return 0; - - case RIO_SETUP_PORTS: - rio_dprintk (RIO_DEBUG_CTRL, "Setup ports\n"); - if (copyin((int)arg, (caddr_t)&PortSetup, sizeof(PortSetup)) - == COPYFAIL ) { - p->RIOError.Error = COPYIN_FAILED; - rio_dprintk (RIO_DEBUG_CTRL, "EFAULT"); - return -EFAULT; - } - if ( PortSetup.From > PortSetup.To || - PortSetup.To >= RIO_PORTS ) { - p->RIOError.Error = PORT_NUMBER_OUT_OF_RANGE; - rio_dprintk (RIO_DEBUG_CTRL, "ENXIO"); - return -ENXIO; - } - if ( PortSetup.XpCps > p->RIOConf.MaxXpCps || - PortSetup.XpCps < p->RIOConf.MinXpCps ) { - p->RIOError.Error = XPRINT_CPS_OUT_OF_RANGE; - rio_dprintk (RIO_DEBUG_CTRL, "EINVAL"); - return -EINVAL; - } - if ( !p->RIOPortp ) { - cprintf("No p->RIOPortp array!\n"); - rio_dprintk (RIO_DEBUG_CTRL, "No p->RIOPortp array!\n"); - return -EIO; - } - rio_dprintk (RIO_DEBUG_CTRL, "entering loop (%d %d)!\n", PortSetup.From, PortSetup.To); - for (loop=PortSetup.From; loop<=PortSetup.To; loop++) { - rio_dprintk (RIO_DEBUG_CTRL, "in loop (%d)!\n", loop); + case RIO_GET_MODTYPE: + if (copyin((int) arg, (caddr_t) & port, sizeof(uint)) == COPYFAIL) { + p->RIOError.Error = COPYIN_FAILED; + return -EFAULT; + } + rio_dprintk(RIO_DEBUG_CTRL, "Get module type for port %d\n", port); + if (port < 0 || port > 511) { + rio_dprintk(RIO_DEBUG_CTRL, "RIO_GET_MODTYPE: Bad port number %d\n", port); + p->RIOError.Error = PORT_NUMBER_OUT_OF_RANGE; + return -EINVAL; + } + PortP = (p->RIOPortp[port]); + if (!PortP->Mapped) { + rio_dprintk(RIO_DEBUG_CTRL, "RIO_GET_MODTYPE: Port %d not mapped\n", port); + p->RIOError.Error = PORT_NOT_MAPPED_INTO_SYSTEM; + return -EINVAL; + } + /* + ** Return module type of port + */ + port = PortP->HostP->UnixRups[PortP->RupNum].ModTypes; + if (copyout((caddr_t) & port, (int) arg, sizeof(uint)) == COPYFAIL) { + p->RIOError.Error = COPYOUT_FAILED; + return -EFAULT; + } + return (0); + /* + ** 02.03.1999 ARG - ESIL 0820 fix + ** We are no longer using "Boot Mode", so these ioctls + ** are not required : + ** + case RIO_GET_BOOT_MODE : + rio_dprint(RIO_DEBUG_CTRL, ("Get boot mode - %x\n", p->RIOBootMode)); + ** + ** Return boot state of system - BOOT_ALL, BOOT_OWN or BOOT_NONE + ** + if (copyout((caddr_t)&p->RIOBootMode, (int)arg, + sizeof(p->RIOBootMode)) == COPYFAIL) { + p->RIOError.Error = COPYOUT_FAILED; + return -EFAULT; + } + return(0); + + case RIO_SET_BOOT_MODE : + p->RIOBootMode = (uint) arg; + rio_dprint(RIO_DEBUG_CTRL, ("Set boot mode to 0x%x\n", p->RIOBootMode)); + return(0); + ** + ** End ESIL 0820 fix + */ + + case RIO_BLOCK_OPENS: + rio_dprintk(RIO_DEBUG_CTRL, "Opens block until booted\n"); + for (Entry = 0; Entry < RIO_PORTS; Entry++) { + rio_spin_lock_irqsave(&PortP->portSem, flags); + p->RIOPortp[Entry]->WaitUntilBooted = 1; + rio_spin_unlock_irqrestore(&PortP->portSem, flags); + } + return 0; + + case RIO_SETUP_PORTS: + rio_dprintk(RIO_DEBUG_CTRL, "Setup ports\n"); + if (copyin((int) arg, (caddr_t) & PortSetup, sizeof(PortSetup)) + == COPYFAIL) { + p->RIOError.Error = COPYIN_FAILED; + rio_dprintk(RIO_DEBUG_CTRL, "EFAULT"); + return -EFAULT; + } + if (PortSetup.From > PortSetup.To || PortSetup.To >= RIO_PORTS) { + p->RIOError.Error = PORT_NUMBER_OUT_OF_RANGE; + rio_dprintk(RIO_DEBUG_CTRL, "ENXIO"); + return -ENXIO; + } + if (PortSetup.XpCps > p->RIOConf.MaxXpCps || PortSetup.XpCps < p->RIOConf.MinXpCps) { + p->RIOError.Error = XPRINT_CPS_OUT_OF_RANGE; + rio_dprintk(RIO_DEBUG_CTRL, "EINVAL"); + return -EINVAL; + } + if (!p->RIOPortp) { + cprintf("No p->RIOPortp array!\n"); + rio_dprintk(RIO_DEBUG_CTRL, "No p->RIOPortp array!\n"); + return -EIO; + } + rio_dprintk(RIO_DEBUG_CTRL, "entering loop (%d %d)!\n", PortSetup.From, PortSetup.To); + for (loop = PortSetup.From; loop <= PortSetup.To; loop++) { + rio_dprintk(RIO_DEBUG_CTRL, "in loop (%d)!\n", loop); #if 0 - PortP = p->RIOPortp[loop]; - if ( !PortP->TtyP ) - PortP->TtyP = &p->channel[loop]; - - rio_spin_lock_irqsave(&PortP->portSem, flags); - if ( PortSetup.IxAny ) - PortP->Config |= RIO_IXANY; - else - PortP->Config &= ~RIO_IXANY; - if ( PortSetup.IxOn ) - PortP->Config |= RIO_IXON; - else - PortP->Config &= ~RIO_IXON; - - /* - ** If the port needs to wait for all a processes output - ** to drain before closing then this flag will be set. - */ - if (PortSetup.Drain) { - PortP->Config |= RIO_WAITDRAIN; - } else { - PortP->Config &= ~RIO_WAITDRAIN; - } - /* - ** Store settings if locking or unlocking port or if the - ** port is not locked, when setting the store option. - */ - if (PortP->Mapped && - ((PortSetup.Lock && !PortP->Lock) || - (!PortP->Lock && - (PortSetup.Store && !PortP->Store)))) { - PortP->StoredTty.iflag = PortP->TtyP->tm.c_iflag; - PortP->StoredTty.oflag = PortP->TtyP->tm.c_oflag; - PortP->StoredTty.cflag = PortP->TtyP->tm.c_cflag; - PortP->StoredTty.lflag = PortP->TtyP->tm.c_lflag; - PortP->StoredTty.line = PortP->TtyP->tm.c_line; - bcopy(PortP->TtyP->tm.c_cc, PortP->StoredTty.cc, - NCC + 5); - } - PortP->Lock = PortSetup.Lock; - PortP->Store = PortSetup.Store; - PortP->Xprint.XpCps = PortSetup.XpCps; - bcopy(PortSetup.XpOn,PortP->Xprint.XpOn,MAX_XP_CTRL_LEN); - bcopy(PortSetup.XpOff,PortP->Xprint.XpOff,MAX_XP_CTRL_LEN); - PortP->Xprint.XpOn[MAX_XP_CTRL_LEN-1] = '\0'; - PortP->Xprint.XpOff[MAX_XP_CTRL_LEN-1] = '\0'; - PortP->Xprint.XpLen = RIOStrlen(PortP->Xprint.XpOn)+ - RIOStrlen(PortP->Xprint.XpOff); - rio_spin_unlock_irqrestore( &PortP->portSem , flags); -#endif - } - rio_dprintk (RIO_DEBUG_CTRL, "after loop (%d)!\n", loop); - rio_dprintk (RIO_DEBUG_CTRL, "Retval:%x\n", retval); - return retval; - - case RIO_GET_PORT_SETUP : - rio_dprintk (RIO_DEBUG_CTRL, "Get port setup\n"); - if (copyin((int)arg, (caddr_t)&PortSetup, sizeof(PortSetup)) - == COPYFAIL ) { - p->RIOError.Error = COPYIN_FAILED; - return -EFAULT; - } - if ( PortSetup.From >= RIO_PORTS ) { - p->RIOError.Error = PORT_NUMBER_OUT_OF_RANGE; - return -ENXIO; - } + PortP = p->RIOPortp[loop]; + if (!PortP->TtyP) + PortP->TtyP = &p->channel[loop]; + + rio_spin_lock_irqsave(&PortP->portSem, flags); + if (PortSetup.IxAny) + PortP->Config |= RIO_IXANY; + else + PortP->Config &= ~RIO_IXANY; + if (PortSetup.IxOn) + PortP->Config |= RIO_IXON; + else + PortP->Config &= ~RIO_IXON; - port = PortSetup.To = PortSetup.From; - PortSetup.IxAny = (p->RIOPortp[port]->Config & RIO_IXANY) ? - 1 : 0; - PortSetup.IxOn = (p->RIOPortp[port]->Config & RIO_IXON) ? - 1 : 0; - PortSetup.Drain = (p->RIOPortp[port]->Config & RIO_WAITDRAIN) ? - 1 : 0; - PortSetup.Store = p->RIOPortp[port]->Store; - PortSetup.Lock = p->RIOPortp[port]->Lock; - PortSetup.XpCps = p->RIOPortp[port]->Xprint.XpCps; - bcopy(p->RIOPortp[port]->Xprint.XpOn, PortSetup.XpOn, - MAX_XP_CTRL_LEN); - bcopy(p->RIOPortp[port]->Xprint.XpOff, PortSetup.XpOff, - MAX_XP_CTRL_LEN); - PortSetup.XpOn[MAX_XP_CTRL_LEN-1] = '\0'; - PortSetup.XpOff[MAX_XP_CTRL_LEN-1] = '\0'; - - if ( copyout((caddr_t)&PortSetup,(int)arg,sizeof(PortSetup)) - ==COPYFAIL ) { - p->RIOError.Error = COPYOUT_FAILED; - return -EFAULT; - } - return retval; - - case RIO_GET_PORT_PARAMS : - rio_dprintk (RIO_DEBUG_CTRL, "Get port params\n"); - if (copyin( (int)arg, (caddr_t)&PortParams, - sizeof(struct PortParams)) == COPYFAIL) { - p->RIOError.Error = COPYIN_FAILED; - return -EFAULT; - } - if (PortParams.Port >= RIO_PORTS) { - p->RIOError.Error = PORT_NUMBER_OUT_OF_RANGE; - return -ENXIO; - } - PortP = (p->RIOPortp[PortParams.Port]); - PortParams.Config = PortP->Config; - PortParams.State = PortP->State; - rio_dprintk (RIO_DEBUG_CTRL, "Port %d\n", PortParams.Port); - - if (copyout((caddr_t)&PortParams, (int)arg, - sizeof(struct PortParams)) == COPYFAIL ) { - p->RIOError.Error = COPYOUT_FAILED; - return -EFAULT; - } - return retval; - - case RIO_GET_PORT_TTY : - rio_dprintk (RIO_DEBUG_CTRL, "Get port tty\n"); - if (copyin((int)arg, (caddr_t)&PortTty, sizeof(struct PortTty)) - == COPYFAIL) { - p->RIOError.Error = COPYIN_FAILED; - return -EFAULT; - } - if ( PortTty.port >= RIO_PORTS ) { - p->RIOError.Error = PORT_NUMBER_OUT_OF_RANGE; - return -ENXIO; - } - - rio_dprintk (RIO_DEBUG_CTRL, "Port %d\n", PortTty.port); - PortP = (p->RIOPortp[PortTty.port]); + /* + ** If the port needs to wait for all a processes output + ** to drain before closing then this flag will be set. + */ + if (PortSetup.Drain) { + PortP->Config |= RIO_WAITDRAIN; + } else { + PortP->Config &= ~RIO_WAITDRAIN; + } + /* + ** Store settings if locking or unlocking port or if the + ** port is not locked, when setting the store option. + */ + if (PortP->Mapped && ((PortSetup.Lock && !PortP->Lock) || (!PortP->Lock && (PortSetup.Store && !PortP->Store)))) { + PortP->StoredTty.iflag = PortP->TtyP->tm.c_iflag; + PortP->StoredTty.oflag = PortP->TtyP->tm.c_oflag; + PortP->StoredTty.cflag = PortP->TtyP->tm.c_cflag; + PortP->StoredTty.lflag = PortP->TtyP->tm.c_lflag; + PortP->StoredTty.line = PortP->TtyP->tm.c_line; + bcopy(PortP->TtyP->tm.c_cc, PortP->StoredTty.cc, NCC + 5); + } + PortP->Lock = PortSetup.Lock; + PortP->Store = PortSetup.Store; + PortP->Xprint.XpCps = PortSetup.XpCps; + bcopy(PortSetup.XpOn, PortP->Xprint.XpOn, MAX_XP_CTRL_LEN); + bcopy(PortSetup.XpOff, PortP->Xprint.XpOff, MAX_XP_CTRL_LEN); + PortP->Xprint.XpOn[MAX_XP_CTRL_LEN - 1] = '\0'; + PortP->Xprint.XpOff[MAX_XP_CTRL_LEN - 1] = '\0'; + PortP->Xprint.XpLen = RIOStrlen(PortP->Xprint.XpOn) + RIOStrlen(PortP->Xprint.XpOff); + rio_spin_unlock_irqrestore(&PortP->portSem, flags); +#endif + } + rio_dprintk(RIO_DEBUG_CTRL, "after loop (%d)!\n", loop); + rio_dprintk(RIO_DEBUG_CTRL, "Retval:%x\n", retval); + return retval; + + case RIO_GET_PORT_SETUP: + rio_dprintk(RIO_DEBUG_CTRL, "Get port setup\n"); + if (copyin((int) arg, (caddr_t) & PortSetup, sizeof(PortSetup)) + == COPYFAIL) { + p->RIOError.Error = COPYIN_FAILED; + return -EFAULT; + } + if (PortSetup.From >= RIO_PORTS) { + p->RIOError.Error = PORT_NUMBER_OUT_OF_RANGE; + return -ENXIO; + } + + port = PortSetup.To = PortSetup.From; + PortSetup.IxAny = (p->RIOPortp[port]->Config & RIO_IXANY) ? 1 : 0; + PortSetup.IxOn = (p->RIOPortp[port]->Config & RIO_IXON) ? 1 : 0; + PortSetup.Drain = (p->RIOPortp[port]->Config & RIO_WAITDRAIN) ? 1 : 0; + PortSetup.Store = p->RIOPortp[port]->Store; + PortSetup.Lock = p->RIOPortp[port]->Lock; + PortSetup.XpCps = p->RIOPortp[port]->Xprint.XpCps; + bcopy(p->RIOPortp[port]->Xprint.XpOn, PortSetup.XpOn, MAX_XP_CTRL_LEN); + bcopy(p->RIOPortp[port]->Xprint.XpOff, PortSetup.XpOff, MAX_XP_CTRL_LEN); + PortSetup.XpOn[MAX_XP_CTRL_LEN - 1] = '\0'; + PortSetup.XpOff[MAX_XP_CTRL_LEN - 1] = '\0'; + + if (copyout((caddr_t) & PortSetup, (int) arg, sizeof(PortSetup)) + == COPYFAIL) { + p->RIOError.Error = COPYOUT_FAILED; + return -EFAULT; + } + return retval; + + case RIO_GET_PORT_PARAMS: + rio_dprintk(RIO_DEBUG_CTRL, "Get port params\n"); + if (copyin((int) arg, (caddr_t) & PortParams, sizeof(struct PortParams)) == COPYFAIL) { + p->RIOError.Error = COPYIN_FAILED; + return -EFAULT; + } + if (PortParams.Port >= RIO_PORTS) { + p->RIOError.Error = PORT_NUMBER_OUT_OF_RANGE; + return -ENXIO; + } + PortP = (p->RIOPortp[PortParams.Port]); + PortParams.Config = PortP->Config; + PortParams.State = PortP->State; + rio_dprintk(RIO_DEBUG_CTRL, "Port %d\n", PortParams.Port); + + if (copyout((caddr_t) & PortParams, (int) arg, sizeof(struct PortParams)) == COPYFAIL) { + p->RIOError.Error = COPYOUT_FAILED; + return -EFAULT; + } + return retval; + + case RIO_GET_PORT_TTY: + rio_dprintk(RIO_DEBUG_CTRL, "Get port tty\n"); + if (copyin((int) arg, (caddr_t) & PortTty, sizeof(struct PortTty)) + == COPYFAIL) { + p->RIOError.Error = COPYIN_FAILED; + return -EFAULT; + } + if (PortTty.port >= RIO_PORTS) { + p->RIOError.Error = PORT_NUMBER_OUT_OF_RANGE; + return -ENXIO; + } + + rio_dprintk(RIO_DEBUG_CTRL, "Port %d\n", PortTty.port); + PortP = (p->RIOPortp[PortTty.port]); #if 0 - PortTty.Tty.tm.c_iflag = PortP->TtyP->tm.c_iflag; - PortTty.Tty.tm.c_oflag = PortP->TtyP->tm.c_oflag; - PortTty.Tty.tm.c_cflag = PortP->TtyP->tm.c_cflag; - PortTty.Tty.tm.c_lflag = PortP->TtyP->tm.c_lflag; + PortTty.Tty.tm.c_iflag = PortP->TtyP->tm.c_iflag; + PortTty.Tty.tm.c_oflag = PortP->TtyP->tm.c_oflag; + PortTty.Tty.tm.c_cflag = PortP->TtyP->tm.c_cflag; + PortTty.Tty.tm.c_lflag = PortP->TtyP->tm.c_lflag; #endif - if (copyout((caddr_t)&PortTty, (int)arg, - sizeof(struct PortTty)) == COPYFAIL) { - p->RIOError.Error = COPYOUT_FAILED; - return -EFAULT; - } - return retval; - - case RIO_SET_PORT_TTY : - if (copyin((int)arg, (caddr_t)&PortTty, - sizeof(struct PortTty)) == COPYFAIL) { - p->RIOError.Error = COPYIN_FAILED; - return -EFAULT; - } - rio_dprintk (RIO_DEBUG_CTRL, "Set port %d tty\n", PortTty.port); - if (PortTty.port >= (ushort) RIO_PORTS) { - p->RIOError.Error = PORT_NUMBER_OUT_OF_RANGE; - return -ENXIO; - } - PortP = (p->RIOPortp[PortTty.port]); + if (copyout((caddr_t) & PortTty, (int) arg, sizeof(struct PortTty)) == COPYFAIL) { + p->RIOError.Error = COPYOUT_FAILED; + return -EFAULT; + } + return retval; + + case RIO_SET_PORT_TTY: + if (copyin((int) arg, (caddr_t) & PortTty, sizeof(struct PortTty)) == COPYFAIL) { + p->RIOError.Error = COPYIN_FAILED; + return -EFAULT; + } + rio_dprintk(RIO_DEBUG_CTRL, "Set port %d tty\n", PortTty.port); + if (PortTty.port >= (ushort) RIO_PORTS) { + p->RIOError.Error = PORT_NUMBER_OUT_OF_RANGE; + return -ENXIO; + } + PortP = (p->RIOPortp[PortTty.port]); #if 0 - rio_spin_lock_irqsave(&PortP->portSem, flags); - PortP->TtyP->tm.c_iflag = PortTty.Tty.tm.c_iflag; - PortP->TtyP->tm.c_oflag = PortTty.Tty.tm.c_oflag; - PortP->TtyP->tm.c_cflag = PortTty.Tty.tm.c_cflag; - PortP->TtyP->tm.c_lflag = PortTty.Tty.tm.c_lflag; - rio_spin_unlock_irqrestore( &PortP->portSem , flags); + rio_spin_lock_irqsave(&PortP->portSem, flags); + PortP->TtyP->tm.c_iflag = PortTty.Tty.tm.c_iflag; + PortP->TtyP->tm.c_oflag = PortTty.Tty.tm.c_oflag; + PortP->TtyP->tm.c_cflag = PortTty.Tty.tm.c_cflag; + PortP->TtyP->tm.c_lflag = PortTty.Tty.tm.c_lflag; + rio_spin_unlock_irqrestore(&PortP->portSem, flags); #endif - RIOParam(PortP, CONFIG, PortP->State & RIO_MODEM, OK_TO_SLEEP); - return retval; - - case RIO_SET_PORT_PARAMS : - rio_dprintk (RIO_DEBUG_CTRL, "Set port params\n"); - if ( copyin((int)arg, (caddr_t)&PortParams, sizeof(PortParams)) - == COPYFAIL ) { - p->RIOError.Error = COPYIN_FAILED; - return -EFAULT; - } - if (PortParams.Port >= (ushort) RIO_PORTS) { - p->RIOError.Error = PORT_NUMBER_OUT_OF_RANGE; - return -ENXIO; - } - PortP = (p->RIOPortp[PortParams.Port]); - rio_spin_lock_irqsave(&PortP->portSem, flags); - PortP->Config = PortParams.Config; - rio_spin_unlock_irqrestore( &PortP->portSem , flags); - return retval; - - case RIO_GET_PORT_STATS : - rio_dprintk (RIO_DEBUG_CTRL, "RIO_GET_PORT_STATS\n"); - if ( copyin((int)arg, (caddr_t)&portStats, - sizeof(struct portStats)) == COPYFAIL ) { - p->RIOError.Error = COPYIN_FAILED; - return -EFAULT; - } - if ( portStats.port >= RIO_PORTS ) { - p->RIOError.Error = PORT_NUMBER_OUT_OF_RANGE; - return -ENXIO; - } - PortP = (p->RIOPortp[portStats.port]); - portStats.gather = PortP->statsGather; - portStats.txchars = PortP->txchars; - portStats.rxchars = PortP->rxchars; - portStats.opens = PortP->opens; - portStats.closes = PortP->closes; - portStats.ioctls = PortP->ioctls; - if ( copyout((caddr_t)&portStats, (int)arg, - sizeof(struct portStats)) == COPYFAIL ) { - p->RIOError.Error = COPYOUT_FAILED; - return -EFAULT; - } - return retval; - - case RIO_RESET_PORT_STATS : - port = (uint) arg; - rio_dprintk (RIO_DEBUG_CTRL, "RIO_RESET_PORT_STATS\n"); - if ( port >= RIO_PORTS ) { - p->RIOError.Error = PORT_NUMBER_OUT_OF_RANGE; - return -ENXIO; - } - PortP = (p->RIOPortp[port]); - rio_spin_lock_irqsave(&PortP->portSem, flags); - PortP->txchars = 0; - PortP->rxchars = 0; - PortP->opens = 0; - PortP->closes = 0; - PortP->ioctls = 0; - rio_spin_unlock_irqrestore(&PortP->portSem, flags); - return retval; - - case RIO_GATHER_PORT_STATS : - rio_dprintk (RIO_DEBUG_CTRL, "RIO_GATHER_PORT_STATS\n"); - if ( copyin( (int)arg, (caddr_t)&portStats, - sizeof(struct portStats)) == COPYFAIL ) { - p->RIOError.Error = COPYIN_FAILED; - return -EFAULT; - } - if ( portStats.port >= RIO_PORTS ) { - p->RIOError.Error = PORT_NUMBER_OUT_OF_RANGE; - return -ENXIO; - } - PortP = (p->RIOPortp[portStats.port]); - rio_spin_lock_irqsave(&PortP->portSem, flags); - PortP->statsGather = portStats.gather; - rio_spin_unlock_irqrestore( &PortP->portSem , flags); - return retval; + RIOParam(PortP, CONFIG, PortP->State & RIO_MODEM, OK_TO_SLEEP); + return retval; + + case RIO_SET_PORT_PARAMS: + rio_dprintk(RIO_DEBUG_CTRL, "Set port params\n"); + if (copyin((int) arg, (caddr_t) & PortParams, sizeof(PortParams)) + == COPYFAIL) { + p->RIOError.Error = COPYIN_FAILED; + return -EFAULT; + } + if (PortParams.Port >= (ushort) RIO_PORTS) { + p->RIOError.Error = PORT_NUMBER_OUT_OF_RANGE; + return -ENXIO; + } + PortP = (p->RIOPortp[PortParams.Port]); + rio_spin_lock_irqsave(&PortP->portSem, flags); + PortP->Config = PortParams.Config; + rio_spin_unlock_irqrestore(&PortP->portSem, flags); + return retval; + + case RIO_GET_PORT_STATS: + rio_dprintk(RIO_DEBUG_CTRL, "RIO_GET_PORT_STATS\n"); + if (copyin((int) arg, (caddr_t) & portStats, sizeof(struct portStats)) == COPYFAIL) { + p->RIOError.Error = COPYIN_FAILED; + return -EFAULT; + } + if (portStats.port >= RIO_PORTS) { + p->RIOError.Error = PORT_NUMBER_OUT_OF_RANGE; + return -ENXIO; + } + PortP = (p->RIOPortp[portStats.port]); + portStats.gather = PortP->statsGather; + portStats.txchars = PortP->txchars; + portStats.rxchars = PortP->rxchars; + portStats.opens = PortP->opens; + portStats.closes = PortP->closes; + portStats.ioctls = PortP->ioctls; + if (copyout((caddr_t) & portStats, (int) arg, sizeof(struct portStats)) == COPYFAIL) { + p->RIOError.Error = COPYOUT_FAILED; + return -EFAULT; + } + return retval; + + case RIO_RESET_PORT_STATS: + port = (uint) arg; + rio_dprintk(RIO_DEBUG_CTRL, "RIO_RESET_PORT_STATS\n"); + if (port >= RIO_PORTS) { + p->RIOError.Error = PORT_NUMBER_OUT_OF_RANGE; + return -ENXIO; + } + PortP = (p->RIOPortp[port]); + rio_spin_lock_irqsave(&PortP->portSem, flags); + PortP->txchars = 0; + PortP->rxchars = 0; + PortP->opens = 0; + PortP->closes = 0; + PortP->ioctls = 0; + rio_spin_unlock_irqrestore(&PortP->portSem, flags); + return retval; + + case RIO_GATHER_PORT_STATS: + rio_dprintk(RIO_DEBUG_CTRL, "RIO_GATHER_PORT_STATS\n"); + if (copyin((int) arg, (caddr_t) & portStats, sizeof(struct portStats)) == COPYFAIL) { + p->RIOError.Error = COPYIN_FAILED; + return -EFAULT; + } + if (portStats.port >= RIO_PORTS) { + p->RIOError.Error = PORT_NUMBER_OUT_OF_RANGE; + return -ENXIO; + } + PortP = (p->RIOPortp[portStats.port]); + rio_spin_lock_irqsave(&PortP->portSem, flags); + PortP->statsGather = portStats.gather; + rio_spin_unlock_irqrestore(&PortP->portSem, flags); + return retval; #ifdef DEBUG_SUPPORTED - case RIO_READ_LEVELS: - { - int num; - rio_dprintk (RIO_DEBUG_CTRL, "RIO_READ_LEVELS\n"); - for ( num=0; RIODbInf[num].Flag; num++ ) ; - rio_dprintk (RIO_DEBUG_CTRL, "%d levels to copy\n",num); - if (copyout((caddr_t)RIODbInf,(int)arg, - sizeof(struct DbInf)*(num+1))==COPYFAIL) { - rio_dprintk (RIO_DEBUG_CTRL, "ReadLevels Copy failed\n"); - p->RIOError.Error = COPYOUT_FAILED; - return -EFAULT; - } - rio_dprintk (RIO_DEBUG_CTRL, "%d levels to copied\n",num); - return retval; - } + case RIO_READ_LEVELS: + { + int num; + rio_dprintk(RIO_DEBUG_CTRL, "RIO_READ_LEVELS\n"); + for (num = 0; RIODbInf[num].Flag; num++); + rio_dprintk(RIO_DEBUG_CTRL, "%d levels to copy\n", num); + if (copyout((caddr_t) RIODbInf, (int) arg, sizeof(struct DbInf) * (num + 1)) == COPYFAIL) { + rio_dprintk(RIO_DEBUG_CTRL, "ReadLevels Copy failed\n"); + p->RIOError.Error = COPYOUT_FAILED; + return -EFAULT; + } + rio_dprintk(RIO_DEBUG_CTRL, "%d levels to copied\n", num); + return retval; + } #endif - case RIO_READ_CONFIG: - rio_dprintk (RIO_DEBUG_CTRL, "RIO_READ_CONFIG\n"); - if (copyout((caddr_t)&p->RIOConf, (int)arg, - sizeof(struct Conf)) ==COPYFAIL ) { - p->RIOError.Error = COPYOUT_FAILED; - return -EFAULT; - } - return retval; - - case RIO_SET_CONFIG: - rio_dprintk (RIO_DEBUG_CTRL, "RIO_SET_CONFIG\n"); - if ( !su ) { - p->RIOError.Error = NOT_SUPER_USER; - return -EPERM; + case RIO_READ_CONFIG: + rio_dprintk(RIO_DEBUG_CTRL, "RIO_READ_CONFIG\n"); + if (copyout((caddr_t) & p->RIOConf, (int) arg, sizeof(struct Conf)) == COPYFAIL) { + p->RIOError.Error = COPYOUT_FAILED; + return -EFAULT; + } + return retval; + + case RIO_SET_CONFIG: + rio_dprintk(RIO_DEBUG_CTRL, "RIO_SET_CONFIG\n"); + if (!su) { + p->RIOError.Error = NOT_SUPER_USER; + return -EPERM; + } + if (copyin((int) arg, (caddr_t) & p->RIOConf, sizeof(struct Conf)) + == COPYFAIL) { + p->RIOError.Error = COPYIN_FAILED; + return -EFAULT; + } + /* + ** move a few value around + */ + for (Host = 0; Host < p->RIONumHosts; Host++) + if ((p->RIOHosts[Host].Flags & RUN_STATE) == RC_RUNNING) + WWORD(p->RIOHosts[Host].ParmMapP->timer, p->RIOConf.Timer); + return retval; + + case RIO_START_POLLER: + rio_dprintk(RIO_DEBUG_CTRL, "RIO_START_POLLER\n"); + return -EINVAL; + + case RIO_STOP_POLLER: + rio_dprintk(RIO_DEBUG_CTRL, "RIO_STOP_POLLER\n"); + if (!su) { + p->RIOError.Error = NOT_SUPER_USER; + return -EPERM; + } + p->RIOPolling = NOT_POLLING; + return retval; + + case RIO_SETDEBUG: + case RIO_GETDEBUG: + rio_dprintk(RIO_DEBUG_CTRL, "RIO_SETDEBUG/RIO_GETDEBUG\n"); + if (copyin((int) arg, (caddr_t) & DebugCtrl, sizeof(DebugCtrl)) + == COPYFAIL) { + p->RIOError.Error = COPYIN_FAILED; + return -EFAULT; + } + if (DebugCtrl.SysPort == NO_PORT) { + if (cmd == RIO_SETDEBUG) { + if (!su) { + p->RIOError.Error = NOT_SUPER_USER; + return -EPERM; } - if ( copyin((int)arg, (caddr_t)&p->RIOConf, sizeof(struct Conf) ) - ==COPYFAIL ) { - p->RIOError.Error = COPYIN_FAILED; - return -EFAULT; + p->rio_debug = DebugCtrl.Debug; + p->RIODebugWait = DebugCtrl.Wait; + rio_dprintk(RIO_DEBUG_CTRL, "Set global debug to 0x%x set wait to 0x%x\n", p->rio_debug, p->RIODebugWait); + } else { + rio_dprintk(RIO_DEBUG_CTRL, "Get global debug 0x%x wait 0x%x\n", p->rio_debug, p->RIODebugWait); + DebugCtrl.Debug = p->rio_debug; + DebugCtrl.Wait = p->RIODebugWait; + if (copyout((caddr_t) & DebugCtrl, (int) arg, sizeof(DebugCtrl)) == COPYFAIL) { + rio_dprintk(RIO_DEBUG_CTRL, "RIO_SET/GET DEBUG: bad port number %d\n", DebugCtrl.SysPort); + p->RIOError.Error = COPYOUT_FAILED; + return -EFAULT; } - /* - ** move a few value around - */ - for (Host=0; Host < p->RIONumHosts; Host++) - if ( (p->RIOHosts[Host].Flags & RUN_STATE) == RC_RUNNING ) - WWORD(p->RIOHosts[Host].ParmMapP->timer , - p->RIOConf.Timer); - return retval; - - case RIO_START_POLLER: - rio_dprintk (RIO_DEBUG_CTRL, "RIO_START_POLLER\n"); - return -EINVAL; + } + } else if (DebugCtrl.SysPort >= RIO_PORTS && DebugCtrl.SysPort != NO_PORT) { + rio_dprintk(RIO_DEBUG_CTRL, "RIO_SET/GET DEBUG: bad port number %d\n", DebugCtrl.SysPort); + p->RIOError.Error = PORT_NUMBER_OUT_OF_RANGE; + return -ENXIO; + } else if (cmd == RIO_SETDEBUG) { + if (!su) { + p->RIOError.Error = NOT_SUPER_USER; + return -EPERM; + } + rio_spin_lock_irqsave(&PortP->portSem, flags); + p->RIOPortp[DebugCtrl.SysPort]->Debug = DebugCtrl.Debug; + rio_spin_unlock_irqrestore(&PortP->portSem, flags); + rio_dprintk(RIO_DEBUG_CTRL, "RIO_SETDEBUG 0x%x\n", p->RIOPortp[DebugCtrl.SysPort]->Debug); + } else { + rio_dprintk(RIO_DEBUG_CTRL, "RIO_GETDEBUG 0x%x\n", p->RIOPortp[DebugCtrl.SysPort]->Debug); + DebugCtrl.Debug = p->RIOPortp[DebugCtrl.SysPort]->Debug; + if (copyout((caddr_t) & DebugCtrl, (int) arg, sizeof(DebugCtrl)) == COPYFAIL) { + rio_dprintk(RIO_DEBUG_CTRL, "RIO_GETDEBUG: Bad copy to user space\n"); + p->RIOError.Error = COPYOUT_FAILED; + return -EFAULT; + } + } + return retval; - case RIO_STOP_POLLER: - rio_dprintk (RIO_DEBUG_CTRL, "RIO_STOP_POLLER\n"); - if ( !su ) { - p->RIOError.Error = NOT_SUPER_USER; - return -EPERM; - } - p->RIOPolling = NOT_POLLING; - return retval; - - case RIO_SETDEBUG: - case RIO_GETDEBUG: - rio_dprintk (RIO_DEBUG_CTRL, "RIO_SETDEBUG/RIO_GETDEBUG\n"); - if ( copyin( (int)arg, (caddr_t)&DebugCtrl, sizeof(DebugCtrl) ) - ==COPYFAIL ) { - p->RIOError.Error = COPYIN_FAILED; - return -EFAULT; - } - if ( DebugCtrl.SysPort == NO_PORT ) { - if ( cmd == RIO_SETDEBUG ) { - if ( !su ) { - p->RIOError.Error = NOT_SUPER_USER; - return -EPERM; - } - p->rio_debug = DebugCtrl.Debug; - p->RIODebugWait = DebugCtrl.Wait; - rio_dprintk (RIO_DEBUG_CTRL, "Set global debug to 0x%x set wait to 0x%x\n", - p->rio_debug,p->RIODebugWait); - } - else { - rio_dprintk (RIO_DEBUG_CTRL, "Get global debug 0x%x wait 0x%x\n", - p->rio_debug,p->RIODebugWait); - DebugCtrl.Debug = p->rio_debug; - DebugCtrl.Wait = p->RIODebugWait; - if ( copyout((caddr_t)&DebugCtrl,(int)arg, - sizeof(DebugCtrl)) == COPYFAIL ) { - rio_dprintk (RIO_DEBUG_CTRL, "RIO_SET/GET DEBUG: bad port number %d\n", - DebugCtrl.SysPort); - p->RIOError.Error = COPYOUT_FAILED; - return -EFAULT; - } - } - } - else if ( DebugCtrl.SysPort >= RIO_PORTS && - DebugCtrl.SysPort != NO_PORT ) { - rio_dprintk (RIO_DEBUG_CTRL, "RIO_SET/GET DEBUG: bad port number %d\n", - DebugCtrl.SysPort); - p->RIOError.Error = PORT_NUMBER_OUT_OF_RANGE; - return -ENXIO; - } - else if ( cmd == RIO_SETDEBUG ) { - if ( !su ) { - p->RIOError.Error = NOT_SUPER_USER; - return -EPERM; - } - rio_spin_lock_irqsave(&PortP->portSem, flags); - p->RIOPortp[DebugCtrl.SysPort]->Debug = DebugCtrl.Debug; - rio_spin_unlock_irqrestore( &PortP->portSem , flags); - rio_dprintk (RIO_DEBUG_CTRL, "RIO_SETDEBUG 0x%x\n", - p->RIOPortp[DebugCtrl.SysPort]->Debug); - } - else { - rio_dprintk (RIO_DEBUG_CTRL, "RIO_GETDEBUG 0x%x\n", - p->RIOPortp[DebugCtrl.SysPort]->Debug); - DebugCtrl.Debug = p->RIOPortp[DebugCtrl.SysPort]->Debug; - if ( copyout((caddr_t)&DebugCtrl,(int)arg, - sizeof(DebugCtrl))==COPYFAIL ) { - rio_dprintk (RIO_DEBUG_CTRL, "RIO_GETDEBUG: Bad copy to user space\n"); - p->RIOError.Error = COPYOUT_FAILED; - return -EFAULT; - } - } - return retval; - - case RIO_VERSID: - /* - ** Enquire about the release and version. - ** We return MAX_VERSION_LEN bytes, being a - ** textual null terminated string. - */ - rio_dprintk (RIO_DEBUG_CTRL, "RIO_VERSID\n"); - if ( copyout( (caddr_t)RIOVersid(), - (int)arg, - sizeof(struct rioVersion) ) == COPYFAIL ) - { - rio_dprintk (RIO_DEBUG_CTRL, "RIO_VERSID: Bad copy to user space (host=%d)\n", Host); - p->RIOError.Error = COPYOUT_FAILED; - return -EFAULT; - } - return retval; + case RIO_VERSID: + /* + ** Enquire about the release and version. + ** We return MAX_VERSION_LEN bytes, being a + ** textual null terminated string. + */ + rio_dprintk(RIO_DEBUG_CTRL, "RIO_VERSID\n"); + if (copyout((caddr_t) RIOVersid(), (int) arg, sizeof(struct rioVersion)) == COPYFAIL) { + rio_dprintk(RIO_DEBUG_CTRL, "RIO_VERSID: Bad copy to user space (host=%d)\n", Host); + p->RIOError.Error = COPYOUT_FAILED; + return -EFAULT; + } + return retval; - /* - ** !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - ** !! commented out previous 'RIO_VERSID' functionality !! - ** !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - ** - case RIO_VERSID: - ** - ** Enquire about the release and version. - ** We return MAX_VERSION_LEN bytes, being a textual null - ** terminated string. - ** - rio_dprint(RIO_DEBUG_CTRL, ("RIO_VERSID\n")); - if (copyout((caddr_t)RIOVersid(), - (int)arg, MAX_VERSION_LEN ) == COPYFAIL ) { - rio_dprint(RIO_DEBUG_CTRL, ("RIO_VERSID: Bad copy to user space\n",Host)); - p->RIOError.Error = COPYOUT_FAILED; - return -EFAULT; - } - return retval; - ** - ** !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - */ - - case RIO_NUM_HOSTS: - /* - ** Enquire as to the number of hosts located - ** at init time. - */ - rio_dprintk (RIO_DEBUG_CTRL, "RIO_NUM_HOSTS\n"); - if (copyout((caddr_t)&p->RIONumHosts, (int)arg, - sizeof(p->RIONumHosts) )==COPYFAIL ) { - rio_dprintk (RIO_DEBUG_CTRL, "RIO_NUM_HOSTS: Bad copy to user space\n"); - p->RIOError.Error = COPYOUT_FAILED; - return -EFAULT; - } - return retval; - - case RIO_HOST_FOAD: - /* - ** Kill host. This may not be in the final version... - */ - rio_dprintk (RIO_DEBUG_CTRL, "RIO_HOST_FOAD %d\n", (int)arg); - if ( !su ) { - rio_dprintk (RIO_DEBUG_CTRL, "RIO_HOST_FOAD: Not super user\n"); - p->RIOError.Error = NOT_SUPER_USER; - return -EPERM; - } - p->RIOHalted = 1; - p->RIOSystemUp = 0; - - for ( Host=0; HostRIONumHosts; Host++ ) { - (void)RIOBoardTest( p->RIOHosts[Host].PaddrP, - p->RIOHosts[Host].Caddr, p->RIOHosts[Host].Type, - p->RIOHosts[Host].Slot ); - bzero( (caddr_t)&p->RIOHosts[Host].Flags, - ((int)&p->RIOHosts[Host].____end_marker____) - - ((int)&p->RIOHosts[Host].Flags) ); - p->RIOHosts[Host].Flags = RC_WAITING; + /* + ** !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + ** !! commented out previous 'RIO_VERSID' functionality !! + ** !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + ** + case RIO_VERSID: + ** + ** Enquire about the release and version. + ** We return MAX_VERSION_LEN bytes, being a textual null + ** terminated string. + ** + rio_dprint(RIO_DEBUG_CTRL, ("RIO_VERSID\n")); + if (copyout((caddr_t)RIOVersid(), + (int)arg, MAX_VERSION_LEN ) == COPYFAIL ) { + rio_dprint(RIO_DEBUG_CTRL, ("RIO_VERSID: Bad copy to user space\n",Host)); + p->RIOError.Error = COPYOUT_FAILED; + return -EFAULT; + } + return retval; + ** + ** !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + */ + + case RIO_NUM_HOSTS: + /* + ** Enquire as to the number of hosts located + ** at init time. + */ + rio_dprintk(RIO_DEBUG_CTRL, "RIO_NUM_HOSTS\n"); + if (copyout((caddr_t) & p->RIONumHosts, (int) arg, sizeof(p->RIONumHosts)) == COPYFAIL) { + rio_dprintk(RIO_DEBUG_CTRL, "RIO_NUM_HOSTS: Bad copy to user space\n"); + p->RIOError.Error = COPYOUT_FAILED; + return -EFAULT; + } + return retval; + + case RIO_HOST_FOAD: + /* + ** Kill host. This may not be in the final version... + */ + rio_dprintk(RIO_DEBUG_CTRL, "RIO_HOST_FOAD %d\n", (int) arg); + if (!su) { + rio_dprintk(RIO_DEBUG_CTRL, "RIO_HOST_FOAD: Not super user\n"); + p->RIOError.Error = NOT_SUPER_USER; + return -EPERM; + } + p->RIOHalted = 1; + p->RIOSystemUp = 0; + + for (Host = 0; Host < p->RIONumHosts; Host++) { + (void) RIOBoardTest(p->RIOHosts[Host].PaddrP, p->RIOHosts[Host].Caddr, p->RIOHosts[Host].Type, p->RIOHosts[Host].Slot); + bzero((caddr_t) & p->RIOHosts[Host].Flags, ((int) &p->RIOHosts[Host].____end_marker____) - ((int) &p->RIOHosts[Host].Flags)); + p->RIOHosts[Host].Flags = RC_WAITING; #if 0 - RIOSetupDataStructs(p); + RIOSetupDataStructs(p); #endif - } - RIOFoadWakeup(p); - p->RIONumBootPkts = 0; - p->RIOBooting = 0; + } + RIOFoadWakeup(p); + p->RIONumBootPkts = 0; + p->RIOBooting = 0; #ifdef RINGBUFFER_SUPPORT - for( loop=0; loopRIOPortp[loop]->TxRingBuffer ) - sysfree((void *)p->RIOPortp[loop]->TxRingBuffer, - RIOBufferSize ); + for (loop = 0; loop < RIO_PORTS; loop++) + if (p->RIOPortp[loop]->TxRingBuffer) + sysfree((void *) p->RIOPortp[loop]->TxRingBuffer, RIOBufferSize); #endif #if 0 - bzero((caddr_t)&p->RIOPortp[0],RIO_PORTS*sizeof(struct Port)); + bzero((caddr_t) & p->RIOPortp[0], RIO_PORTS * sizeof(struct Port)); #else - printk ("HEEEEELP!\n"); + printk("HEEEEELP!\n"); #endif - for( loop=0; loopRIOPortp[loop]->TtyP = &p->channel[loop]; + p->RIOPortp[loop]->TtyP = &p->channel[loop]; #endif - - spin_lock_init(&p->RIOPortp[loop]->portSem); - p->RIOPortp[loop]->InUse = NOT_INUSE; - } - - p->RIOSystemUp = 0; - return retval; - - case RIO_DOWNLOAD: - rio_dprintk (RIO_DEBUG_CTRL, "RIO_DOWNLOAD\n"); - if ( !su ) { - rio_dprintk (RIO_DEBUG_CTRL, "RIO_DOWNLOAD: Not super user\n"); - p->RIOError.Error = NOT_SUPER_USER; - return -EPERM; - } - if ( copyin((int)arg, (caddr_t)&DownLoad, - sizeof(DownLoad) )==COPYFAIL ) { - rio_dprintk (RIO_DEBUG_CTRL, "RIO_DOWNLOAD: Copy in from user space failed\n"); - p->RIOError.Error = COPYIN_FAILED; - return -EFAULT; - } - rio_dprintk (RIO_DEBUG_CTRL, "Copied in download code for product code 0x%x\n", - DownLoad.ProductCode); - - /* - ** It is important that the product code is an unsigned object! - */ - if ( DownLoad.ProductCode > MAX_PRODUCT ) { - rio_dprintk (RIO_DEBUG_CTRL, "RIO_DOWNLOAD: Bad product code %d passed\n", - DownLoad.ProductCode); - p->RIOError.Error = NO_SUCH_PRODUCT; - return -ENXIO; - } - /* - ** do something! - */ - retval = (*(RIOBootTable[DownLoad.ProductCode]))(p, &DownLoad); - /* <-- Panic */ - p->RIOHalted = 0; - /* - ** and go back, content with a job well completed. - */ - return retval; - - case RIO_PARMS: - { - uint host; - - if (copyin((int)arg, (caddr_t)&host, - sizeof(host) ) == COPYFAIL ) { - rio_dprintk (RIO_DEBUG_CTRL, - "RIO_HOST_REQ: Copy in from user space failed\n"); - p->RIOError.Error = COPYIN_FAILED; - return -EFAULT; - } - /* - ** Fetch the parmmap - */ - rio_dprintk (RIO_DEBUG_CTRL, "RIO_PARMS\n"); - if ( copyout( (caddr_t)p->RIOHosts[host].ParmMapP, - (int)arg, sizeof(PARM_MAP) )==COPYFAIL ) { - p->RIOError.Error = COPYOUT_FAILED; - rio_dprintk (RIO_DEBUG_CTRL, "RIO_PARMS: Copy out to user space failed\n"); - return -EFAULT; - } - } - return retval; - - case RIO_HOST_REQ: - rio_dprintk (RIO_DEBUG_CTRL, "RIO_HOST_REQ\n"); - if (copyin((int)arg, (caddr_t)&HostReq, - sizeof(HostReq) )==COPYFAIL ) { - rio_dprintk (RIO_DEBUG_CTRL, "RIO_HOST_REQ: Copy in from user space failed\n"); - p->RIOError.Error = COPYIN_FAILED; - return -EFAULT; - } - if ( HostReq.HostNum >= p->RIONumHosts ) { - p->RIOError.Error = HOST_NUMBER_OUT_OF_RANGE; - rio_dprintk (RIO_DEBUG_CTRL, "RIO_HOST_REQ: Illegal host number %d\n", - HostReq.HostNum); - return -ENXIO; - } - rio_dprintk (RIO_DEBUG_CTRL, "Request for host %d\n", HostReq.HostNum); - if (copyout((caddr_t)&p->RIOHosts[HostReq.HostNum], - (int)HostReq.HostP,sizeof(struct Host) ) == COPYFAIL) { - p->RIOError.Error = COPYOUT_FAILED; - rio_dprintk (RIO_DEBUG_CTRL, "RIO_HOST_REQ: Bad copy to user space\n"); - return -EFAULT; - } - return retval; - - case RIO_HOST_DPRAM: - rio_dprintk (RIO_DEBUG_CTRL, "Request for DPRAM\n"); - if ( copyin( (int)arg, (caddr_t)&HostDpRam, - sizeof(HostDpRam) )==COPYFAIL ) { - rio_dprintk (RIO_DEBUG_CTRL, "RIO_HOST_DPRAM: Copy in from user space failed\n"); - p->RIOError.Error = COPYIN_FAILED; - return -EFAULT; - } - if ( HostDpRam.HostNum >= p->RIONumHosts ) { - p->RIOError.Error = HOST_NUMBER_OUT_OF_RANGE; - rio_dprintk (RIO_DEBUG_CTRL, "RIO_HOST_DPRAM: Illegal host number %d\n", - HostDpRam.HostNum); - return -ENXIO; - } - rio_dprintk (RIO_DEBUG_CTRL, "Request for host %d\n", HostDpRam.HostNum); - - if (p->RIOHosts[HostDpRam.HostNum].Type == RIO_PCI) { - int off; - /* It's hardware like this that really gets on my tits. */ - static unsigned char copy[sizeof(struct DpRam)]; - for ( off=0; offRIOHosts[HostDpRam.HostNum].Caddr[off]; - if ( copyout( (caddr_t)copy, (int)HostDpRam.DpRamP, - sizeof(struct DpRam) ) == COPYFAIL ) { - p->RIOError.Error = COPYOUT_FAILED; - rio_dprintk (RIO_DEBUG_CTRL, "RIO_HOST_DPRAM: Bad copy to user space\n"); - return -EFAULT; - } - } - else if (copyout((caddr_t)p->RIOHosts[HostDpRam.HostNum].Caddr, - (int)HostDpRam.DpRamP, - sizeof(struct DpRam) ) == COPYFAIL ) { - p->RIOError.Error = COPYOUT_FAILED; - rio_dprintk (RIO_DEBUG_CTRL, "RIO_HOST_DPRAM: Bad copy to user space\n"); - return -EFAULT; - } - return retval; - - case RIO_SET_BUSY: - rio_dprintk (RIO_DEBUG_CTRL, "RIO_SET_BUSY\n"); - if ( (int)arg < 0 || (int)arg > 511 ) { - rio_dprintk (RIO_DEBUG_CTRL, "RIO_SET_BUSY: Bad port number %d\n",(int)arg); - p->RIOError.Error = PORT_NUMBER_OUT_OF_RANGE; - return -EINVAL; - } - rio_spin_lock_irqsave(&PortP->portSem, flags); - p->RIOPortp[(int)arg]->State |= RIO_BUSY; - rio_spin_unlock_irqrestore( &PortP->portSem , flags); - return retval; - - case RIO_HOST_PORT: - /* - ** The daemon want port information - ** (probably for debug reasons) - */ - rio_dprintk (RIO_DEBUG_CTRL, "RIO_HOST_PORT\n"); - if ( copyin((int)arg, (caddr_t)&PortReq, - sizeof(PortReq) )==COPYFAIL ) { - rio_dprintk (RIO_DEBUG_CTRL, "RIO_HOST_PORT: Copy in from user space failed\n"); - p->RIOError.Error = COPYIN_FAILED; - return -EFAULT; - } - - if (PortReq.SysPort >= RIO_PORTS) { /* SysPort is unsigned */ - rio_dprintk (RIO_DEBUG_CTRL, "RIO_HOST_PORT: Illegal port number %d\n", - PortReq.SysPort); - p->RIOError.Error = PORT_NUMBER_OUT_OF_RANGE; - return -ENXIO; - } - rio_dprintk (RIO_DEBUG_CTRL, "Request for port %d\n", PortReq.SysPort); - if (copyout((caddr_t)p->RIOPortp[PortReq.SysPort], - (int)PortReq.PortP, - sizeof(struct Port) ) == COPYFAIL) { - p->RIOError.Error = COPYOUT_FAILED; - rio_dprintk (RIO_DEBUG_CTRL, "RIO_HOST_PORT: Bad copy to user space\n"); - return -EFAULT; - } - return retval; - - case RIO_HOST_RUP: - /* - ** The daemon want rup information - ** (probably for debug reasons) - */ - rio_dprintk (RIO_DEBUG_CTRL, "RIO_HOST_RUP\n"); - if (copyin((int)arg, (caddr_t)&RupReq, - sizeof(RupReq) )==COPYFAIL ) { - rio_dprintk (RIO_DEBUG_CTRL, "RIO_HOST_RUP: Copy in from user space failed\n"); - p->RIOError.Error = COPYIN_FAILED; - return -EFAULT; - } - if (RupReq.HostNum >= p->RIONumHosts) { /* host is unsigned */ - rio_dprintk (RIO_DEBUG_CTRL, "RIO_HOST_RUP: Illegal host number %d\n", - RupReq.HostNum); - p->RIOError.Error = HOST_NUMBER_OUT_OF_RANGE; - return -ENXIO; - } - if ( RupReq.RupNum >= MAX_RUP+LINKS_PER_UNIT ) { /* eek! */ - rio_dprintk (RIO_DEBUG_CTRL, "RIO_HOST_RUP: Illegal rup number %d\n", - RupReq.RupNum); - p->RIOError.Error = RUP_NUMBER_OUT_OF_RANGE; - return -EINVAL; - } - HostP = &p->RIOHosts[RupReq.HostNum]; - - if ((HostP->Flags & RUN_STATE) != RC_RUNNING) { - rio_dprintk (RIO_DEBUG_CTRL, "RIO_HOST_RUP: Host %d not running\n", - RupReq.HostNum); - p->RIOError.Error = HOST_NOT_RUNNING; - return -EIO; - } - rio_dprintk (RIO_DEBUG_CTRL, "Request for rup %d from host %d\n", - RupReq.RupNum,RupReq.HostNum); - - if (copyout((caddr_t)HostP->UnixRups[RupReq.RupNum].RupP, - (int)RupReq.RupP,sizeof(struct RUP) ) == COPYFAIL) { - p->RIOError.Error = COPYOUT_FAILED; - rio_dprintk (RIO_DEBUG_CTRL, "RIO_HOST_RUP: Bad copy to user space\n"); - return -EFAULT; - } - return retval; - - case RIO_HOST_LPB: - /* - ** The daemon want lpb information - ** (probably for debug reasons) - */ - rio_dprintk (RIO_DEBUG_CTRL, "RIO_HOST_LPB\n"); - if (copyin((int)arg, (caddr_t)&LpbReq, - sizeof(LpbReq) )==COPYFAIL ) { - rio_dprintk (RIO_DEBUG_CTRL, "RIO_HOST_LPB: Bad copy from user space\n"); - p->RIOError.Error = COPYIN_FAILED; - return -EFAULT; - } - if (LpbReq.Host >= p->RIONumHosts) { /* host is unsigned */ - rio_dprintk (RIO_DEBUG_CTRL, "RIO_HOST_LPB: Illegal host number %d\n", - LpbReq.Host); - p->RIOError.Error = HOST_NUMBER_OUT_OF_RANGE; - return -ENXIO; - } - if ( LpbReq.Link >= LINKS_PER_UNIT ) { /* eek! */ - rio_dprintk (RIO_DEBUG_CTRL, "RIO_HOST_LPB: Illegal link number %d\n", - LpbReq.Link); - p->RIOError.Error = LINK_NUMBER_OUT_OF_RANGE; - return -EINVAL; - } - HostP = &p->RIOHosts[LpbReq.Host]; - - if ( (HostP->Flags & RUN_STATE) != RC_RUNNING ) { - rio_dprintk (RIO_DEBUG_CTRL, "RIO_HOST_LPB: Host %d not running\n", - LpbReq.Host ); - p->RIOError.Error = HOST_NOT_RUNNING; - return -EIO; - } - rio_dprintk (RIO_DEBUG_CTRL, "Request for lpb %d from host %d\n", - LpbReq.Link, LpbReq.Host); - - if (copyout((caddr_t)&HostP->LinkStrP[LpbReq.Link], - (int)LpbReq.LpbP,sizeof(struct LPB) ) == COPYFAIL) { - rio_dprintk (RIO_DEBUG_CTRL, "RIO_HOST_LPB: Bad copy to user space\n"); - p->RIOError.Error = COPYOUT_FAILED; - return -EFAULT; - } - return retval; - - /* - ** Here 3 IOCTL's that allow us to change the way in which - ** rio logs errors. send them just to syslog or send them - ** to both syslog and console or send them to just the console. - ** - ** See RioStrBuf() in util.c for the other half. - */ - case RIO_SYSLOG_ONLY: - p->RIOPrintLogState = PRINT_TO_LOG; /* Just syslog */ - return 0; - - case RIO_SYSLOG_CONS: - p->RIOPrintLogState = PRINT_TO_LOG_CONS;/* syslog and console */ - return 0; - - case RIO_CONS_ONLY: - p->RIOPrintLogState = PRINT_TO_CONS; /* Just console */ - return 0; - - case RIO_SIGNALS_ON: - if ( p->RIOSignalProcess ) { - p->RIOError.Error = SIGNALS_ALREADY_SET; - return -EBUSY; - } - p->RIOSignalProcess = getpid(); - p->RIOPrintDisabled = DONT_PRINT; - return retval; - - case RIO_SIGNALS_OFF: - if ( p->RIOSignalProcess != getpid() ) { - p->RIOError.Error = NOT_RECEIVING_PROCESS; - return -EPERM; - } - rio_dprintk (RIO_DEBUG_CTRL, "Clear signal process to zero\n"); - p->RIOSignalProcess = 0; - return retval; - - case RIO_SET_BYTE_MODE: - for ( Host=0; HostRIONumHosts; Host++ ) - if ( p->RIOHosts[Host].Type == RIO_AT ) - p->RIOHosts[Host].Mode &= ~WORD_OPERATION; - return retval; - - case RIO_SET_WORD_MODE: - for ( Host=0; HostRIONumHosts; Host++ ) - if ( p->RIOHosts[Host].Type == RIO_AT ) - p->RIOHosts[Host].Mode |= WORD_OPERATION; - return retval; - - case RIO_SET_FAST_BUS: - for ( Host=0; HostRIONumHosts; Host++ ) - if ( p->RIOHosts[Host].Type == RIO_AT ) - p->RIOHosts[Host].Mode |= FAST_AT_BUS; - return retval; - - case RIO_SET_SLOW_BUS: - for ( Host=0; HostRIONumHosts; Host++ ) - if ( p->RIOHosts[Host].Type == RIO_AT ) - p->RIOHosts[Host].Mode &= ~FAST_AT_BUS; - return retval; - - case RIO_MAP_B50_TO_50: - case RIO_MAP_B50_TO_57600: - case RIO_MAP_B110_TO_110: - case RIO_MAP_B110_TO_115200: - rio_dprintk (RIO_DEBUG_CTRL, "Baud rate mapping\n"); - port = (uint) arg; - if ( port < 0 || port > 511 ) { - rio_dprintk (RIO_DEBUG_CTRL, "Baud rate mapping: Bad port number %d\n", port); - p->RIOError.Error = PORT_NUMBER_OUT_OF_RANGE; - return -EINVAL; - } - rio_spin_lock_irqsave(&PortP->portSem, flags); - switch( cmd ) - { - case RIO_MAP_B50_TO_50 : - p->RIOPortp[port]->Config |= RIO_MAP_50_TO_50; - break; - case RIO_MAP_B50_TO_57600 : - p->RIOPortp[port]->Config &= ~RIO_MAP_50_TO_50; - break; - case RIO_MAP_B110_TO_110 : - p->RIOPortp[port]->Config |= RIO_MAP_110_TO_110; - break; - case RIO_MAP_B110_TO_115200 : - p->RIOPortp[port]->Config &= ~RIO_MAP_110_TO_110; - break; - } - rio_spin_unlock_irqrestore( &PortP->portSem , flags); - return retval; - - case RIO_STREAM_INFO: - rio_dprintk (RIO_DEBUG_CTRL, "RIO_STREAM_INFO\n"); - return -EINVAL; + spin_lock_init(&p->RIOPortp[loop]->portSem); + p->RIOPortp[loop]->InUse = NOT_INUSE; + } + + p->RIOSystemUp = 0; + return retval; + + case RIO_DOWNLOAD: + rio_dprintk(RIO_DEBUG_CTRL, "RIO_DOWNLOAD\n"); + if (!su) { + rio_dprintk(RIO_DEBUG_CTRL, "RIO_DOWNLOAD: Not super user\n"); + p->RIOError.Error = NOT_SUPER_USER; + return -EPERM; + } + if (copyin((int) arg, (caddr_t) & DownLoad, sizeof(DownLoad)) == COPYFAIL) { + rio_dprintk(RIO_DEBUG_CTRL, "RIO_DOWNLOAD: Copy in from user space failed\n"); + p->RIOError.Error = COPYIN_FAILED; + return -EFAULT; + } + rio_dprintk(RIO_DEBUG_CTRL, "Copied in download code for product code 0x%x\n", DownLoad.ProductCode); - case RIO_SEND_PACKET: - rio_dprintk (RIO_DEBUG_CTRL, "RIO_SEND_PACKET\n"); - if ( copyin( (int)arg, (caddr_t)&SendPack, - sizeof(SendPack) )==COPYFAIL ) { - rio_dprintk (RIO_DEBUG_CTRL, "RIO_SEND_PACKET: Bad copy from user space\n"); - p->RIOError.Error = COPYIN_FAILED; - return -EFAULT; - } - if ( SendPack.PortNum >= 128 ) { - p->RIOError.Error = PORT_NUMBER_OUT_OF_RANGE; - return -ENXIO; - } - - PortP = p->RIOPortp[SendPack.PortNum]; - rio_spin_lock_irqsave(&PortP->portSem, flags); - - if ( !can_add_transmit(&PacketP,PortP) ) { - p->RIOError.Error = UNIT_IS_IN_USE; - rio_spin_unlock_irqrestore( &PortP->portSem , flags); - return -ENOSPC; - } - - for ( loop=0; loop<(ushort)(SendPack.Len & 127); loop++ ) - WBYTE(PacketP->data[loop], SendPack.Data[loop] ); - - WBYTE(PacketP->len, SendPack.Len); - - add_transmit( PortP ); - /* - ** Count characters transmitted for port statistics reporting - */ - if (PortP->statsGather) - PortP->txchars += (SendPack.Len & 127); - rio_spin_unlock_irqrestore( &PortP->portSem , flags); - return retval; - - case RIO_NO_MESG: - if ( su ) - p->RIONoMessage = 1; - return su ? 0 : -EPERM; - - case RIO_MESG: - if ( su ) - p->RIONoMessage = 0; - return su ? 0 : -EPERM; - - case RIO_WHAT_MESG: - if ( copyout( (caddr_t)&p->RIONoMessage, (int)arg, - sizeof(p->RIONoMessage) )==COPYFAIL ) { - rio_dprintk (RIO_DEBUG_CTRL, "RIO_WHAT_MESG: Bad copy to user space\n"); - p->RIOError.Error = COPYOUT_FAILED; - return -EFAULT; - } - return 0; - - case RIO_MEM_DUMP : - if (copyin((int)arg, (caddr_t)&SubCmd, - sizeof(struct SubCmdStruct)) == COPYFAIL) { - p->RIOError.Error = COPYIN_FAILED; - return -EFAULT; - } - rio_dprintk (RIO_DEBUG_CTRL, "RIO_MEM_DUMP host %d rup %d addr %x\n", - SubCmd.Host, SubCmd.Rup, SubCmd.Addr); - - if (SubCmd.Rup >= MAX_RUP+LINKS_PER_UNIT ) { - p->RIOError.Error = RUP_NUMBER_OUT_OF_RANGE; - return -EINVAL; - } - - if (SubCmd.Host >= p->RIONumHosts ) { - p->RIOError.Error = HOST_NUMBER_OUT_OF_RANGE; - return -EINVAL; - } - - port = p->RIOHosts[SubCmd.Host]. - UnixRups[SubCmd.Rup].BaseSysPort; - - PortP = p->RIOPortp[port]; - - rio_spin_lock_irqsave(&PortP->portSem, flags); - - if ( RIOPreemptiveCmd(p, PortP, MEMDUMP ) == RIO_FAIL ) { - rio_dprintk (RIO_DEBUG_CTRL, "RIO_MEM_DUMP failed\n"); - rio_spin_unlock_irqrestore( &PortP->portSem , flags); - return -EBUSY; - } - else - PortP->State |= RIO_BUSY; - - rio_spin_unlock_irqrestore( &PortP->portSem , flags); - if ( copyout( (caddr_t)p->RIOMemDump, (int)arg, - MEMDUMP_SIZE) == COPYFAIL ) { - rio_dprintk (RIO_DEBUG_CTRL, "RIO_MEM_DUMP copy failed\n"); - p->RIOError.Error = COPYOUT_FAILED; - return -EFAULT; - } - return 0; - - case RIO_TICK: - if ((int)arg < 0 || (int)arg >= p->RIONumHosts) - return -EINVAL; - rio_dprintk (RIO_DEBUG_CTRL, "Set interrupt for host %d\n", (int)arg); - WBYTE(p->RIOHosts[(int)arg].SetInt , 0xff); - return 0; - - case RIO_TOCK: - if ((int)arg < 0 || (int)arg >= p->RIONumHosts) - return -EINVAL; - rio_dprintk (RIO_DEBUG_CTRL, "Clear interrupt for host %d\n", (int)arg); - WBYTE((p->RIOHosts[(int)arg].ResetInt) , 0xff); - return 0; - - case RIO_READ_CHECK: - /* Check reads for pkts with data[0] the same */ - p->RIOReadCheck = !p->RIOReadCheck; - if (copyout((caddr_t)&p->RIOReadCheck,(int)arg, - sizeof(uint))== COPYFAIL) { - p->RIOError.Error = COPYOUT_FAILED; - return -EFAULT; - } - return 0; - - case RIO_READ_REGISTER : - if (copyin((int)arg, (caddr_t)&SubCmd, - sizeof(struct SubCmdStruct)) == COPYFAIL) { - p->RIOError.Error = COPYIN_FAILED; - return -EFAULT; - } - rio_dprintk (RIO_DEBUG_CTRL, "RIO_READ_REGISTER host %d rup %d port %d reg %x\n", - SubCmd.Host, SubCmd.Rup, SubCmd.Port, SubCmd.Addr); - - if (SubCmd.Port > 511) { - rio_dprintk (RIO_DEBUG_CTRL, "Baud rate mapping: Bad port number %d\n", - SubCmd.Port); - p->RIOError.Error = PORT_NUMBER_OUT_OF_RANGE; - return -EINVAL; - } - - if (SubCmd.Rup >= MAX_RUP+LINKS_PER_UNIT ) { - p->RIOError.Error = RUP_NUMBER_OUT_OF_RANGE; - return -EINVAL; - } - - if (SubCmd.Host >= p->RIONumHosts ) { - p->RIOError.Error = HOST_NUMBER_OUT_OF_RANGE; - return -EINVAL; - } - - port = p->RIOHosts[SubCmd.Host]. - UnixRups[SubCmd.Rup].BaseSysPort + SubCmd.Port; - PortP = p->RIOPortp[port]; - - rio_spin_lock_irqsave(&PortP->portSem, flags); - - if (RIOPreemptiveCmd(p, PortP, READ_REGISTER) == RIO_FAIL) { - rio_dprintk (RIO_DEBUG_CTRL, "RIO_READ_REGISTER failed\n"); - rio_spin_unlock_irqrestore( &PortP->portSem , flags); - return -EBUSY; - } - else - PortP->State |= RIO_BUSY; - - rio_spin_unlock_irqrestore( &PortP->portSem , flags); - if (copyout((caddr_t)&p->CdRegister, (int)arg, - sizeof(uint)) == COPYFAIL ) { - rio_dprintk (RIO_DEBUG_CTRL, "RIO_READ_REGISTER copy failed\n"); - p->RIOError.Error = COPYOUT_FAILED; - return -EFAULT; - } - return 0; - /* - ** rio_make_dev: given port number (0-511) ORed with port type - ** (RIO_DEV_DIRECT, RIO_DEV_MODEM, RIO_DEV_XPRINT) return dev_t - ** value to pass to mknod to create the correct device node. - */ - case RIO_MAKE_DEV: - { - uint port = (uint)arg & RIO_MODEM_MASK; - - switch ( (uint)arg & RIO_DEV_MASK ) { - case RIO_DEV_DIRECT: - arg = (caddr_t)drv_makedev(MAJOR(dev), port); - rio_dprintk (RIO_DEBUG_CTRL, "Makedev direct 0x%x is 0x%x\n",port, (int)arg); - return (int)arg; - case RIO_DEV_MODEM: - arg = (caddr_t)drv_makedev(MAJOR(dev), (port|RIO_MODEM_BIT) ); - rio_dprintk (RIO_DEBUG_CTRL, "Makedev modem 0x%x is 0x%x\n",port, (int)arg); - return (int)arg; - case RIO_DEV_XPRINT: - arg = (caddr_t)drv_makedev(MAJOR(dev), port); - rio_dprintk (RIO_DEBUG_CTRL, "Makedev printer 0x%x is 0x%x\n",port, (int)arg); - return (int)arg; - } - rio_dprintk (RIO_DEBUG_CTRL, "MAKE Device is called\n"); - return -EINVAL; - } - /* - ** rio_minor: given a dev_t from a stat() call, return - ** the port number (0-511) ORed with the port type - ** ( RIO_DEV_DIRECT, RIO_DEV_MODEM, RIO_DEV_XPRINT ) - */ - case RIO_MINOR: - { - dev_t dv; - int mino; - - dv = (dev_t)((int)arg); - mino = RIO_UNMODEM(dv); + /* + ** It is important that the product code is an unsigned object! + */ + if (DownLoad.ProductCode > MAX_PRODUCT) { + rio_dprintk(RIO_DEBUG_CTRL, "RIO_DOWNLOAD: Bad product code %d passed\n", DownLoad.ProductCode); + p->RIOError.Error = NO_SUCH_PRODUCT; + return -ENXIO; + } + /* + ** do something! + */ + retval = (*(RIOBootTable[DownLoad.ProductCode])) (p, &DownLoad); + /* <-- Panic */ + p->RIOHalted = 0; + /* + ** and go back, content with a job well completed. + */ + return retval; + + case RIO_PARMS: + { + uint host; + + if (copyin((int) arg, (caddr_t) & host, sizeof(host)) == COPYFAIL) { + rio_dprintk(RIO_DEBUG_CTRL, "RIO_HOST_REQ: Copy in from user space failed\n"); + p->RIOError.Error = COPYIN_FAILED; + return -EFAULT; + } + /* + ** Fetch the parmmap + */ + rio_dprintk(RIO_DEBUG_CTRL, "RIO_PARMS\n"); + if (copyout((caddr_t) p->RIOHosts[host].ParmMapP, (int) arg, sizeof(PARM_MAP)) == COPYFAIL) { + p->RIOError.Error = COPYOUT_FAILED; + rio_dprintk(RIO_DEBUG_CTRL, "RIO_PARMS: Copy out to user space failed\n"); + return -EFAULT; + } + } + return retval; + + case RIO_HOST_REQ: + rio_dprintk(RIO_DEBUG_CTRL, "RIO_HOST_REQ\n"); + if (copyin((int) arg, (caddr_t) & HostReq, sizeof(HostReq)) == COPYFAIL) { + rio_dprintk(RIO_DEBUG_CTRL, "RIO_HOST_REQ: Copy in from user space failed\n"); + p->RIOError.Error = COPYIN_FAILED; + return -EFAULT; + } + if (HostReq.HostNum >= p->RIONumHosts) { + p->RIOError.Error = HOST_NUMBER_OUT_OF_RANGE; + rio_dprintk(RIO_DEBUG_CTRL, "RIO_HOST_REQ: Illegal host number %d\n", HostReq.HostNum); + return -ENXIO; + } + rio_dprintk(RIO_DEBUG_CTRL, "Request for host %d\n", HostReq.HostNum); + + if (copyout((caddr_t) & p->RIOHosts[HostReq.HostNum], (int) HostReq.HostP, sizeof(struct Host)) == COPYFAIL) { + p->RIOError.Error = COPYOUT_FAILED; + rio_dprintk(RIO_DEBUG_CTRL, "RIO_HOST_REQ: Bad copy to user space\n"); + return -EFAULT; + } + return retval; + + case RIO_HOST_DPRAM: + rio_dprintk(RIO_DEBUG_CTRL, "Request for DPRAM\n"); + if (copyin((int) arg, (caddr_t) & HostDpRam, sizeof(HostDpRam)) == COPYFAIL) { + rio_dprintk(RIO_DEBUG_CTRL, "RIO_HOST_DPRAM: Copy in from user space failed\n"); + p->RIOError.Error = COPYIN_FAILED; + return -EFAULT; + } + if (HostDpRam.HostNum >= p->RIONumHosts) { + p->RIOError.Error = HOST_NUMBER_OUT_OF_RANGE; + rio_dprintk(RIO_DEBUG_CTRL, "RIO_HOST_DPRAM: Illegal host number %d\n", HostDpRam.HostNum); + return -ENXIO; + } + rio_dprintk(RIO_DEBUG_CTRL, "Request for host %d\n", HostDpRam.HostNum); + + if (p->RIOHosts[HostDpRam.HostNum].Type == RIO_PCI) { + int off; + /* It's hardware like this that really gets on my tits. */ + static unsigned char copy[sizeof(struct DpRam)]; + for (off = 0; off < sizeof(struct DpRam); off++) + copy[off] = p->RIOHosts[HostDpRam.HostNum].Caddr[off]; + if (copyout((caddr_t) copy, (int) HostDpRam.DpRamP, sizeof(struct DpRam)) == COPYFAIL) { + p->RIOError.Error = COPYOUT_FAILED; + rio_dprintk(RIO_DEBUG_CTRL, "RIO_HOST_DPRAM: Bad copy to user space\n"); + return -EFAULT; + } + } else if (copyout((caddr_t) p->RIOHosts[HostDpRam.HostNum].Caddr, (int) HostDpRam.DpRamP, sizeof(struct DpRam)) == COPYFAIL) { + p->RIOError.Error = COPYOUT_FAILED; + rio_dprintk(RIO_DEBUG_CTRL, "RIO_HOST_DPRAM: Bad copy to user space\n"); + return -EFAULT; + } + return retval; + + case RIO_SET_BUSY: + rio_dprintk(RIO_DEBUG_CTRL, "RIO_SET_BUSY\n"); + if ((int) arg < 0 || (int) arg > 511) { + rio_dprintk(RIO_DEBUG_CTRL, "RIO_SET_BUSY: Bad port number %d\n", (int) arg); + p->RIOError.Error = PORT_NUMBER_OUT_OF_RANGE; + return -EINVAL; + } + rio_spin_lock_irqsave(&PortP->portSem, flags); + p->RIOPortp[(int) arg]->State |= RIO_BUSY; + rio_spin_unlock_irqrestore(&PortP->portSem, flags); + return retval; + + case RIO_HOST_PORT: + /* + ** The daemon want port information + ** (probably for debug reasons) + */ + rio_dprintk(RIO_DEBUG_CTRL, "RIO_HOST_PORT\n"); + if (copyin((int) arg, (caddr_t) & PortReq, sizeof(PortReq)) == COPYFAIL) { + rio_dprintk(RIO_DEBUG_CTRL, "RIO_HOST_PORT: Copy in from user space failed\n"); + p->RIOError.Error = COPYIN_FAILED; + return -EFAULT; + } + + if (PortReq.SysPort >= RIO_PORTS) { /* SysPort is unsigned */ + rio_dprintk(RIO_DEBUG_CTRL, "RIO_HOST_PORT: Illegal port number %d\n", PortReq.SysPort); + p->RIOError.Error = PORT_NUMBER_OUT_OF_RANGE; + return -ENXIO; + } + rio_dprintk(RIO_DEBUG_CTRL, "Request for port %d\n", PortReq.SysPort); + if (copyout((caddr_t) p->RIOPortp[PortReq.SysPort], (int) PortReq.PortP, sizeof(struct Port)) == COPYFAIL) { + p->RIOError.Error = COPYOUT_FAILED; + rio_dprintk(RIO_DEBUG_CTRL, "RIO_HOST_PORT: Bad copy to user space\n"); + return -EFAULT; + } + return retval; + + case RIO_HOST_RUP: + /* + ** The daemon want rup information + ** (probably for debug reasons) + */ + rio_dprintk(RIO_DEBUG_CTRL, "RIO_HOST_RUP\n"); + if (copyin((int) arg, (caddr_t) & RupReq, sizeof(RupReq)) == COPYFAIL) { + rio_dprintk(RIO_DEBUG_CTRL, "RIO_HOST_RUP: Copy in from user space failed\n"); + p->RIOError.Error = COPYIN_FAILED; + return -EFAULT; + } + if (RupReq.HostNum >= p->RIONumHosts) { /* host is unsigned */ + rio_dprintk(RIO_DEBUG_CTRL, "RIO_HOST_RUP: Illegal host number %d\n", RupReq.HostNum); + p->RIOError.Error = HOST_NUMBER_OUT_OF_RANGE; + return -ENXIO; + } + if (RupReq.RupNum >= MAX_RUP + LINKS_PER_UNIT) { /* eek! */ + rio_dprintk(RIO_DEBUG_CTRL, "RIO_HOST_RUP: Illegal rup number %d\n", RupReq.RupNum); + p->RIOError.Error = RUP_NUMBER_OUT_OF_RANGE; + return -EINVAL; + } + HostP = &p->RIOHosts[RupReq.HostNum]; + + if ((HostP->Flags & RUN_STATE) != RC_RUNNING) { + rio_dprintk(RIO_DEBUG_CTRL, "RIO_HOST_RUP: Host %d not running\n", RupReq.HostNum); + p->RIOError.Error = HOST_NOT_RUNNING; + return -EIO; + } + rio_dprintk(RIO_DEBUG_CTRL, "Request for rup %d from host %d\n", RupReq.RupNum, RupReq.HostNum); + + if (copyout((caddr_t) HostP->UnixRups[RupReq.RupNum].RupP, (int) RupReq.RupP, sizeof(struct RUP)) == COPYFAIL) { + p->RIOError.Error = COPYOUT_FAILED; + rio_dprintk(RIO_DEBUG_CTRL, "RIO_HOST_RUP: Bad copy to user space\n"); + return -EFAULT; + } + return retval; + + case RIO_HOST_LPB: + /* + ** The daemon want lpb information + ** (probably for debug reasons) + */ + rio_dprintk(RIO_DEBUG_CTRL, "RIO_HOST_LPB\n"); + if (copyin((int) arg, (caddr_t) & LpbReq, sizeof(LpbReq)) == COPYFAIL) { + rio_dprintk(RIO_DEBUG_CTRL, "RIO_HOST_LPB: Bad copy from user space\n"); + p->RIOError.Error = COPYIN_FAILED; + return -EFAULT; + } + if (LpbReq.Host >= p->RIONumHosts) { /* host is unsigned */ + rio_dprintk(RIO_DEBUG_CTRL, "RIO_HOST_LPB: Illegal host number %d\n", LpbReq.Host); + p->RIOError.Error = HOST_NUMBER_OUT_OF_RANGE; + return -ENXIO; + } + if (LpbReq.Link >= LINKS_PER_UNIT) { /* eek! */ + rio_dprintk(RIO_DEBUG_CTRL, "RIO_HOST_LPB: Illegal link number %d\n", LpbReq.Link); + p->RIOError.Error = LINK_NUMBER_OUT_OF_RANGE; + return -EINVAL; + } + HostP = &p->RIOHosts[LpbReq.Host]; + + if ((HostP->Flags & RUN_STATE) != RC_RUNNING) { + rio_dprintk(RIO_DEBUG_CTRL, "RIO_HOST_LPB: Host %d not running\n", LpbReq.Host); + p->RIOError.Error = HOST_NOT_RUNNING; + return -EIO; + } + rio_dprintk(RIO_DEBUG_CTRL, "Request for lpb %d from host %d\n", LpbReq.Link, LpbReq.Host); + + if (copyout((caddr_t) & HostP->LinkStrP[LpbReq.Link], (int) LpbReq.LpbP, sizeof(struct LPB)) == COPYFAIL) { + rio_dprintk(RIO_DEBUG_CTRL, "RIO_HOST_LPB: Bad copy to user space\n"); + p->RIOError.Error = COPYOUT_FAILED; + return -EFAULT; + } + return retval; - if ( RIO_ISMODEM(dv) ) { - rio_dprintk (RIO_DEBUG_CTRL, "Minor for device 0x%x: modem %d\n", dv, mino); - arg = (caddr_t)(mino | RIO_DEV_MODEM); - } - else { - rio_dprintk (RIO_DEBUG_CTRL, "Minor for device 0x%x: direct %d\n", dv, mino); - arg = (caddr_t)(mino | RIO_DEV_DIRECT); - } - return (int)arg; - } + /* + ** Here 3 IOCTL's that allow us to change the way in which + ** rio logs errors. send them just to syslog or send them + ** to both syslog and console or send them to just the console. + ** + ** See RioStrBuf() in util.c for the other half. + */ + case RIO_SYSLOG_ONLY: + p->RIOPrintLogState = PRINT_TO_LOG; /* Just syslog */ + return 0; + + case RIO_SYSLOG_CONS: + p->RIOPrintLogState = PRINT_TO_LOG_CONS; /* syslog and console */ + return 0; + + case RIO_CONS_ONLY: + p->RIOPrintLogState = PRINT_TO_CONS; /* Just console */ + return 0; + + case RIO_SIGNALS_ON: + if (p->RIOSignalProcess) { + p->RIOError.Error = SIGNALS_ALREADY_SET; + return -EBUSY; + } + p->RIOSignalProcess = getpid(); + p->RIOPrintDisabled = DONT_PRINT; + return retval; + + case RIO_SIGNALS_OFF: + if (p->RIOSignalProcess != getpid()) { + p->RIOError.Error = NOT_RECEIVING_PROCESS; + return -EPERM; + } + rio_dprintk(RIO_DEBUG_CTRL, "Clear signal process to zero\n"); + p->RIOSignalProcess = 0; + return retval; + + case RIO_SET_BYTE_MODE: + for (Host = 0; Host < p->RIONumHosts; Host++) + if (p->RIOHosts[Host].Type == RIO_AT) + p->RIOHosts[Host].Mode &= ~WORD_OPERATION; + return retval; + + case RIO_SET_WORD_MODE: + for (Host = 0; Host < p->RIONumHosts; Host++) + if (p->RIOHosts[Host].Type == RIO_AT) + p->RIOHosts[Host].Mode |= WORD_OPERATION; + return retval; + + case RIO_SET_FAST_BUS: + for (Host = 0; Host < p->RIONumHosts; Host++) + if (p->RIOHosts[Host].Type == RIO_AT) + p->RIOHosts[Host].Mode |= FAST_AT_BUS; + return retval; + + case RIO_SET_SLOW_BUS: + for (Host = 0; Host < p->RIONumHosts; Host++) + if (p->RIOHosts[Host].Type == RIO_AT) + p->RIOHosts[Host].Mode &= ~FAST_AT_BUS; + return retval; + + case RIO_MAP_B50_TO_50: + case RIO_MAP_B50_TO_57600: + case RIO_MAP_B110_TO_110: + case RIO_MAP_B110_TO_115200: + rio_dprintk(RIO_DEBUG_CTRL, "Baud rate mapping\n"); + port = (uint) arg; + if (port < 0 || port > 511) { + rio_dprintk(RIO_DEBUG_CTRL, "Baud rate mapping: Bad port number %d\n", port); + p->RIOError.Error = PORT_NUMBER_OUT_OF_RANGE; + return -EINVAL; + } + rio_spin_lock_irqsave(&PortP->portSem, flags); + switch (cmd) { + case RIO_MAP_B50_TO_50: + p->RIOPortp[port]->Config |= RIO_MAP_50_TO_50; + break; + case RIO_MAP_B50_TO_57600: + p->RIOPortp[port]->Config &= ~RIO_MAP_50_TO_50; + break; + case RIO_MAP_B110_TO_110: + p->RIOPortp[port]->Config |= RIO_MAP_110_TO_110; + break; + case RIO_MAP_B110_TO_115200: + p->RIOPortp[port]->Config &= ~RIO_MAP_110_TO_110; + break; + } + rio_spin_unlock_irqrestore(&PortP->portSem, flags); + return retval; + + case RIO_STREAM_INFO: + rio_dprintk(RIO_DEBUG_CTRL, "RIO_STREAM_INFO\n"); + return -EINVAL; + + case RIO_SEND_PACKET: + rio_dprintk(RIO_DEBUG_CTRL, "RIO_SEND_PACKET\n"); + if (copyin((int) arg, (caddr_t) & SendPack, sizeof(SendPack)) == COPYFAIL) { + rio_dprintk(RIO_DEBUG_CTRL, "RIO_SEND_PACKET: Bad copy from user space\n"); + p->RIOError.Error = COPYIN_FAILED; + return -EFAULT; + } + if (SendPack.PortNum >= 128) { + p->RIOError.Error = PORT_NUMBER_OUT_OF_RANGE; + return -ENXIO; + } + + PortP = p->RIOPortp[SendPack.PortNum]; + rio_spin_lock_irqsave(&PortP->portSem, flags); + + if (!can_add_transmit(&PacketP, PortP)) { + p->RIOError.Error = UNIT_IS_IN_USE; + rio_spin_unlock_irqrestore(&PortP->portSem, flags); + return -ENOSPC; + } + + for (loop = 0; loop < (ushort) (SendPack.Len & 127); loop++) + WBYTE(PacketP->data[loop], SendPack.Data[loop]); + + WBYTE(PacketP->len, SendPack.Len); + + add_transmit(PortP); + /* + ** Count characters transmitted for port statistics reporting + */ + if (PortP->statsGather) + PortP->txchars += (SendPack.Len & 127); + rio_spin_unlock_irqrestore(&PortP->portSem, flags); + return retval; + + case RIO_NO_MESG: + if (su) + p->RIONoMessage = 1; + return su ? 0 : -EPERM; + + case RIO_MESG: + if (su) + p->RIONoMessage = 0; + return su ? 0 : -EPERM; + + case RIO_WHAT_MESG: + if (copyout((caddr_t) & p->RIONoMessage, (int) arg, sizeof(p->RIONoMessage)) == COPYFAIL) { + rio_dprintk(RIO_DEBUG_CTRL, "RIO_WHAT_MESG: Bad copy to user space\n"); + p->RIOError.Error = COPYOUT_FAILED; + return -EFAULT; + } + return 0; + + case RIO_MEM_DUMP: + if (copyin((int) arg, (caddr_t) & SubCmd, sizeof(struct SubCmdStruct)) == COPYFAIL) { + p->RIOError.Error = COPYIN_FAILED; + return -EFAULT; + } + rio_dprintk(RIO_DEBUG_CTRL, "RIO_MEM_DUMP host %d rup %d addr %x\n", SubCmd.Host, SubCmd.Rup, SubCmd.Addr); + + if (SubCmd.Rup >= MAX_RUP + LINKS_PER_UNIT) { + p->RIOError.Error = RUP_NUMBER_OUT_OF_RANGE; + return -EINVAL; + } + + if (SubCmd.Host >= p->RIONumHosts) { + p->RIOError.Error = HOST_NUMBER_OUT_OF_RANGE; + return -EINVAL; + } + + port = p->RIOHosts[SubCmd.Host].UnixRups[SubCmd.Rup].BaseSysPort; + + PortP = p->RIOPortp[port]; + + rio_spin_lock_irqsave(&PortP->portSem, flags); + + if (RIOPreemptiveCmd(p, PortP, MEMDUMP) == RIO_FAIL) { + rio_dprintk(RIO_DEBUG_CTRL, "RIO_MEM_DUMP failed\n"); + rio_spin_unlock_irqrestore(&PortP->portSem, flags); + return -EBUSY; + } else + PortP->State |= RIO_BUSY; + + rio_spin_unlock_irqrestore(&PortP->portSem, flags); + if (copyout((caddr_t) p->RIOMemDump, (int) arg, MEMDUMP_SIZE) == COPYFAIL) { + rio_dprintk(RIO_DEBUG_CTRL, "RIO_MEM_DUMP copy failed\n"); + p->RIOError.Error = COPYOUT_FAILED; + return -EFAULT; + } + return 0; + + case RIO_TICK: + if ((int) arg < 0 || (int) arg >= p->RIONumHosts) + return -EINVAL; + rio_dprintk(RIO_DEBUG_CTRL, "Set interrupt for host %d\n", (int) arg); + WBYTE(p->RIOHosts[(int) arg].SetInt, 0xff); + return 0; + + case RIO_TOCK: + if ((int) arg < 0 || (int) arg >= p->RIONumHosts) + return -EINVAL; + rio_dprintk(RIO_DEBUG_CTRL, "Clear interrupt for host %d\n", (int) arg); + WBYTE((p->RIOHosts[(int) arg].ResetInt), 0xff); + return 0; + + case RIO_READ_CHECK: + /* Check reads for pkts with data[0] the same */ + p->RIOReadCheck = !p->RIOReadCheck; + if (copyout((caddr_t) & p->RIOReadCheck, (int) arg, sizeof(uint)) == COPYFAIL) { + p->RIOError.Error = COPYOUT_FAILED; + return -EFAULT; + } + return 0; + + case RIO_READ_REGISTER: + if (copyin((int) arg, (caddr_t) & SubCmd, sizeof(struct SubCmdStruct)) == COPYFAIL) { + p->RIOError.Error = COPYIN_FAILED; + return -EFAULT; + } + rio_dprintk(RIO_DEBUG_CTRL, "RIO_READ_REGISTER host %d rup %d port %d reg %x\n", SubCmd.Host, SubCmd.Rup, SubCmd.Port, SubCmd.Addr); + + if (SubCmd.Port > 511) { + rio_dprintk(RIO_DEBUG_CTRL, "Baud rate mapping: Bad port number %d\n", SubCmd.Port); + p->RIOError.Error = PORT_NUMBER_OUT_OF_RANGE; + return -EINVAL; + } + + if (SubCmd.Rup >= MAX_RUP + LINKS_PER_UNIT) { + p->RIOError.Error = RUP_NUMBER_OUT_OF_RANGE; + return -EINVAL; + } + + if (SubCmd.Host >= p->RIONumHosts) { + p->RIOError.Error = HOST_NUMBER_OUT_OF_RANGE; + return -EINVAL; + } + + port = p->RIOHosts[SubCmd.Host].UnixRups[SubCmd.Rup].BaseSysPort + SubCmd.Port; + PortP = p->RIOPortp[port]; + + rio_spin_lock_irqsave(&PortP->portSem, flags); + + if (RIOPreemptiveCmd(p, PortP, READ_REGISTER) == RIO_FAIL) { + rio_dprintk(RIO_DEBUG_CTRL, "RIO_READ_REGISTER failed\n"); + rio_spin_unlock_irqrestore(&PortP->portSem, flags); + return -EBUSY; + } else + PortP->State |= RIO_BUSY; + + rio_spin_unlock_irqrestore(&PortP->portSem, flags); + if (copyout((caddr_t) & p->CdRegister, (int) arg, sizeof(uint)) == COPYFAIL) { + rio_dprintk(RIO_DEBUG_CTRL, "RIO_READ_REGISTER copy failed\n"); + p->RIOError.Error = COPYOUT_FAILED; + return -EFAULT; + } + return 0; + /* + ** rio_make_dev: given port number (0-511) ORed with port type + ** (RIO_DEV_DIRECT, RIO_DEV_MODEM, RIO_DEV_XPRINT) return dev_t + ** value to pass to mknod to create the correct device node. + */ + case RIO_MAKE_DEV: + { + uint port = (uint) arg & RIO_MODEM_MASK; + + switch ((uint) arg & RIO_DEV_MASK) { + case RIO_DEV_DIRECT: + arg = (caddr_t) drv_makedev(MAJOR(dev), port); + rio_dprintk(RIO_DEBUG_CTRL, "Makedev direct 0x%x is 0x%x\n", port, (int) arg); + return (int) arg; + case RIO_DEV_MODEM: + arg = (caddr_t) drv_makedev(MAJOR(dev), (port | RIO_MODEM_BIT)); + rio_dprintk(RIO_DEBUG_CTRL, "Makedev modem 0x%x is 0x%x\n", port, (int) arg); + return (int) arg; + case RIO_DEV_XPRINT: + arg = (caddr_t) drv_makedev(MAJOR(dev), port); + rio_dprintk(RIO_DEBUG_CTRL, "Makedev printer 0x%x is 0x%x\n", port, (int) arg); + return (int) arg; + } + rio_dprintk(RIO_DEBUG_CTRL, "MAKE Device is called\n"); + return -EINVAL; + } + /* + ** rio_minor: given a dev_t from a stat() call, return + ** the port number (0-511) ORed with the port type + ** ( RIO_DEV_DIRECT, RIO_DEV_MODEM, RIO_DEV_XPRINT ) + */ + case RIO_MINOR: + { + dev_t dv; + int mino; + + dv = (dev_t) ((int) arg); + mino = RIO_UNMODEM(dv); + + if (RIO_ISMODEM(dv)) { + rio_dprintk(RIO_DEBUG_CTRL, "Minor for device 0x%x: modem %d\n", dv, mino); + arg = (caddr_t) (mino | RIO_DEV_MODEM); + } else { + rio_dprintk(RIO_DEBUG_CTRL, "Minor for device 0x%x: direct %d\n", dv, mino); + arg = (caddr_t) (mino | RIO_DEV_DIRECT); + } + return (int) arg; + } } - rio_dprintk (RIO_DEBUG_CTRL, "INVALID DAEMON IOCTL 0x%x\n",cmd); + rio_dprintk(RIO_DEBUG_CTRL, "INVALID DAEMON IOCTL 0x%x\n", cmd); p->RIOError.Error = IOCTL_COMMAND_UNKNOWN; - func_exit (); + func_exit(); return -EINVAL; } /* ** Pre-emptive commands go on RUPs and are only one byte long. */ -int -RIOPreemptiveCmd(p, PortP, Cmd) -struct rio_info * p; +int RIOPreemptiveCmd(p, PortP, Cmd) +struct rio_info *p; struct Port *PortP; uchar Cmd; { @@ -1766,104 +1654,99 @@ uchar Cmd; int port; #ifdef CHECK - CheckPortP( PortP ); + CheckPortP(PortP); #endif - if ( PortP->State & RIO_DELETED ) { - rio_dprintk (RIO_DEBUG_CTRL, "Preemptive command to deleted RTA ignored\n"); + if (PortP->State & RIO_DELETED) { + rio_dprintk(RIO_DEBUG_CTRL, "Preemptive command to deleted RTA ignored\n"); return RIO_FAIL; } - if (((int)((char)PortP->InUse) == -1) || ! (CmdBlkP = RIOGetCmdBlk()) ) { - rio_dprintk (RIO_DEBUG_CTRL, "Cannot allocate command block for command %d on port %d\n", - Cmd, PortP->PortNum); + if (((int) ((char) PortP->InUse) == -1) || !(CmdBlkP = RIOGetCmdBlk())) { + rio_dprintk(RIO_DEBUG_CTRL, "Cannot allocate command block for command %d on port %d\n", Cmd, PortP->PortNum); return RIO_FAIL; } - rio_dprintk (RIO_DEBUG_CTRL, "Command blk 0x%x - InUse now %d\n", - (int)CmdBlkP,PortP->InUse); + rio_dprintk(RIO_DEBUG_CTRL, "Command blk 0x%x - InUse now %d\n", (int) CmdBlkP, PortP->InUse); - PktCmdP = (struct PktCmd_M *)&CmdBlkP->Packet.data[0]; + PktCmdP = (struct PktCmd_M *) &CmdBlkP->Packet.data[0]; - CmdBlkP->Packet.src_unit = 0; + CmdBlkP->Packet.src_unit = 0; if (PortP->SecondBlock) rup = PortP->ID2; else rup = PortP->RupNum; CmdBlkP->Packet.dest_unit = rup; - CmdBlkP->Packet.src_port = COMMAND_RUP; + CmdBlkP->Packet.src_port = COMMAND_RUP; CmdBlkP->Packet.dest_port = COMMAND_RUP; - CmdBlkP->Packet.len = PKT_CMD_BIT | 2; - CmdBlkP->PostFuncP = RIOUnUse; - CmdBlkP->PostArg = (int)PortP; - PktCmdP->Command = Cmd; - port = PortP->HostPort % (ushort)PORTS_PER_RTA; + CmdBlkP->Packet.len = PKT_CMD_BIT | 2; + CmdBlkP->PostFuncP = RIOUnUse; + CmdBlkP->PostArg = (int) PortP; + PktCmdP->Command = Cmd; + port = PortP->HostPort % (ushort) PORTS_PER_RTA; /* - ** Index ports 8-15 for 2nd block of 16 port RTA. - */ + ** Index ports 8-15 for 2nd block of 16 port RTA. + */ if (PortP->SecondBlock) port += (ushort) PORTS_PER_RTA; - PktCmdP->PhbNum = port; - - switch ( Cmd ) { - case MEMDUMP: - rio_dprintk (RIO_DEBUG_CTRL, "Queue MEMDUMP command blk 0x%x (addr 0x%x)\n", - (int)CmdBlkP, (int)SubCmd.Addr); - PktCmdP->SubCommand = MEMDUMP; - PktCmdP->SubAddr = SubCmd.Addr; - break; - case FCLOSE: - rio_dprintk (RIO_DEBUG_CTRL, "Queue FCLOSE command blk 0x%x\n",(int)CmdBlkP); - break; - case READ_REGISTER: - rio_dprintk (RIO_DEBUG_CTRL, "Queue READ_REGISTER (0x%x) command blk 0x%x\n", - (int)SubCmd.Addr, (int)CmdBlkP); - PktCmdP->SubCommand = READ_REGISTER; - PktCmdP->SubAddr = SubCmd.Addr; - break; - case RESUME: - rio_dprintk (RIO_DEBUG_CTRL, "Queue RESUME command blk 0x%x\n",(int)CmdBlkP); - break; - case RFLUSH: - rio_dprintk (RIO_DEBUG_CTRL, "Queue RFLUSH command blk 0x%x\n",(int)CmdBlkP); - CmdBlkP->PostFuncP = RIORFlushEnable; - break; - case SUSPEND: - rio_dprintk (RIO_DEBUG_CTRL, "Queue SUSPEND command blk 0x%x\n",(int)CmdBlkP); - break; - - case MGET : - rio_dprintk (RIO_DEBUG_CTRL, "Queue MGET command blk 0x%x\n", (int)CmdBlkP); - break; - - case MSET : - case MBIC : - case MBIS : - CmdBlkP->Packet.data[4] = (char) PortP->ModemLines; - rio_dprintk (RIO_DEBUG_CTRL, "Queue MSET/MBIC/MBIS command blk 0x%x\n", (int)CmdBlkP); - break; - - case WFLUSH: - /* - ** If we have queued up the maximum number of Write flushes - ** allowed then we should not bother sending any more to the - ** RTA. - */ - if ((int)((char)PortP->WflushFlag) == (int)-1) { - rio_dprintk (RIO_DEBUG_CTRL, "Trashed WFLUSH, WflushFlag about to wrap!"); - RIOFreeCmdBlk(CmdBlkP); - return(RIO_FAIL); - } else { - rio_dprintk (RIO_DEBUG_CTRL, "Queue WFLUSH command blk 0x%x\n", - (int)CmdBlkP); - CmdBlkP->PostFuncP = RIOWFlushMark; - } - break; + PktCmdP->PhbNum = port; + + switch (Cmd) { + case MEMDUMP: + rio_dprintk(RIO_DEBUG_CTRL, "Queue MEMDUMP command blk 0x%x (addr 0x%x)\n", (int) CmdBlkP, (int) SubCmd.Addr); + PktCmdP->SubCommand = MEMDUMP; + PktCmdP->SubAddr = SubCmd.Addr; + break; + case FCLOSE: + rio_dprintk(RIO_DEBUG_CTRL, "Queue FCLOSE command blk 0x%x\n", (int) CmdBlkP); + break; + case READ_REGISTER: + rio_dprintk(RIO_DEBUG_CTRL, "Queue READ_REGISTER (0x%x) command blk 0x%x\n", (int) SubCmd.Addr, (int) CmdBlkP); + PktCmdP->SubCommand = READ_REGISTER; + PktCmdP->SubAddr = SubCmd.Addr; + break; + case RESUME: + rio_dprintk(RIO_DEBUG_CTRL, "Queue RESUME command blk 0x%x\n", (int) CmdBlkP); + break; + case RFLUSH: + rio_dprintk(RIO_DEBUG_CTRL, "Queue RFLUSH command blk 0x%x\n", (int) CmdBlkP); + CmdBlkP->PostFuncP = RIORFlushEnable; + break; + case SUSPEND: + rio_dprintk(RIO_DEBUG_CTRL, "Queue SUSPEND command blk 0x%x\n", (int) CmdBlkP); + break; + + case MGET: + rio_dprintk(RIO_DEBUG_CTRL, "Queue MGET command blk 0x%x\n", (int) CmdBlkP); + break; + + case MSET: + case MBIC: + case MBIS: + CmdBlkP->Packet.data[4] = (char) PortP->ModemLines; + rio_dprintk(RIO_DEBUG_CTRL, "Queue MSET/MBIC/MBIS command blk 0x%x\n", (int) CmdBlkP); + break; + + case WFLUSH: + /* + ** If we have queued up the maximum number of Write flushes + ** allowed then we should not bother sending any more to the + ** RTA. + */ + if ((int) ((char) PortP->WflushFlag) == (int) -1) { + rio_dprintk(RIO_DEBUG_CTRL, "Trashed WFLUSH, WflushFlag about to wrap!"); + RIOFreeCmdBlk(CmdBlkP); + return (RIO_FAIL); + } else { + rio_dprintk(RIO_DEBUG_CTRL, "Queue WFLUSH command blk 0x%x\n", (int) CmdBlkP); + CmdBlkP->PostFuncP = RIOWFlushMark; + } + break; } PortP->InUse++; - Ret = RIOQueueCmdBlk( PortP->HostP, rup, CmdBlkP ); + Ret = RIOQueueCmdBlk(PortP->HostP, rup, CmdBlkP); return Ret; } diff --git a/drivers/char/rio/riodrvr.h b/drivers/char/rio/riodrvr.h index bc38ac5dfbde..663ee0914ed7 100644 --- a/drivers/char/rio/riodrvr.h +++ b/drivers/char/rio/riodrvr.h @@ -33,7 +33,7 @@ #ifndef __riodrvr_h #define __riodrvr_h -#include /* for HZ */ +#include /* for HZ */ #ifdef SCCS_LABELS static char *_riodrvr_h_sccs_ = "@(#)riodrvr.h 1.3"; @@ -44,15 +44,15 @@ static char *_riodrvr_h_sccs_ = "@(#)riodrvr.h 1.3"; struct rio_info { - int mode; /* Intr or polled, word/byte */ - spinlock_t RIOIntrSem; /* Interrupt thread sem */ - int current_chan; /* current channel */ - int RIOFailed; /* Not initialised ? */ - int RIOInstallAttempts; /* no. of rio-install() calls */ - int RIOLastPCISearch; /* status of last search */ - int RIONumHosts; /* Number of RIO Hosts */ - struct Host * RIOHosts; /* RIO Host values */ - struct Port **RIOPortp; /* RIO port values */ + int mode; /* Intr or polled, word/byte */ + spinlock_t RIOIntrSem; /* Interrupt thread sem */ + int current_chan; /* current channel */ + int RIOFailed; /* Not initialised ? */ + int RIOInstallAttempts; /* no. of rio-install() calls */ + int RIOLastPCISearch; /* status of last search */ + int RIONumHosts; /* Number of RIO Hosts */ + struct Host *RIOHosts; /* RIO Host values */ + struct Port **RIOPortp; /* RIO port values */ /* ** 02.03.1999 ARG - ESIL 0820 fix ** We no longer use RIOBootMode @@ -60,9 +60,9 @@ struct rio_info { int RIOBootMode; * RIO boot mode * ** */ - int RIOPrintDisabled; /* RIO printing disabled ? */ - int RIOPrintLogState; /* RIO printing state ? */ - int RIOPolling; /* Polling ? */ + int RIOPrintDisabled; /* RIO printing disabled ? */ + int RIOPrintLogState; /* RIO printing state ? */ + int RIOPolling; /* Polling ? */ /* ** 09.12.1998 ARG - ESIL 0776 part fix ** The 'RIO_QUICK_CHECK' ioctl was using RIOHalted. @@ -70,61 +70,61 @@ struct rio_info { ** updated in RIOConCon() - to keep track of RTA connections/disconnections. ** 'RIO_QUICK_CHECK' now returns the value of RIORtaDisCons. */ - int RIOHalted; /* halted ? */ - int RIORtaDisCons; /* RTA connections/disconnections */ - uint RIOReadCheck; /* Rio read check */ - uint RIONoMessage; /* To display message or not */ - uint RIONumBootPkts; /* how many packets for an RTA */ - uint RIOBootCount; /* size of RTA code */ - uint RIOBooting; /* count of outstanding boots */ - uint RIOSystemUp; /* Booted ?? */ - uint RIOCounting; /* for counting interrupts */ - uint RIOIntCount; /* # of intr since last check */ - uint RIOTxCount; /* number of xmit intrs */ - uint RIORxCount; /* number of rx intrs */ - uint RIORupCount; /* number of rup intrs */ - int RIXTimer; - int RIOBufferSize; /* Buffersize */ - int RIOBufferMask; /* Buffersize */ - - int RIOFirstMajor; /* First host card's major no */ - - uint RIOLastPortsMapped; /* highest port number known */ - uint RIOFirstPortsMapped; /* lowest port number known */ - - uint RIOLastPortsBooted; /* highest port number running */ - uint RIOFirstPortsBooted; /* lowest port number running */ - - uint RIOLastPortsOpened; /* highest port number running */ - uint RIOFirstPortsOpened; /* lowest port number running */ + int RIOHalted; /* halted ? */ + int RIORtaDisCons; /* RTA connections/disconnections */ + uint RIOReadCheck; /* Rio read check */ + uint RIONoMessage; /* To display message or not */ + uint RIONumBootPkts; /* how many packets for an RTA */ + uint RIOBootCount; /* size of RTA code */ + uint RIOBooting; /* count of outstanding boots */ + uint RIOSystemUp; /* Booted ?? */ + uint RIOCounting; /* for counting interrupts */ + uint RIOIntCount; /* # of intr since last check */ + uint RIOTxCount; /* number of xmit intrs */ + uint RIORxCount; /* number of rx intrs */ + uint RIORupCount; /* number of rup intrs */ + int RIXTimer; + int RIOBufferSize; /* Buffersize */ + int RIOBufferMask; /* Buffersize */ + + int RIOFirstMajor; /* First host card's major no */ + + uint RIOLastPortsMapped; /* highest port number known */ + uint RIOFirstPortsMapped; /* lowest port number known */ + + uint RIOLastPortsBooted; /* highest port number running */ + uint RIOFirstPortsBooted; /* lowest port number running */ + + uint RIOLastPortsOpened; /* highest port number running */ + uint RIOFirstPortsOpened; /* lowest port number running */ /* Flag to say that the topology information has been changed. */ - uint RIOQuickCheck; - uint CdRegister; /* ??? */ - int RIOSignalProcess; /* Signalling process */ - int rio_debug; /* To debug ... */ - int RIODebugWait; /* For what ??? */ - int tpri; /* Thread prio */ - int tid; /* Thread id */ - uint _RIO_Polled; /* Counter for polling */ - uint _RIO_Interrupted; /* Counter for interrupt */ - int intr_tid; /* iointset return value */ - int TxEnSem; /* TxEnable Semaphore */ - - - struct Error RIOError; /* to Identify what went wrong */ - struct Conf RIOConf; /* Configuration ??? */ - struct ttystatics channel[RIO_PORTS]; /* channel information */ - char RIOBootPackets[1+(SIXTY_FOUR_K/RTA_BOOT_DATA_SIZE)] - [RTA_BOOT_DATA_SIZE]; - struct Map RIOConnectTable[TOTAL_MAP_ENTRIES]; - struct Map RIOSavedTable[TOTAL_MAP_ENTRIES]; + uint RIOQuickCheck; + uint CdRegister; /* ??? */ + int RIOSignalProcess; /* Signalling process */ + int rio_debug; /* To debug ... */ + int RIODebugWait; /* For what ??? */ + int tpri; /* Thread prio */ + int tid; /* Thread id */ + uint _RIO_Polled; /* Counter for polling */ + uint _RIO_Interrupted; /* Counter for interrupt */ + int intr_tid; /* iointset return value */ + int TxEnSem; /* TxEnable Semaphore */ + + + struct Error RIOError; /* to Identify what went wrong */ + struct Conf RIOConf; /* Configuration ??? */ + struct ttystatics channel[RIO_PORTS]; /* channel information */ + char RIOBootPackets[1 + (SIXTY_FOUR_K / RTA_BOOT_DATA_SIZE)] + [RTA_BOOT_DATA_SIZE]; + struct Map RIOConnectTable[TOTAL_MAP_ENTRIES]; + struct Map RIOSavedTable[TOTAL_MAP_ENTRIES]; /* RTA to host binding table for master/slave operation */ - ulong RIOBindTab[MAX_RTA_BINDINGS]; + ulong RIOBindTab[MAX_RTA_BINDINGS]; /* RTA memory dump variable */ - uchar RIOMemDump[MEMDUMP_SIZE]; - struct ModuleInfo RIOModuleTypes[MAX_MODULE_TYPES]; + uchar RIOMemDump[MEMDUMP_SIZE]; + struct ModuleInfo RIOModuleTypes[MAX_MODULE_TYPES]; }; @@ -141,4 +141,4 @@ struct rio_info { #define WRBYTE(x,y) *(volatile unsigned char *)((x)) = \ (unsigned char)(y) -#endif /* __riodrvr.h */ +#endif /* __riodrvr.h */ diff --git a/drivers/char/rio/rioinfo.h b/drivers/char/rio/rioinfo.h index e08421c9558e..8de7966e603a 100644 --- a/drivers/char/rio/rioinfo.h +++ b/drivers/char/rio/rioinfo.h @@ -41,29 +41,29 @@ static char *_rioinfo_h_sccs_ = "@(#)rioinfo.h 1.2"; ** Host card data structure */ struct RioHostInfo { - long location; /* RIO Card Base I/O address */ - long vector; /* RIO Card IRQ vector */ - int bus; /* ISA/EISA/MCA/PCI */ - int mode; /* pointer to host mode - INTERRUPT / POLLED */ + long location; /* RIO Card Base I/O address */ + long vector; /* RIO Card IRQ vector */ + int bus; /* ISA/EISA/MCA/PCI */ + int mode; /* pointer to host mode - INTERRUPT / POLLED */ struct old_sgttyb - * Sg; /* pointer to default term characteristics */ + *Sg; /* pointer to default term characteristics */ }; /* Mode in rio device info */ -#define INTERRUPTED_MODE 0x01 /* Interrupt is generated */ -#define POLLED_MODE 0x02 /* No interrupt */ -#define AUTO_MODE 0x03 /* Auto mode */ +#define INTERRUPTED_MODE 0x01 /* Interrupt is generated */ +#define POLLED_MODE 0x02 /* No interrupt */ +#define AUTO_MODE 0x03 /* Auto mode */ -#define WORD_ACCESS_MODE 0x10 /* Word Access Mode */ -#define BYTE_ACCESS_MODE 0x20 /* Byte Access Mode */ +#define WORD_ACCESS_MODE 0x10 /* Word Access Mode */ +#define BYTE_ACCESS_MODE 0x20 /* Byte Access Mode */ /* Bus type that RIO supports */ -#define ISA_BUS 0x01 /* The card is ISA */ -#define EISA_BUS 0x02 /* The card is EISA */ -#define MCA_BUS 0x04 /* The card is MCA */ -#define PCI_BUS 0x08 /* The card is PCI */ +#define ISA_BUS 0x01 /* The card is ISA */ +#define EISA_BUS 0x02 /* The card is EISA */ +#define MCA_BUS 0x04 /* The card is MCA */ +#define PCI_BUS 0x08 /* The card is PCI */ /* ** 11.11.1998 ARG - ESIL ???? part fix @@ -93,4 +93,4 @@ struct RioHostInfo { 'V' - '@' /* literal next char */ \ } -#endif /* __rioinfo_h */ +#endif /* __rioinfo_h */ diff --git a/drivers/char/rio/riointr.c b/drivers/char/rio/riointr.c index ddda9c14e059..34d8787557a1 100644 --- a/drivers/char/rio/riointr.c +++ b/drivers/char/rio/riointr.c @@ -88,99 +88,93 @@ static char *_riointr_c_sccs_ = "@(#)riointr.c 1.2"; static void RIOReceive(struct rio_info *, struct Port *); -static char *firstchars (char *p, int nch) +static char *firstchars(char *p, int nch) { - static char buf[2][128]; - static int t=0; - t = ! t; - memcpy (buf[t], p, nch); - buf[t][nch] = 0; - return buf[t]; + static char buf[2][128]; + static int t = 0; + t = !t; + memcpy(buf[t], p, nch); + buf[t][nch] = 0; + return buf[t]; } #define INCR( P, I ) ((P) = (((P)+(I)) & p->RIOBufferMask)) /* Enable and start the transmission of packets */ -void -RIOTxEnable(en) -char * en; +void RIOTxEnable(en) +char *en; { - struct Port * PortP; - struct rio_info *p; - struct tty_struct* tty; - int c; - struct PKT * PacketP; - unsigned long flags; - - PortP = (struct Port *)en; - p = (struct rio_info *)PortP->p; - tty = PortP->gs.tty; - - - rio_dprintk (RIO_DEBUG_INTR, "tx port %d: %d chars queued.\n", - PortP->PortNum, PortP->gs.xmit_cnt); - - if (!PortP->gs.xmit_cnt) return; - - - /* This routine is an order of magnitude simpler than the specialix - version. One of the disadvantages is that this version will send - an incomplete packet (usually 64 bytes instead of 72) once for - every 4k worth of data. Let's just say that this won't influence - performance significantly..... */ - - rio_spin_lock_irqsave(&PortP->portSem, flags); - - while (can_add_transmit( &PacketP, PortP )) { - c = PortP->gs.xmit_cnt; - if (c > PKT_MAX_DATA_LEN) c = PKT_MAX_DATA_LEN; - - /* Don't copy past the end of the source buffer */ - if (c > SERIAL_XMIT_SIZE - PortP->gs.xmit_tail) - c = SERIAL_XMIT_SIZE - PortP->gs.xmit_tail; - - { int t; - t = (c > 10)?10:c; - - rio_dprintk (RIO_DEBUG_INTR, "rio: tx port %d: copying %d chars: %s - %s\n", - PortP->PortNum, c, - firstchars (PortP->gs.xmit_buf + PortP->gs.xmit_tail , t), - firstchars (PortP->gs.xmit_buf + PortP->gs.xmit_tail + c-t, t)); - } - /* If for one reason or another, we can't copy more data, - we're done! */ - if (c == 0) break; - - rio_memcpy_toio (PortP->HostP->Caddr, (caddr_t)PacketP->data, - PortP->gs.xmit_buf + PortP->gs.xmit_tail, c); - /* udelay (1); */ - - writeb (c, &(PacketP->len)); - if (!( PortP->State & RIO_DELETED ) ) { - add_transmit ( PortP ); - /* - ** Count chars tx'd for port statistics reporting - */ - if ( PortP->statsGather ) - PortP->txchars += c; - } - PortP->gs.xmit_tail = (PortP->gs.xmit_tail + c) & (SERIAL_XMIT_SIZE-1); - PortP->gs.xmit_cnt -= c; - } - - rio_spin_unlock_irqrestore(&PortP->portSem, flags); - - if (PortP->gs.xmit_cnt <= (PortP->gs.wakeup_chars + 2*PKT_MAX_DATA_LEN)) { - rio_dprintk (RIO_DEBUG_INTR, "Waking up.... ldisc:%d (%d/%d)....", - (int)(PortP->gs.tty->flags & (1 << TTY_DO_WRITE_WAKEUP)), - PortP->gs.wakeup_chars, PortP->gs.xmit_cnt); - if ((PortP->gs.tty->flags & (1 << TTY_DO_WRITE_WAKEUP)) && - PortP->gs.tty->ldisc.write_wakeup) - (PortP->gs.tty->ldisc.write_wakeup)(PortP->gs.tty); - rio_dprintk (RIO_DEBUG_INTR, "(%d/%d)\n", - PortP->gs.wakeup_chars, PortP->gs.xmit_cnt); - wake_up_interruptible(&PortP->gs.tty->write_wait); - } + struct Port *PortP; + struct rio_info *p; + struct tty_struct *tty; + int c; + struct PKT *PacketP; + unsigned long flags; + + PortP = (struct Port *) en; + p = (struct rio_info *) PortP->p; + tty = PortP->gs.tty; + + + rio_dprintk(RIO_DEBUG_INTR, "tx port %d: %d chars queued.\n", PortP->PortNum, PortP->gs.xmit_cnt); + + if (!PortP->gs.xmit_cnt) + return; + + + /* This routine is an order of magnitude simpler than the specialix + version. One of the disadvantages is that this version will send + an incomplete packet (usually 64 bytes instead of 72) once for + every 4k worth of data. Let's just say that this won't influence + performance significantly..... */ + + rio_spin_lock_irqsave(&PortP->portSem, flags); + + while (can_add_transmit(&PacketP, PortP)) { + c = PortP->gs.xmit_cnt; + if (c > PKT_MAX_DATA_LEN) + c = PKT_MAX_DATA_LEN; + + /* Don't copy past the end of the source buffer */ + if (c > SERIAL_XMIT_SIZE - PortP->gs.xmit_tail) + c = SERIAL_XMIT_SIZE - PortP->gs.xmit_tail; + + { + int t; + t = (c > 10) ? 10 : c; + + rio_dprintk(RIO_DEBUG_INTR, "rio: tx port %d: copying %d chars: %s - %s\n", PortP->PortNum, c, firstchars(PortP->gs.xmit_buf + PortP->gs.xmit_tail, t), firstchars(PortP->gs.xmit_buf + PortP->gs.xmit_tail + c - t, t)); + } + /* If for one reason or another, we can't copy more data, + we're done! */ + if (c == 0) + break; + + rio_memcpy_toio(PortP->HostP->Caddr, (caddr_t) PacketP->data, PortP->gs.xmit_buf + PortP->gs.xmit_tail, c); + /* udelay (1); */ + + writeb(c, &(PacketP->len)); + if (!(PortP->State & RIO_DELETED)) { + add_transmit(PortP); + /* + ** Count chars tx'd for port statistics reporting + */ + if (PortP->statsGather) + PortP->txchars += c; + } + PortP->gs.xmit_tail = (PortP->gs.xmit_tail + c) & (SERIAL_XMIT_SIZE - 1); + PortP->gs.xmit_cnt -= c; + } + + rio_spin_unlock_irqrestore(&PortP->portSem, flags); + + if (PortP->gs.xmit_cnt <= (PortP->gs.wakeup_chars + 2 * PKT_MAX_DATA_LEN)) { + rio_dprintk(RIO_DEBUG_INTR, "Waking up.... ldisc:%d (%d/%d)....", (int) (PortP->gs.tty->flags & (1 << TTY_DO_WRITE_WAKEUP)), PortP->gs.wakeup_chars, PortP->gs.xmit_cnt); + if ((PortP->gs.tty->flags & (1 << TTY_DO_WRITE_WAKEUP)) && PortP->gs.tty->ldisc.write_wakeup) + (PortP->gs.tty->ldisc.write_wakeup) (PortP->gs.tty); + rio_dprintk(RIO_DEBUG_INTR, "(%d/%d)\n", PortP->gs.wakeup_chars, PortP->gs.xmit_cnt); + wake_up_interruptible(&PortP->gs.tty->write_wait); + } } @@ -189,361 +183,349 @@ char * en; ** RIO Host Service routine. Does all the work traditionally associated with an ** interrupt. */ -static int RupIntr; -static int RxIntr; -static int TxIntr; -void -RIOServiceHost(p, HostP, From) -struct rio_info * p; +static int RupIntr; +static int RxIntr; +static int TxIntr; +void RIOServiceHost(p, HostP, From) +struct rio_info *p; struct Host *HostP; -int From; +int From; { - rio_spin_lock (&HostP->HostLock); - if ( (HostP->Flags & RUN_STATE) != RC_RUNNING ) { - static int t =0; - rio_spin_unlock (&HostP->HostLock); - if ((t++ % 200) == 0) - rio_dprintk (RIO_DEBUG_INTR, "Interrupt but host not running. flags=%x.\n", (int)HostP->Flags); - return; - } - rio_spin_unlock (&HostP->HostLock); - - if ( RWORD( HostP->ParmMapP->rup_intr ) ) { - WWORD( HostP->ParmMapP->rup_intr , 0 ); - p->RIORupCount++; - RupIntr++; - rio_dprintk (RIO_DEBUG_INTR, "rio: RUP interrupt on host %d\n", HostP-p->RIOHosts); - RIOPollHostCommands(p, HostP ); - } - - if ( RWORD( HostP->ParmMapP->rx_intr ) ) { - int port; - - WWORD( HostP->ParmMapP->rx_intr , 0 ); - p->RIORxCount++; - RxIntr++; - - rio_dprintk (RIO_DEBUG_INTR, "rio: RX interrupt on host %d\n", HostP-p->RIOHosts); - /* - ** Loop through every port. If the port is mapped into - ** the system ( i.e. has /dev/ttyXXXX associated ) then it is - ** worth checking. If the port isn't open, grab any packets - ** hanging on its receive queue and stuff them on the free - ** list; check for commands on the way. - */ - for ( port=p->RIOFirstPortsBooted; - portRIOLastPortsBooted+PORTS_PER_RTA; port++ ) { - struct Port *PortP = p->RIOPortp[port]; - struct tty_struct *ttyP; - struct PKT *PacketP; - - /* - ** not mapped in - most of the RIOPortp[] information - ** has not been set up! - ** Optimise: ports come in bundles of eight. - */ - if ( !PortP->Mapped ) { - port += 7; - continue; /* with the next port */ - } - - /* - ** If the host board isn't THIS host board, check the next one. - ** optimise: ports come in bundles of eight. - */ - if ( PortP->HostP != HostP ) { - port += 7; - continue; - } - - /* - ** Let us see - is the port open? If not, then don't service it. - */ - if ( !( PortP->PortState & PORT_ISOPEN ) ) { - continue; - } - - /* - ** find corresponding tty structure. The process of mapping - ** the ports puts these here. - */ - ttyP = PortP->gs.tty; - - /* - ** Lock the port before we begin working on it. - */ - rio_spin_lock(&PortP->portSem); - - /* - ** Process received data if there is any. - */ - if ( can_remove_receive( &PacketP, PortP ) ) - RIOReceive(p, PortP); - - /* - ** If there is no data left to be read from the port, and - ** it's handshake bit is set, then we must clear the handshake, - ** so that that downstream RTA is re-enabled. - */ - if ( !can_remove_receive( &PacketP, PortP ) && - ( RWORD( PortP->PhbP->handshake )==PHB_HANDSHAKE_SET ) ) { + rio_spin_lock(&HostP->HostLock); + if ((HostP->Flags & RUN_STATE) != RC_RUNNING) { + static int t = 0; + rio_spin_unlock(&HostP->HostLock); + if ((t++ % 200) == 0) + rio_dprintk(RIO_DEBUG_INTR, "Interrupt but host not running. flags=%x.\n", (int) HostP->Flags); + return; + } + rio_spin_unlock(&HostP->HostLock); + + if (RWORD(HostP->ParmMapP->rup_intr)) { + WWORD(HostP->ParmMapP->rup_intr, 0); + p->RIORupCount++; + RupIntr++; + rio_dprintk(RIO_DEBUG_INTR, "rio: RUP interrupt on host %d\n", HostP - p->RIOHosts); + RIOPollHostCommands(p, HostP); + } + + if (RWORD(HostP->ParmMapP->rx_intr)) { + int port; + + WWORD(HostP->ParmMapP->rx_intr, 0); + p->RIORxCount++; + RxIntr++; + + rio_dprintk(RIO_DEBUG_INTR, "rio: RX interrupt on host %d\n", HostP - p->RIOHosts); + /* + ** Loop through every port. If the port is mapped into + ** the system ( i.e. has /dev/ttyXXXX associated ) then it is + ** worth checking. If the port isn't open, grab any packets + ** hanging on its receive queue and stuff them on the free + ** list; check for commands on the way. + */ + for (port = p->RIOFirstPortsBooted; port < p->RIOLastPortsBooted + PORTS_PER_RTA; port++) { + struct Port *PortP = p->RIOPortp[port]; + struct tty_struct *ttyP; + struct PKT *PacketP; + + /* + ** not mapped in - most of the RIOPortp[] information + ** has not been set up! + ** Optimise: ports come in bundles of eight. + */ + if (!PortP->Mapped) { + port += 7; + continue; /* with the next port */ + } + + /* + ** If the host board isn't THIS host board, check the next one. + ** optimise: ports come in bundles of eight. + */ + if (PortP->HostP != HostP) { + port += 7; + continue; + } + + /* + ** Let us see - is the port open? If not, then don't service it. + */ + if (!(PortP->PortState & PORT_ISOPEN)) { + continue; + } + + /* + ** find corresponding tty structure. The process of mapping + ** the ports puts these here. + */ + ttyP = PortP->gs.tty; + + /* + ** Lock the port before we begin working on it. + */ + rio_spin_lock(&PortP->portSem); + + /* + ** Process received data if there is any. + */ + if (can_remove_receive(&PacketP, PortP)) + RIOReceive(p, PortP); + + /* + ** If there is no data left to be read from the port, and + ** it's handshake bit is set, then we must clear the handshake, + ** so that that downstream RTA is re-enabled. + */ + if (!can_remove_receive(&PacketP, PortP) && (RWORD(PortP->PhbP->handshake) == PHB_HANDSHAKE_SET)) { /* - ** MAGIC! ( Basically, handshake the RX buffer, so that - ** the RTAs upstream can be re-enabled. ) - */ - rio_dprintk (RIO_DEBUG_INTR, "Set RX handshake bit\n"); - WWORD( PortP->PhbP->handshake, - PHB_HANDSHAKE_SET|PHB_HANDSHAKE_RESET ); - } - rio_spin_unlock(&PortP->portSem); - } - } - - if ( RWORD( HostP->ParmMapP->tx_intr ) ) { - int port; - - WWORD( HostP->ParmMapP->tx_intr , 0); - - p->RIOTxCount++; - TxIntr++; - rio_dprintk (RIO_DEBUG_INTR, "rio: TX interrupt on host %d\n", HostP-p->RIOHosts); - - /* - ** Loop through every port. - ** If the port is mapped into the system ( i.e. has /dev/ttyXXXX - ** associated ) then it is worth checking. - */ - for ( port=p->RIOFirstPortsBooted; - portRIOLastPortsBooted+PORTS_PER_RTA; port++ ) { - struct Port *PortP = p->RIOPortp[port]; - struct tty_struct *ttyP; - struct PKT *PacketP; - - /* - ** not mapped in - most of the RIOPortp[] information - ** has not been set up! - */ - if ( !PortP->Mapped ) { - port += 7; - continue; /* with the next port */ - } - - /* - ** If the host board isn't running, then its data structures - ** are no use to us - continue quietly. - */ - if ( PortP->HostP != HostP ) { - port += 7; - continue; /* with the next port */ - } - - /* - ** Let us see - is the port open? If not, then don't service it. - */ - if ( !( PortP->PortState & PORT_ISOPEN ) ) { - continue; - } - - rio_dprintk (RIO_DEBUG_INTR, "rio: Looking into port %d.\n", port); - /* - ** Lock the port before we begin working on it. - */ - rio_spin_lock(&PortP->portSem); - - /* - ** If we can't add anything to the transmit queue, then - ** we need do none of this processing. - */ - if ( !can_add_transmit( &PacketP, PortP ) ) { - rio_dprintk (RIO_DEBUG_INTR, "Can't add to port, so skipping.\n"); - rio_spin_unlock(&PortP->portSem); - continue; - } - - /* - ** find corresponding tty structure. The process of mapping - ** the ports puts these here. - */ - ttyP = PortP->gs.tty; - /* If ttyP is NULL, the port is getting closed. Forget about it. */ - if (!ttyP) { - rio_dprintk (RIO_DEBUG_INTR, "no tty, so skipping.\n"); - rio_spin_unlock(&PortP->portSem); - continue; - } - /* - ** If there is more room available we start up the transmit - ** data process again. This can be direct I/O, if the cookmode - ** is set to COOK_RAW or COOK_MEDIUM, or will be a call to the - ** riotproc( T_OUTPUT ) if we are in COOK_WELL mode, to fetch - ** characters via the line discipline. We must always call - ** the line discipline, - ** so that user input characters can be echoed correctly. - ** - ** ++++ Update +++++ - ** With the advent of double buffering, we now see if - ** TxBufferOut-In is non-zero. If so, then we copy a packet - ** to the output place, and set it going. If this empties - ** the buffer, then we must issue a wakeup( ) on OUT. - ** If it frees space in the buffer then we must issue - ** a wakeup( ) on IN. - ** - ** ++++ Extra! Extra! If PortP->WflushFlag is set, then we - ** have to send a WFLUSH command down the PHB, to mark the - ** end point of a WFLUSH. We also need to clear out any - ** data from the double buffer! ( note that WflushFlag is a - ** *count* of the number of WFLUSH commands outstanding! ) - ** - ** ++++ And there's more! - ** If an RTA is powered off, then on again, and rebooted, - ** whilst it has ports open, then we need to re-open the ports. - ** ( reasonable enough ). We can't do this when we spot the - ** re-boot, in interrupt time, because the queue is probably - ** full. So, when we come in here, we need to test if any - ** ports are in this condition, and re-open the port before - ** we try to send any more data to it. Now, the re-booted - ** RTA will be discarding packets from the PHB until it - ** receives this open packet, but don't worry tooo much - ** about that. The one thing that is interesting is the - ** combination of this effect and the WFLUSH effect! - */ - /* For now don't handle RTA reboots. -- REW. - Reenabled. Otherwise RTA reboots didn't work. Duh. -- REW */ - if ( PortP->MagicFlags ) { -#if 1 - if ( PortP->MagicFlags & MAGIC_REBOOT ) { - /* - ** well, the RTA has been rebooted, and there is room - ** on its queue to add the open packet that is required. - ** - ** The messy part of this line is trying to decide if - ** we need to call the Param function as a tty or as - ** a modem. - ** DONT USE CLOCAL AS A TEST FOR THIS! - ** - ** If we can't param the port, then move on to the - ** next port. - */ - PortP->InUse = NOT_INUSE; - - rio_spin_unlock(&PortP->portSem); - if ( RIOParam(PortP, OPEN, ((PortP->Cor2Copy & - (COR2_RTSFLOW|COR2_CTSFLOW ) )== - (COR2_RTSFLOW|COR2_CTSFLOW ) ) ? - TRUE : FALSE, DONT_SLEEP ) == RIO_FAIL ) { - continue; /* with next port */ - } - rio_spin_lock(&PortP->portSem); - PortP->MagicFlags &= ~MAGIC_REBOOT; + ** MAGIC! ( Basically, handshake the RX buffer, so that + ** the RTAs upstream can be re-enabled. ) + */ + rio_dprintk(RIO_DEBUG_INTR, "Set RX handshake bit\n"); + WWORD(PortP->PhbP->handshake, PHB_HANDSHAKE_SET | PHB_HANDSHAKE_RESET); + } + rio_spin_unlock(&PortP->portSem); + } } + + if (RWORD(HostP->ParmMapP->tx_intr)) { + int port; + + WWORD(HostP->ParmMapP->tx_intr, 0); + + p->RIOTxCount++; + TxIntr++; + rio_dprintk(RIO_DEBUG_INTR, "rio: TX interrupt on host %d\n", HostP - p->RIOHosts); + + /* + ** Loop through every port. + ** If the port is mapped into the system ( i.e. has /dev/ttyXXXX + ** associated ) then it is worth checking. + */ + for (port = p->RIOFirstPortsBooted; port < p->RIOLastPortsBooted + PORTS_PER_RTA; port++) { + struct Port *PortP = p->RIOPortp[port]; + struct tty_struct *ttyP; + struct PKT *PacketP; + + /* + ** not mapped in - most of the RIOPortp[] information + ** has not been set up! + */ + if (!PortP->Mapped) { + port += 7; + continue; /* with the next port */ + } + + /* + ** If the host board isn't running, then its data structures + ** are no use to us - continue quietly. + */ + if (PortP->HostP != HostP) { + port += 7; + continue; /* with the next port */ + } + + /* + ** Let us see - is the port open? If not, then don't service it. + */ + if (!(PortP->PortState & PORT_ISOPEN)) { + continue; + } + + rio_dprintk(RIO_DEBUG_INTR, "rio: Looking into port %d.\n", port); + /* + ** Lock the port before we begin working on it. + */ + rio_spin_lock(&PortP->portSem); + + /* + ** If we can't add anything to the transmit queue, then + ** we need do none of this processing. + */ + if (!can_add_transmit(&PacketP, PortP)) { + rio_dprintk(RIO_DEBUG_INTR, "Can't add to port, so skipping.\n"); + rio_spin_unlock(&PortP->portSem); + continue; + } + + /* + ** find corresponding tty structure. The process of mapping + ** the ports puts these here. + */ + ttyP = PortP->gs.tty; + /* If ttyP is NULL, the port is getting closed. Forget about it. */ + if (!ttyP) { + rio_dprintk(RIO_DEBUG_INTR, "no tty, so skipping.\n"); + rio_spin_unlock(&PortP->portSem); + continue; + } + /* + ** If there is more room available we start up the transmit + ** data process again. This can be direct I/O, if the cookmode + ** is set to COOK_RAW or COOK_MEDIUM, or will be a call to the + ** riotproc( T_OUTPUT ) if we are in COOK_WELL mode, to fetch + ** characters via the line discipline. We must always call + ** the line discipline, + ** so that user input characters can be echoed correctly. + ** + ** ++++ Update +++++ + ** With the advent of double buffering, we now see if + ** TxBufferOut-In is non-zero. If so, then we copy a packet + ** to the output place, and set it going. If this empties + ** the buffer, then we must issue a wakeup( ) on OUT. + ** If it frees space in the buffer then we must issue + ** a wakeup( ) on IN. + ** + ** ++++ Extra! Extra! If PortP->WflushFlag is set, then we + ** have to send a WFLUSH command down the PHB, to mark the + ** end point of a WFLUSH. We also need to clear out any + ** data from the double buffer! ( note that WflushFlag is a + ** *count* of the number of WFLUSH commands outstanding! ) + ** + ** ++++ And there's more! + ** If an RTA is powered off, then on again, and rebooted, + ** whilst it has ports open, then we need to re-open the ports. + ** ( reasonable enough ). We can't do this when we spot the + ** re-boot, in interrupt time, because the queue is probably + ** full. So, when we come in here, we need to test if any + ** ports are in this condition, and re-open the port before + ** we try to send any more data to it. Now, the re-booted + ** RTA will be discarding packets from the PHB until it + ** receives this open packet, but don't worry tooo much + ** about that. The one thing that is interesting is the + ** combination of this effect and the WFLUSH effect! + */ + /* For now don't handle RTA reboots. -- REW. + Reenabled. Otherwise RTA reboots didn't work. Duh. -- REW */ + if (PortP->MagicFlags) { +#if 1 + if (PortP->MagicFlags & MAGIC_REBOOT) { + /* + ** well, the RTA has been rebooted, and there is room + ** on its queue to add the open packet that is required. + ** + ** The messy part of this line is trying to decide if + ** we need to call the Param function as a tty or as + ** a modem. + ** DONT USE CLOCAL AS A TEST FOR THIS! + ** + ** If we can't param the port, then move on to the + ** next port. + */ + PortP->InUse = NOT_INUSE; + + rio_spin_unlock(&PortP->portSem); + if (RIOParam(PortP, OPEN, ((PortP->Cor2Copy & (COR2_RTSFLOW | COR2_CTSFLOW)) == (COR2_RTSFLOW | COR2_CTSFLOW)) ? TRUE : FALSE, DONT_SLEEP) == RIO_FAIL) { + continue; /* with next port */ + } + rio_spin_lock(&PortP->portSem); + PortP->MagicFlags &= ~MAGIC_REBOOT; + } #endif - /* - ** As mentioned above, this is a tacky hack to cope - ** with WFLUSH - */ - if ( PortP->WflushFlag ) { - rio_dprintk (RIO_DEBUG_INTR, "Want to WFLUSH mark this port\n"); - - if ( PortP->InUse ) - rio_dprintk (RIO_DEBUG_INTR, "FAILS - PORT IS IN USE\n"); - } - - while ( PortP->WflushFlag && - can_add_transmit( &PacketP, PortP ) && - ( PortP->InUse == NOT_INUSE ) ) { - int p; - struct PktCmd *PktCmdP; - - rio_dprintk (RIO_DEBUG_INTR, "Add WFLUSH marker to data queue\n"); - /* - ** make it look just like a WFLUSH command - */ - PktCmdP = ( struct PktCmd * )&PacketP->data[0]; - - WBYTE( PktCmdP->Command , WFLUSH ); - - p = PortP->HostPort % ( ushort )PORTS_PER_RTA; - - /* - ** If second block of ports for 16 port RTA, add 8 - ** to index 8-15. - */ - if ( PortP->SecondBlock ) - p += PORTS_PER_RTA; - - WBYTE( PktCmdP->PhbNum, p ); - - /* - ** to make debuggery easier - */ - WBYTE( PacketP->data[ 2], 'W' ); - WBYTE( PacketP->data[ 3], 'F' ); - WBYTE( PacketP->data[ 4], 'L' ); - WBYTE( PacketP->data[ 5], 'U' ); - WBYTE( PacketP->data[ 6], 'S' ); - WBYTE( PacketP->data[ 7], 'H' ); - WBYTE( PacketP->data[ 8], ' ' ); - WBYTE( PacketP->data[ 9], '0'+PortP->WflushFlag ); - WBYTE( PacketP->data[10], ' ' ); - WBYTE( PacketP->data[11], ' ' ); - WBYTE( PacketP->data[12], '\0' ); - - /* - ** its two bytes long! - */ - WBYTE( PacketP->len , PKT_CMD_BIT | 2 ); - - /* - ** queue it! - */ - if ( !( PortP->State & RIO_DELETED ) ) { - add_transmit( PortP ); - /* - ** Count chars tx'd for port statistics reporting - */ - if ( PortP->statsGather ) - PortP->txchars += 2; - } - - if ( --( PortP->WflushFlag ) == 0 ) { - PortP->MagicFlags &= ~MAGIC_FLUSH; - } - - rio_dprintk (RIO_DEBUG_INTR, "Wflush count now stands at %d\n", - PortP->WflushFlag); - } - if ( PortP->MagicFlags & MORE_OUTPUT_EYGOR ) { - if ( PortP->MagicFlags & MAGIC_FLUSH ) { - PortP->MagicFlags |= MORE_OUTPUT_EYGOR; - } - else { - if ( !can_add_transmit( &PacketP, PortP ) ) { - rio_spin_unlock(&PortP->portSem); - continue; - } - rio_spin_unlock(&PortP->portSem); - RIOTxEnable((char *)PortP); - rio_spin_lock(&PortP->portSem); - PortP->MagicFlags &= ~MORE_OUTPUT_EYGOR; - } + /* + ** As mentioned above, this is a tacky hack to cope + ** with WFLUSH + */ + if (PortP->WflushFlag) { + rio_dprintk(RIO_DEBUG_INTR, "Want to WFLUSH mark this port\n"); + + if (PortP->InUse) + rio_dprintk(RIO_DEBUG_INTR, "FAILS - PORT IS IN USE\n"); + } + + while (PortP->WflushFlag && can_add_transmit(&PacketP, PortP) && (PortP->InUse == NOT_INUSE)) { + int p; + struct PktCmd *PktCmdP; + + rio_dprintk(RIO_DEBUG_INTR, "Add WFLUSH marker to data queue\n"); + /* + ** make it look just like a WFLUSH command + */ + PktCmdP = (struct PktCmd *) &PacketP->data[0]; + + WBYTE(PktCmdP->Command, WFLUSH); + + p = PortP->HostPort % (ushort) PORTS_PER_RTA; + + /* + ** If second block of ports for 16 port RTA, add 8 + ** to index 8-15. + */ + if (PortP->SecondBlock) + p += PORTS_PER_RTA; + + WBYTE(PktCmdP->PhbNum, p); + + /* + ** to make debuggery easier + */ + WBYTE(PacketP->data[2], 'W'); + WBYTE(PacketP->data[3], 'F'); + WBYTE(PacketP->data[4], 'L'); + WBYTE(PacketP->data[5], 'U'); + WBYTE(PacketP->data[6], 'S'); + WBYTE(PacketP->data[7], 'H'); + WBYTE(PacketP->data[8], ' '); + WBYTE(PacketP->data[9], '0' + PortP->WflushFlag); + WBYTE(PacketP->data[10], ' '); + WBYTE(PacketP->data[11], ' '); + WBYTE(PacketP->data[12], '\0'); + + /* + ** its two bytes long! + */ + WBYTE(PacketP->len, PKT_CMD_BIT | 2); + + /* + ** queue it! + */ + if (!(PortP->State & RIO_DELETED)) { + add_transmit(PortP); + /* + ** Count chars tx'd for port statistics reporting + */ + if (PortP->statsGather) + PortP->txchars += 2; + } + + if (--(PortP->WflushFlag) == 0) { + PortP->MagicFlags &= ~MAGIC_FLUSH; + } + + rio_dprintk(RIO_DEBUG_INTR, "Wflush count now stands at %d\n", PortP->WflushFlag); + } + if (PortP->MagicFlags & MORE_OUTPUT_EYGOR) { + if (PortP->MagicFlags & MAGIC_FLUSH) { + PortP->MagicFlags |= MORE_OUTPUT_EYGOR; + } else { + if (!can_add_transmit(&PacketP, PortP)) { + rio_spin_unlock(&PortP->portSem); + continue; + } + rio_spin_unlock(&PortP->portSem); + RIOTxEnable((char *) PortP); + rio_spin_lock(&PortP->portSem); + PortP->MagicFlags &= ~MORE_OUTPUT_EYGOR; + } + } + } + + + /* + ** If we can't add anything to the transmit queue, then + ** we need do none of the remaining processing. + */ + if (!can_add_transmit(&PacketP, PortP)) { + rio_spin_unlock(&PortP->portSem); + continue; + } + + rio_spin_unlock(&PortP->portSem); + RIOTxEnable((char *) PortP); + } } - } - - - /* - ** If we can't add anything to the transmit queue, then - ** we need do none of the remaining processing. - */ - if (!can_add_transmit( &PacketP, PortP ) ) { - rio_spin_unlock(&PortP->portSem); - continue; - } - - rio_spin_unlock(&PortP->portSem); - RIOTxEnable((char *)PortP); - } - } } /* @@ -551,176 +533,162 @@ int From; ** NB: Called with the tty locked. The spl from the lockb( ) is passed. ** we return the ttySpl level that we re-locked at. */ -static void -RIOReceive(p, PortP) -struct rio_info * p; -struct Port * PortP; +static void RIOReceive(p, PortP) +struct rio_info *p; +struct Port *PortP; { - struct tty_struct *TtyP; - register ushort transCount; - struct PKT *PacketP; - register uint DataCnt; - uchar * ptr; - unsigned char *buf; - int copied =0; - - static int intCount, RxIntCnt; - - /* - ** The receive data process is to remove packets from the - ** PHB until there aren't any more or the current cblock - ** is full. When this occurs, there will be some left over - ** data in the packet, that we must do something with. - ** As we haven't unhooked the packet from the read list - ** yet, we can just leave the packet there, having first - ** made a note of how far we got. This means that we need - ** a pointer per port saying where we start taking the - ** data from - this will normally be zero, but when we - ** run out of space it will be set to the offset of the - ** next byte to copy from the packet data area. The packet - ** length field is decremented by the number of bytes that - ** we succesfully removed from the packet. When this reaches - ** zero, we reset the offset pointer to be zero, and free - ** the packet from the front of the queue. - */ - - intCount++; - - TtyP = PortP->gs.tty; - if (!TtyP) { - rio_dprintk (RIO_DEBUG_INTR, "RIOReceive: tty is null. \n"); - return; - } - - if (PortP->State & RIO_THROTTLE_RX) { - rio_dprintk (RIO_DEBUG_INTR, "RIOReceive: Throttled. Can't handle more input.\n"); - return; - } - - if ( PortP->State & RIO_DELETED ) - { - while ( can_remove_receive( &PacketP, PortP ) ) - { - remove_receive( PortP ); - put_free_end( PortP->HostP, PacketP ); + struct tty_struct *TtyP; + register ushort transCount; + struct PKT *PacketP; + register uint DataCnt; + uchar *ptr; + unsigned char *buf; + int copied = 0; + + static int intCount, RxIntCnt; + + /* + ** The receive data process is to remove packets from the + ** PHB until there aren't any more or the current cblock + ** is full. When this occurs, there will be some left over + ** data in the packet, that we must do something with. + ** As we haven't unhooked the packet from the read list + ** yet, we can just leave the packet there, having first + ** made a note of how far we got. This means that we need + ** a pointer per port saying where we start taking the + ** data from - this will normally be zero, but when we + ** run out of space it will be set to the offset of the + ** next byte to copy from the packet data area. The packet + ** length field is decremented by the number of bytes that + ** we succesfully removed from the packet. When this reaches + ** zero, we reset the offset pointer to be zero, and free + ** the packet from the front of the queue. + */ + + intCount++; + + TtyP = PortP->gs.tty; + if (!TtyP) { + rio_dprintk(RIO_DEBUG_INTR, "RIOReceive: tty is null. \n"); + return; } - } - else - { - /* - ** loop, just so long as: - ** i ) there's some data ( i.e. can_remove_receive ) - ** ii ) we haven't been blocked - ** iii ) there's somewhere to put the data - ** iv ) we haven't outstayed our welcome - */ - transCount = 1; - while ( can_remove_receive(&PacketP, PortP) - && transCount) - { + + if (PortP->State & RIO_THROTTLE_RX) { + rio_dprintk(RIO_DEBUG_INTR, "RIOReceive: Throttled. Can't handle more input.\n"); + return; + } + + if (PortP->State & RIO_DELETED) { + while (can_remove_receive(&PacketP, PortP)) { + remove_receive(PortP); + put_free_end(PortP->HostP, PacketP); + } + } else { + /* + ** loop, just so long as: + ** i ) there's some data ( i.e. can_remove_receive ) + ** ii ) we haven't been blocked + ** iii ) there's somewhere to put the data + ** iv ) we haven't outstayed our welcome + */ + transCount = 1; + while (can_remove_receive(&PacketP, PortP) + && transCount) { #ifdef STATS - PortP->Stat.RxIntCnt++; -#endif /* STATS */ - RxIntCnt++; - - /* - ** check that it is not a command! - */ - if ( PacketP->len & PKT_CMD_BIT ) { - rio_dprintk (RIO_DEBUG_INTR, "RIO: unexpected command packet received on PHB\n"); - /* rio_dprint(RIO_DEBUG_INTR, (" sysport = %d\n", p->RIOPortp->PortNum)); */ - rio_dprintk (RIO_DEBUG_INTR, " dest_unit = %d\n", PacketP->dest_unit); - rio_dprintk (RIO_DEBUG_INTR, " dest_port = %d\n", PacketP->dest_port); - rio_dprintk (RIO_DEBUG_INTR, " src_unit = %d\n", PacketP->src_unit); - rio_dprintk (RIO_DEBUG_INTR, " src_port = %d\n", PacketP->src_port); - rio_dprintk (RIO_DEBUG_INTR, " len = %d\n", PacketP->len); - rio_dprintk (RIO_DEBUG_INTR, " control = %d\n", PacketP->control); - rio_dprintk (RIO_DEBUG_INTR, " csum = %d\n", PacketP->csum); - rio_dprintk (RIO_DEBUG_INTR, " data bytes: "); - for ( DataCnt=0; DataCntdata[DataCnt]); - remove_receive( PortP ); - put_free_end( PortP->HostP, PacketP ); - continue; /* with next packet */ - } - - /* - ** How many characters can we move 'upstream' ? - ** - ** Determine the minimum of the amount of data - ** available and the amount of space in which to - ** put it. - ** - ** 1. Get the packet length by masking 'len' - ** for only the length bits. - ** 2. Available space is [buffer size] - [space used] - ** - ** Transfer count is the minimum of packet length - ** and available space. - */ - - transCount = tty_buffer_request_room(TtyP, PacketP->len & PKT_LEN_MASK); - rio_dprintk (RIO_DEBUG_REC, "port %d: Copy %d bytes\n", - PortP->PortNum, transCount); - /* - ** To use the following 'kkprintfs' for debugging - change the '#undef' - ** to '#define', (this is the only place ___DEBUG_IT___ occurs in the - ** driver). - */ + PortP->Stat.RxIntCnt++; +#endif /* STATS */ + RxIntCnt++; + + /* + ** check that it is not a command! + */ + if (PacketP->len & PKT_CMD_BIT) { + rio_dprintk(RIO_DEBUG_INTR, "RIO: unexpected command packet received on PHB\n"); + /* rio_dprint(RIO_DEBUG_INTR, (" sysport = %d\n", p->RIOPortp->PortNum)); */ + rio_dprintk(RIO_DEBUG_INTR, " dest_unit = %d\n", PacketP->dest_unit); + rio_dprintk(RIO_DEBUG_INTR, " dest_port = %d\n", PacketP->dest_port); + rio_dprintk(RIO_DEBUG_INTR, " src_unit = %d\n", PacketP->src_unit); + rio_dprintk(RIO_DEBUG_INTR, " src_port = %d\n", PacketP->src_port); + rio_dprintk(RIO_DEBUG_INTR, " len = %d\n", PacketP->len); + rio_dprintk(RIO_DEBUG_INTR, " control = %d\n", PacketP->control); + rio_dprintk(RIO_DEBUG_INTR, " csum = %d\n", PacketP->csum); + rio_dprintk(RIO_DEBUG_INTR, " data bytes: "); + for (DataCnt = 0; DataCnt < PKT_MAX_DATA_LEN; DataCnt++) + rio_dprintk(RIO_DEBUG_INTR, "%d\n", PacketP->data[DataCnt]); + remove_receive(PortP); + put_free_end(PortP->HostP, PacketP); + continue; /* with next packet */ + } + + /* + ** How many characters can we move 'upstream' ? + ** + ** Determine the minimum of the amount of data + ** available and the amount of space in which to + ** put it. + ** + ** 1. Get the packet length by masking 'len' + ** for only the length bits. + ** 2. Available space is [buffer size] - [space used] + ** + ** Transfer count is the minimum of packet length + ** and available space. + */ + + transCount = tty_buffer_request_room(TtyP, PacketP->len & PKT_LEN_MASK); + rio_dprintk(RIO_DEBUG_REC, "port %d: Copy %d bytes\n", PortP->PortNum, transCount); + /* + ** To use the following 'kkprintfs' for debugging - change the '#undef' + ** to '#define', (this is the only place ___DEBUG_IT___ occurs in the + ** driver). + */ #undef ___DEBUG_IT___ #ifdef ___DEBUG_IT___ - kkprintf("I:%d R:%d P:%d Q:%d C:%d F:%x ", - intCount, - RxIntCnt, - PortP->PortNum, - TtyP->rxqueue.count, - transCount, - TtyP->flags ); + kkprintf("I:%d R:%d P:%d Q:%d C:%d F:%x ", intCount, RxIntCnt, PortP->PortNum, TtyP->rxqueue.count, transCount, TtyP->flags); #endif - ptr = (uchar *) PacketP->data + PortP->RxDataStart; + ptr = (uchar *) PacketP->data + PortP->RxDataStart; - tty_prepare_flip_string(TtyP, &buf, transCount); - rio_memcpy_fromio (buf, ptr, transCount); + tty_prepare_flip_string(TtyP, &buf, transCount); + rio_memcpy_fromio(buf, ptr, transCount); #ifdef STATS - /* - ** keep a count for statistical purposes - */ - PortP->Stat.RxCharCnt += transCount; + /* + ** keep a count for statistical purposes + */ + PortP->Stat.RxCharCnt += transCount; #endif - PortP->RxDataStart += transCount; - PacketP->len -= transCount; - copied += transCount; + PortP->RxDataStart += transCount; + PacketP->len -= transCount; + copied += transCount; #ifdef ___DEBUG_IT___ - kkprintf("T:%d L:%d\n", DataCnt, PacketP->len ); + kkprintf("T:%d L:%d\n", DataCnt, PacketP->len); #endif - if ( PacketP->len == 0 ) - { + if (PacketP->len == 0) { /* - ** If we have emptied the packet, then we can - ** free it, and reset the start pointer for - ** the next packet. - */ - remove_receive( PortP ); - put_free_end( PortP->HostP, PacketP ); - PortP->RxDataStart = 0; + ** If we have emptied the packet, then we can + ** free it, and reset the start pointer for + ** the next packet. + */ + remove_receive(PortP); + put_free_end(PortP->HostP, PacketP); + PortP->RxDataStart = 0; #ifdef STATS /* - ** more lies ( oops, I mean statistics ) - */ - PortP->Stat.RxPktCnt++; -#endif /* STATS */ - } + ** more lies ( oops, I mean statistics ) + */ + PortP->Stat.RxPktCnt++; +#endif /* STATS */ + } + } + } + if (copied) { + rio_dprintk(RIO_DEBUG_REC, "port %d: pushing tty flip buffer: %d total bytes copied.\n", PortP->PortNum, copied); + tty_flip_buffer_push(TtyP); } - } - if (copied) { - rio_dprintk (RIO_DEBUG_REC, "port %d: pushing tty flip buffer: %d total bytes copied.\n", PortP->PortNum, copied); - tty_flip_buffer_push (TtyP); - } - return; + return; } #ifdef FUTURE_RELEASE @@ -728,221 +696,210 @@ struct Port * PortP; ** The proc routine called by the line discipline to do the work for it. ** The proc routine works hand in hand with the interrupt routine. */ -int -riotproc(p, tp, cmd, port) -struct rio_info * p; +int riotproc(p, tp, cmd, port) +struct rio_info *p; register struct ttystatics *tp; int cmd; -int port; +int port; { register struct Port *PortP; int SysPort; struct PKT *PacketP; - SysPort = port; /* Believe me, it works. */ + SysPort = port; /* Believe me, it works. */ - if ( SysPort < 0 || SysPort >= RIO_PORTS ) { - rio_dprintk (RIO_DEBUG_INTR, "Illegal port %d derived from TTY in riotproc()\n",SysPort); + if (SysPort < 0 || SysPort >= RIO_PORTS) { + rio_dprintk(RIO_DEBUG_INTR, "Illegal port %d derived from TTY in riotproc()\n", SysPort); return 0; } PortP = p->RIOPortp[SysPort]; - if ((uint)PortP->PhbP < (uint)PortP->Caddr || - (uint)PortP->PhbP >= (uint)PortP->Caddr+SIXTY_FOUR_K ) { - rio_dprintk (RIO_DEBUG_INTR, "RIO: NULL or BAD PhbP on sys port %d in proc routine\n", - SysPort); - rio_dprintk (RIO_DEBUG_INTR, " PortP = 0x%x\n",PortP); - rio_dprintk (RIO_DEBUG_INTR, " PortP->PhbP = 0x%x\n",PortP->PhbP); - rio_dprintk (RIO_DEBUG_INTR, " PortP->Caddr = 0x%x\n",PortP->PhbP); - rio_dprintk (RIO_DEBUG_INTR, " PortP->HostPort = 0x%x\n",PortP->HostPort); + if ((uint) PortP->PhbP < (uint) PortP->Caddr || (uint) PortP->PhbP >= (uint) PortP->Caddr + SIXTY_FOUR_K) { + rio_dprintk(RIO_DEBUG_INTR, "RIO: NULL or BAD PhbP on sys port %d in proc routine\n", SysPort); + rio_dprintk(RIO_DEBUG_INTR, " PortP = 0x%x\n", PortP); + rio_dprintk(RIO_DEBUG_INTR, " PortP->PhbP = 0x%x\n", PortP->PhbP); + rio_dprintk(RIO_DEBUG_INTR, " PortP->Caddr = 0x%x\n", PortP->PhbP); + rio_dprintk(RIO_DEBUG_INTR, " PortP->HostPort = 0x%x\n", PortP->HostPort); return 0; } - switch(cmd) { - case T_WFLUSH: - rio_dprintk (RIO_DEBUG_INTR, "T_WFLUSH\n"); + switch (cmd) { + case T_WFLUSH: + rio_dprintk(RIO_DEBUG_INTR, "T_WFLUSH\n"); + /* + ** Because of the spooky way the RIO works, we don't need + ** to issue a flush command on any of the SET*F commands, + ** as that causes trouble with getty and login, which issue + ** these commands to incur a READ flush, and rely on the fact + ** that the line discipline does a wait for drain for them. + ** As the rio doesn't wait for drain, the write flush would + ** destroy the Password: prompt. This isn't very friendly, so + ** here we only issue a WFLUSH command if we are in the interrupt + ** routine, or we aren't executing a SET*F command. + */ + if (PortP->HostP->InIntr || !PortP->FlushCmdBodge) { /* - ** Because of the spooky way the RIO works, we don't need - ** to issue a flush command on any of the SET*F commands, - ** as that causes trouble with getty and login, which issue - ** these commands to incur a READ flush, and rely on the fact - ** that the line discipline does a wait for drain for them. - ** As the rio doesn't wait for drain, the write flush would - ** destroy the Password: prompt. This isn't very friendly, so - ** here we only issue a WFLUSH command if we are in the interrupt - ** routine, or we aren't executing a SET*F command. - */ - if ( PortP->HostP->InIntr || !PortP->FlushCmdBodge ) { - /* - ** form a wflush packet - 1 byte long, no data - */ - if ( PortP->State & RIO_DELETED ) { - rio_dprintk (RIO_DEBUG_INTR, "WFLUSH on deleted RTA\n"); - } - else { - if ( RIOPreemptiveCmd(p, PortP, WFLUSH ) == RIO_FAIL ) { - rio_dprintk (RIO_DEBUG_INTR, "T_WFLUSH Command failed\n"); - } - else - rio_dprintk (RIO_DEBUG_INTR, "T_WFLUSH Command\n"); - } - /* - ** WFLUSH operation - flush the data! - */ - PortP->TxBufferIn = PortP->TxBufferOut = 0; - } - else { - rio_dprintk (RIO_DEBUG_INTR, "T_WFLUSH Command ignored\n"); + ** form a wflush packet - 1 byte long, no data + */ + if (PortP->State & RIO_DELETED) { + rio_dprintk(RIO_DEBUG_INTR, "WFLUSH on deleted RTA\n"); + } else { + if (RIOPreemptiveCmd(p, PortP, WFLUSH) == RIO_FAIL) { + rio_dprintk(RIO_DEBUG_INTR, "T_WFLUSH Command failed\n"); + } else + rio_dprintk(RIO_DEBUG_INTR, "T_WFLUSH Command\n"); } /* - ** sort out the line discipline - */ - if (PortP->CookMode == COOK_WELL) - goto start; - break; - - case T_RESUME: - rio_dprintk (RIO_DEBUG_INTR, "T_RESUME\n"); - /* - ** send pre-emptive resume packet - */ - if ( PortP->State & RIO_DELETED ) { - rio_dprintk (RIO_DEBUG_INTR, "RESUME on deleted RTA\n"); + ** WFLUSH operation - flush the data! + */ + PortP->TxBufferIn = PortP->TxBufferOut = 0; + } else { + rio_dprintk(RIO_DEBUG_INTR, "T_WFLUSH Command ignored\n"); + } + /* + ** sort out the line discipline + */ + if (PortP->CookMode == COOK_WELL) + goto start; + break; + + case T_RESUME: + rio_dprintk(RIO_DEBUG_INTR, "T_RESUME\n"); + /* + ** send pre-emptive resume packet + */ + if (PortP->State & RIO_DELETED) { + rio_dprintk(RIO_DEBUG_INTR, "RESUME on deleted RTA\n"); + } else { + if (RIOPreemptiveCmd(p, PortP, RESUME) == RIO_FAIL) { + rio_dprintk(RIO_DEBUG_INTR, "T_RESUME Command failed\n"); } - else { - if ( RIOPreemptiveCmd(p, PortP, RESUME ) == RIO_FAIL ) { - rio_dprintk (RIO_DEBUG_INTR, "T_RESUME Command failed\n"); - } + } + /* + ** and re-start the sender software! + */ + if (PortP->CookMode == COOK_WELL) + goto start; + break; + + case T_TIME: + rio_dprintk(RIO_DEBUG_INTR, "T_TIME\n"); + /* + ** T_TIME is called when xDLY is set in oflags and + ** the line discipline timeout has expired. It's + ** function in life is to clear the TIMEOUT flag + ** and to re-start output to the port. + */ + /* + ** Fall through and re-start output + */ + case T_OUTPUT: + start: + if (PortP->MagicFlags & MAGIC_FLUSH) { + PortP->MagicFlags |= MORE_OUTPUT_EYGOR; + return 0; + } + RIOTxEnable((char *) PortP); + PortP->MagicFlags &= ~MORE_OUTPUT_EYGOR; + /*rio_dprint(RIO_DEBUG_INTR, PortP,DBG_PROC,"T_OUTPUT finished\n"); */ + break; + + case T_SUSPEND: + rio_dprintk(RIO_DEBUG_INTR, "T_SUSPEND\n"); + /* + ** send a suspend pre-emptive packet. + */ + if (PortP->State & RIO_DELETED) { + rio_dprintk(RIO_DEBUG_INTR, "SUSPEND deleted RTA\n"); + } else { + if (RIOPreemptiveCmd(p, PortP, SUSPEND) == RIO_FAIL) { + rio_dprintk(RIO_DEBUG_INTR, "T_SUSPEND Command failed\n"); } - /* - ** and re-start the sender software! - */ - if (PortP->CookMode == COOK_WELL) - goto start; - break; - - case T_TIME: - rio_dprintk (RIO_DEBUG_INTR, "T_TIME\n"); - /* - ** T_TIME is called when xDLY is set in oflags and - ** the line discipline timeout has expired. It's - ** function in life is to clear the TIMEOUT flag - ** and to re-start output to the port. - */ - /* - ** Fall through and re-start output - */ - case T_OUTPUT: -start: - if ( PortP->MagicFlags & MAGIC_FLUSH ) { - PortP->MagicFlags |= MORE_OUTPUT_EYGOR; + } + /* + ** done! + */ + break; + + case T_BLOCK: + rio_dprintk(RIO_DEBUG_INTR, "T_BLOCK\n"); + break; + + case T_RFLUSH: + rio_dprintk(RIO_DEBUG_INTR, "T_RFLUSH\n"); + if (PortP->State & RIO_DELETED) { + rio_dprintk(RIO_DEBUG_INTR, "RFLUSH on deleted RTA\n"); + PortP->RxDataStart = 0; + } else { + if (RIOPreemptiveCmd(p, PortP, RFLUSH) == RIO_FAIL) { + rio_dprintk(RIO_DEBUG_INTR, "T_RFLUSH Command failed\n"); return 0; } - RIOTxEnable((char *)PortP); - PortP->MagicFlags &= ~MORE_OUTPUT_EYGOR; - /*rio_dprint(RIO_DEBUG_INTR, PortP,DBG_PROC,"T_OUTPUT finished\n");*/ - break; - - case T_SUSPEND: - rio_dprintk (RIO_DEBUG_INTR, "T_SUSPEND\n"); - /* - ** send a suspend pre-emptive packet. - */ - if ( PortP->State & RIO_DELETED ) { - rio_dprintk (RIO_DEBUG_INTR, "SUSPEND deleted RTA\n"); - } - else { - if ( RIOPreemptiveCmd(p, PortP, SUSPEND ) == RIO_FAIL ) { - rio_dprintk (RIO_DEBUG_INTR, "T_SUSPEND Command failed\n"); - } + PortP->RxDataStart = 0; + while (can_remove_receive(&PacketP, PortP)) { + remove_receive(PortP); + ShowPacket(DBG_PROC, PacketP); + put_free_end(PortP->HostP, PacketP); } - /* - ** done! - */ - break; - - case T_BLOCK: - rio_dprintk (RIO_DEBUG_INTR, "T_BLOCK\n"); - break; - - case T_RFLUSH: - rio_dprintk (RIO_DEBUG_INTR, "T_RFLUSH\n"); - if ( PortP->State & RIO_DELETED ) { - rio_dprintk (RIO_DEBUG_INTR, "RFLUSH on deleted RTA\n"); - PortP->RxDataStart = 0; - } - else { - if ( RIOPreemptiveCmd( p, PortP, RFLUSH ) == RIO_FAIL ) { - rio_dprintk (RIO_DEBUG_INTR, "T_RFLUSH Command failed\n"); - return 0; - } - PortP->RxDataStart = 0; - while ( can_remove_receive(&PacketP, PortP) ) { - remove_receive(PortP); - ShowPacket(DBG_PROC, PacketP ); - put_free_end(PortP->HostP, PacketP ); - } - if ( PortP->PhbP->handshake == PHB_HANDSHAKE_SET ) { - /* - ** MAGIC! - */ - rio_dprintk (RIO_DEBUG_INTR, "Set receive handshake bit\n"); - PortP->PhbP->handshake |= PHB_HANDSHAKE_RESET; - } - } - break; - /* FALLTHROUGH */ - case T_UNBLOCK: - rio_dprintk (RIO_DEBUG_INTR, "T_UNBLOCK\n"); - /* - ** If there is any data to receive set a timeout to service it. - */ - RIOReceive(p, PortP); - break; - - case T_BREAK: - rio_dprintk (RIO_DEBUG_INTR, "T_BREAK\n"); - /* - ** Send a break command. For Sys V - ** this is a timed break, so we - ** send a SBREAK[time] packet - */ - /* - ** Build a BREAK command - */ - if ( PortP->State & RIO_DELETED ) { - rio_dprintk (RIO_DEBUG_INTR, "BREAK on deleted RTA\n"); + if (PortP->PhbP->handshake == PHB_HANDSHAKE_SET) { + /* + ** MAGIC! + */ + rio_dprintk(RIO_DEBUG_INTR, "Set receive handshake bit\n"); + PortP->PhbP->handshake |= PHB_HANDSHAKE_RESET; } - else { - if (RIOShortCommand(PortP,SBREAK,2, - p->RIOConf.BreakInterval)==RIO_FAIL) { - rio_dprintk (RIO_DEBUG_INTR, "SBREAK RIOShortCommand failed\n"); - } + } + break; + /* FALLTHROUGH */ + case T_UNBLOCK: + rio_dprintk(RIO_DEBUG_INTR, "T_UNBLOCK\n"); + /* + ** If there is any data to receive set a timeout to service it. + */ + RIOReceive(p, PortP); + break; + + case T_BREAK: + rio_dprintk(RIO_DEBUG_INTR, "T_BREAK\n"); + /* + ** Send a break command. For Sys V + ** this is a timed break, so we + ** send a SBREAK[time] packet + */ + /* + ** Build a BREAK command + */ + if (PortP->State & RIO_DELETED) { + rio_dprintk(RIO_DEBUG_INTR, "BREAK on deleted RTA\n"); + } else { + if (RIOShortCommand(PortP, SBREAK, 2, p->RIOConf.BreakInterval) == RIO_FAIL) { + rio_dprintk(RIO_DEBUG_INTR, "SBREAK RIOShortCommand failed\n"); } - - /* - ** done! - */ - break; - - case T_INPUT: - rio_dprintk (RIO_DEBUG_INTR, "Proc T_INPUT called - I don't know what to do!\n"); - break; - case T_PARM: - rio_dprintk (RIO_DEBUG_INTR, "Proc T_PARM called - I don't know what to do!\n"); - break; - - case T_SWTCH: - rio_dprintk (RIO_DEBUG_INTR, "Proc T_SWTCH called - I don't know what to do!\n"); - break; - - default: - rio_dprintk (RIO_DEBUG_INTR, "Proc UNKNOWN command %d\n",cmd); + } + + /* + ** done! + */ + break; + + case T_INPUT: + rio_dprintk(RIO_DEBUG_INTR, "Proc T_INPUT called - I don't know what to do!\n"); + break; + case T_PARM: + rio_dprintk(RIO_DEBUG_INTR, "Proc T_PARM called - I don't know what to do!\n"); + break; + + case T_SWTCH: + rio_dprintk(RIO_DEBUG_INTR, "Proc T_SWTCH called - I don't know what to do!\n"); + break; + + default: + rio_dprintk(RIO_DEBUG_INTR, "Proc UNKNOWN command %d\n", cmd); } /* - ** T_OUTPUT returns without passing through this point! - */ - /*rio_dprint(RIO_DEBUG_INTR, PortP,DBG_PROC,"riotproc done\n");*/ - return(0); + ** T_OUTPUT returns without passing through this point! + */ + /*rio_dprint(RIO_DEBUG_INTR, PortP,DBG_PROC,"riotproc done\n"); */ + return (0); } #endif diff --git a/drivers/char/rio/rioioctl.h b/drivers/char/rio/rioioctl.h index c3d679733c9a..14b83fae75c8 100644 --- a/drivers/char/rio/rioioctl.h +++ b/drivers/char/rio/rioioctl.h @@ -42,14 +42,14 @@ static char *_rioioctl_h_sccs_ = "@(#)rioioctl.h 1.2"; */ struct portStats { - int port; - int gather; - ulong txchars; - ulong rxchars; - ulong opens; - ulong closes; - ulong ioctls; -}; + int port; + int gather; + ulong txchars; + ulong rxchars; + ulong opens; + ulong closes; + ulong ioctls; +}; #define rIOC ('r'<<8) @@ -100,4 +100,4 @@ struct portStats { #define RIO_RESET_PORT_STATS (RIOC | 194) #define RIO_GET_PORT_STATS (RIOC | 195) -#endif /* __rioioctl_h__ */ +#endif /* __rioioctl_h__ */ diff --git a/drivers/char/rio/rioparam.c b/drivers/char/rio/rioparam.c index f10916326ecc..4cc7f4942bfc 100644 --- a/drivers/char/rio/rioparam.c +++ b/drivers/char/rio/rioparam.c @@ -157,46 +157,44 @@ static char *_rioparam_c_sccs_ = "@(#)rioparam.c 1.3"; ** NB. for MPX ** tty lock must NOT have been previously acquired. */ -int -RIOParam(PortP, cmd, Modem, SleepFlag) +int RIOParam(PortP, cmd, Modem, SleepFlag) struct Port *PortP; int cmd; int Modem; -int SleepFlag; +int SleepFlag; { register struct tty_struct *TtyP; - int retval; + int retval; register struct phb_param *phb_param_ptr; PKT *PacketP; int res; - uchar Cor1=0, Cor2=0, Cor4=0, Cor5=0; - uchar TxXon=0, TxXoff=0, RxXon=0, RxXoff=0; - uchar LNext=0, TxBaud=0, RxBaud=0; - int retries = 0xff; + uchar Cor1 = 0, Cor2 = 0, Cor4 = 0, Cor5 = 0; + uchar TxXon = 0, TxXoff = 0, RxXon = 0, RxXoff = 0; + uchar LNext = 0, TxBaud = 0, RxBaud = 0; + int retries = 0xff; unsigned long flags; - func_enter (); + func_enter(); TtyP = PortP->gs.tty; - rio_dprintk (RIO_DEBUG_PARAM, "RIOParam: Port:%d cmd:%d Modem:%d SleepFlag:%d Mapped: %d, tty=%p\n", - PortP->PortNum, cmd, Modem, SleepFlag, PortP->Mapped, TtyP); + rio_dprintk(RIO_DEBUG_PARAM, "RIOParam: Port:%d cmd:%d Modem:%d SleepFlag:%d Mapped: %d, tty=%p\n", PortP->PortNum, cmd, Modem, SleepFlag, PortP->Mapped, TtyP); if (!TtyP) { - rio_dprintk (RIO_DEBUG_PARAM, "Can't call rioparam with null tty.\n"); + rio_dprintk(RIO_DEBUG_PARAM, "Can't call rioparam with null tty.\n"); - func_exit (); + func_exit(); - return RIO_FAIL; + return RIO_FAIL; } - rio_spin_lock_irqsave(&PortP->portSem, flags ); + rio_spin_lock_irqsave(&PortP->portSem, flags); if (cmd == OPEN) { /* - ** If the port is set to store or lock the parameters, and it is - ** paramed with OPEN, we want to restore the saved port termio, but - ** only if StoredTermio has been saved, i.e. NOT 1st open after reboot. - */ + ** If the port is set to store or lock the parameters, and it is + ** paramed with OPEN, we want to restore the saved port termio, but + ** only if StoredTermio has been saved, i.e. NOT 1st open after reboot. + */ #if 0 if (PortP->FirstOpen) { PortP->StoredTty.iflag = TtyP->tm.c_iflag; @@ -207,9 +205,8 @@ int SleepFlag; for (i = 0; i < NCC + 5; i++) PortP->StoredTty.cc[i] = TtyP->tm.c_cc[i]; PortP->FirstOpen = 0; - } - else if (PortP->Store || PortP->Lock) { - rio_dprintk (RIO_DEBUG_PARAM, "OPEN: Restoring stored/locked params\n"); + } else if (PortP->Store || PortP->Lock) { + rio_dprintk(RIO_DEBUG_PARAM, "OPEN: Restoring stored/locked params\n"); TtyP->tm.c_iflag = PortP->StoredTty.iflag; TtyP->tm.c_oflag = PortP->StoredTty.oflag; TtyP->tm.c_cflag = PortP->StoredTty.cflag; @@ -222,230 +219,222 @@ int SleepFlag; } /* - ** wait for space - */ - while ( !(res=can_add_transmit(&PacketP,PortP)) || - (PortP->InUse != NOT_INUSE) ) { - if (retries -- <= 0) { + ** wait for space + */ + while (!(res = can_add_transmit(&PacketP, PortP)) || (PortP->InUse != NOT_INUSE)) { + if (retries-- <= 0) { break; } - if ( PortP->InUse != NOT_INUSE ) { - rio_dprintk (RIO_DEBUG_PARAM, "Port IN_USE for pre-emptive command\n"); + if (PortP->InUse != NOT_INUSE) { + rio_dprintk(RIO_DEBUG_PARAM, "Port IN_USE for pre-emptive command\n"); } - if ( !res ) { - rio_dprintk (RIO_DEBUG_PARAM, "Port has no space on transmit queue\n"); + if (!res) { + rio_dprintk(RIO_DEBUG_PARAM, "Port has no space on transmit queue\n"); } - if ( SleepFlag != OK_TO_SLEEP ) { - rio_spin_unlock_irqrestore( &PortP->portSem, flags); + if (SleepFlag != OK_TO_SLEEP) { + rio_spin_unlock_irqrestore(&PortP->portSem, flags); func_exit(); - + return RIO_FAIL; } - rio_dprintk (RIO_DEBUG_PARAM, "wait for can_add_transmit\n"); - rio_spin_unlock_irqrestore( &PortP->portSem, flags); + rio_dprintk(RIO_DEBUG_PARAM, "wait for can_add_transmit\n"); + rio_spin_unlock_irqrestore(&PortP->portSem, flags); retval = RIODelay(PortP, HUNDRED_MS); - rio_spin_lock_irqsave( &PortP->portSem, flags); + rio_spin_lock_irqsave(&PortP->portSem, flags); if (retval == RIO_FAIL) { - rio_dprintk (RIO_DEBUG_PARAM, "wait for can_add_transmit broken by signal\n"); - rio_spin_unlock_irqrestore( &PortP->portSem, flags); + rio_dprintk(RIO_DEBUG_PARAM, "wait for can_add_transmit broken by signal\n"); + rio_spin_unlock_irqrestore(&PortP->portSem, flags); pseterr(EINTR); func_exit(); return RIO_FAIL; } - if ( PortP->State & RIO_DELETED ) { - rio_spin_unlock_irqrestore( &PortP->portSem, flags); - func_exit (); + if (PortP->State & RIO_DELETED) { + rio_spin_unlock_irqrestore(&PortP->portSem, flags); + func_exit(); return RIO_SUCCESS; } } if (!res) { - rio_spin_unlock_irqrestore( &PortP->portSem, flags); - func_exit (); + rio_spin_unlock_irqrestore(&PortP->portSem, flags); + func_exit(); return RIO_FAIL; } - rio_dprintk (RIO_DEBUG_PARAM, "can_add_transmit() returns %x\n",res); - rio_dprintk (RIO_DEBUG_PARAM, "Packet is 0x%x\n",(int) PacketP); + rio_dprintk(RIO_DEBUG_PARAM, "can_add_transmit() returns %x\n", res); + rio_dprintk(RIO_DEBUG_PARAM, "Packet is 0x%x\n", (int) PacketP); - phb_param_ptr = (struct phb_param *)PacketP->data; + phb_param_ptr = (struct phb_param *) PacketP->data; #if 0 /* - ** COR 1 - */ - if ( TtyP->tm.c_iflag & INPCK ) { - rio_dprintk (RIO_DEBUG_PARAM, "Parity checking on input enabled\n"); + ** COR 1 + */ + if (TtyP->tm.c_iflag & INPCK) { + rio_dprintk(RIO_DEBUG_PARAM, "Parity checking on input enabled\n"); Cor1 |= COR1_INPCK; } #endif - switch ( TtyP->termios->c_cflag & CSIZE ) { - case CS5: + switch (TtyP->termios->c_cflag & CSIZE) { + case CS5: { - rio_dprintk (RIO_DEBUG_PARAM, "5 bit data\n"); + rio_dprintk(RIO_DEBUG_PARAM, "5 bit data\n"); Cor1 |= COR1_5BITS; break; } - case CS6: + case CS6: { - rio_dprintk (RIO_DEBUG_PARAM, "6 bit data\n"); + rio_dprintk(RIO_DEBUG_PARAM, "6 bit data\n"); Cor1 |= COR1_6BITS; break; } - case CS7: + case CS7: { - rio_dprintk (RIO_DEBUG_PARAM, "7 bit data\n"); + rio_dprintk(RIO_DEBUG_PARAM, "7 bit data\n"); Cor1 |= COR1_7BITS; break; } - case CS8: + case CS8: { - rio_dprintk (RIO_DEBUG_PARAM, "8 bit data\n"); + rio_dprintk(RIO_DEBUG_PARAM, "8 bit data\n"); Cor1 |= COR1_8BITS; break; } } - if ( TtyP->termios->c_cflag & CSTOPB ) { - rio_dprintk (RIO_DEBUG_PARAM, "2 stop bits\n"); + if (TtyP->termios->c_cflag & CSTOPB) { + rio_dprintk(RIO_DEBUG_PARAM, "2 stop bits\n"); Cor1 |= COR1_2STOP; - } - else { - rio_dprintk (RIO_DEBUG_PARAM, "1 stop bit\n"); + } else { + rio_dprintk(RIO_DEBUG_PARAM, "1 stop bit\n"); Cor1 |= COR1_1STOP; } - if ( TtyP->termios->c_cflag & PARENB ) { - rio_dprintk (RIO_DEBUG_PARAM, "Enable parity\n"); + if (TtyP->termios->c_cflag & PARENB) { + rio_dprintk(RIO_DEBUG_PARAM, "Enable parity\n"); Cor1 |= COR1_NORMAL; - } - else { - rio_dprintk (RIO_DEBUG_PARAM, "Disable parity\n"); + } else { + rio_dprintk(RIO_DEBUG_PARAM, "Disable parity\n"); Cor1 |= COR1_NOP; } - if ( TtyP->termios->c_cflag & PARODD ) { - rio_dprintk (RIO_DEBUG_PARAM, "Odd parity\n"); + if (TtyP->termios->c_cflag & PARODD) { + rio_dprintk(RIO_DEBUG_PARAM, "Odd parity\n"); Cor1 |= COR1_ODD; - } - else { - rio_dprintk (RIO_DEBUG_PARAM, "Even parity\n"); - Cor1 |= COR1_EVEN; + } else { + rio_dprintk(RIO_DEBUG_PARAM, "Even parity\n"); + Cor1 |= COR1_EVEN; } /* - ** COR 2 - */ - if ( TtyP->termios->c_iflag & IXON ) { - rio_dprintk (RIO_DEBUG_PARAM, "Enable start/stop output control\n"); + ** COR 2 + */ + if (TtyP->termios->c_iflag & IXON) { + rio_dprintk(RIO_DEBUG_PARAM, "Enable start/stop output control\n"); Cor2 |= COR2_IXON; - } - else { - if ( PortP->Config & RIO_IXON ) { - rio_dprintk (RIO_DEBUG_PARAM, "Force enable start/stop output control\n"); + } else { + if (PortP->Config & RIO_IXON) { + rio_dprintk(RIO_DEBUG_PARAM, "Force enable start/stop output control\n"); Cor2 |= COR2_IXON; - } - else - rio_dprintk (RIO_DEBUG_PARAM, "IXON has been disabled.\n"); + } else + rio_dprintk(RIO_DEBUG_PARAM, "IXON has been disabled.\n"); } if (TtyP->termios->c_iflag & IXANY) { - if ( PortP->Config & RIO_IXANY ) { - rio_dprintk (RIO_DEBUG_PARAM, "Enable any key to restart output\n"); + if (PortP->Config & RIO_IXANY) { + rio_dprintk(RIO_DEBUG_PARAM, "Enable any key to restart output\n"); Cor2 |= COR2_IXANY; - } - else - rio_dprintk (RIO_DEBUG_PARAM, "IXANY has been disabled due to sanity reasons.\n"); + } else + rio_dprintk(RIO_DEBUG_PARAM, "IXANY has been disabled due to sanity reasons.\n"); } - if ( TtyP->termios->c_iflag & IXOFF ) { - rio_dprintk (RIO_DEBUG_PARAM, "Enable start/stop input control 2\n"); + if (TtyP->termios->c_iflag & IXOFF) { + rio_dprintk(RIO_DEBUG_PARAM, "Enable start/stop input control 2\n"); Cor2 |= COR2_IXOFF; } - if ( TtyP->termios->c_cflag & HUPCL ) { - rio_dprintk (RIO_DEBUG_PARAM, "Hangup on last close\n"); + if (TtyP->termios->c_cflag & HUPCL) { + rio_dprintk(RIO_DEBUG_PARAM, "Hangup on last close\n"); Cor2 |= COR2_HUPCL; } - if ( C_CRTSCTS (TtyP)) { - rio_dprintk (RIO_DEBUG_PARAM, "Rx hardware flow control enabled\n"); + if (C_CRTSCTS(TtyP)) { + rio_dprintk(RIO_DEBUG_PARAM, "Rx hardware flow control enabled\n"); Cor2 |= COR2_CTSFLOW; Cor2 |= COR2_RTSFLOW; } else { - rio_dprintk (RIO_DEBUG_PARAM, "Rx hardware flow control disabled\n"); + rio_dprintk(RIO_DEBUG_PARAM, "Rx hardware flow control disabled\n"); Cor2 &= ~COR2_CTSFLOW; Cor2 &= ~COR2_RTSFLOW; } - if ( TtyP->termios->c_cflag & CLOCAL ) { - rio_dprintk (RIO_DEBUG_PARAM, "Local line\n"); - } - else { - rio_dprintk (RIO_DEBUG_PARAM, "Possible Modem line\n"); + if (TtyP->termios->c_cflag & CLOCAL) { + rio_dprintk(RIO_DEBUG_PARAM, "Local line\n"); + } else { + rio_dprintk(RIO_DEBUG_PARAM, "Possible Modem line\n"); } /* - ** COR 4 (there is no COR 3) - */ - if ( TtyP->termios->c_iflag & IGNBRK ) { - rio_dprintk (RIO_DEBUG_PARAM, "Ignore break condition\n"); + ** COR 4 (there is no COR 3) + */ + if (TtyP->termios->c_iflag & IGNBRK) { + rio_dprintk(RIO_DEBUG_PARAM, "Ignore break condition\n"); Cor4 |= COR4_IGNBRK; } - if ( !(TtyP->termios->c_iflag & BRKINT) ) { - rio_dprintk (RIO_DEBUG_PARAM, "Break generates NULL condition\n"); + if (!(TtyP->termios->c_iflag & BRKINT)) { + rio_dprintk(RIO_DEBUG_PARAM, "Break generates NULL condition\n"); Cor4 |= COR4_NBRKINT; } else { - rio_dprintk (RIO_DEBUG_PARAM, "Interrupt on break condition\n"); + rio_dprintk(RIO_DEBUG_PARAM, "Interrupt on break condition\n"); } - if ( TtyP->termios->c_iflag & INLCR ) { - rio_dprintk (RIO_DEBUG_PARAM, "Map newline to carriage return on input\n"); + if (TtyP->termios->c_iflag & INLCR) { + rio_dprintk(RIO_DEBUG_PARAM, "Map newline to carriage return on input\n"); Cor4 |= COR4_INLCR; } - if ( TtyP->termios->c_iflag & IGNCR ) { - rio_dprintk (RIO_DEBUG_PARAM, "Ignore carriage return on input\n"); + if (TtyP->termios->c_iflag & IGNCR) { + rio_dprintk(RIO_DEBUG_PARAM, "Ignore carriage return on input\n"); Cor4 |= COR4_IGNCR; } - if ( TtyP->termios->c_iflag & ICRNL ) { - rio_dprintk (RIO_DEBUG_PARAM, "Map carriage return to newline on input\n"); + if (TtyP->termios->c_iflag & ICRNL) { + rio_dprintk(RIO_DEBUG_PARAM, "Map carriage return to newline on input\n"); Cor4 |= COR4_ICRNL; } - if ( TtyP->termios->c_iflag & IGNPAR ) { - rio_dprintk (RIO_DEBUG_PARAM, "Ignore characters with parity errors\n"); + if (TtyP->termios->c_iflag & IGNPAR) { + rio_dprintk(RIO_DEBUG_PARAM, "Ignore characters with parity errors\n"); Cor4 |= COR4_IGNPAR; } - if ( TtyP->termios->c_iflag & PARMRK ) { - rio_dprintk (RIO_DEBUG_PARAM, "Mark parity errors\n"); + if (TtyP->termios->c_iflag & PARMRK) { + rio_dprintk(RIO_DEBUG_PARAM, "Mark parity errors\n"); Cor4 |= COR4_PARMRK; } /* - ** Set the RAISEMOD flag to ensure that the modem lines are raised - ** on reception of a config packet. - ** The download code handles the zero baud condition. - */ + ** Set the RAISEMOD flag to ensure that the modem lines are raised + ** on reception of a config packet. + ** The download code handles the zero baud condition. + */ Cor4 |= COR4_RAISEMOD; /* - ** COR 5 - */ + ** COR 5 + */ Cor5 = COR5_CMOE; /* - ** Set to monitor tbusy/tstop (or not). - */ + ** Set to monitor tbusy/tstop (or not). + */ if (PortP->MonitorTstate) Cor5 |= COR5_TSTATE_ON; @@ -453,182 +442,195 @@ int SleepFlag; Cor5 |= COR5_TSTATE_OFF; /* - ** Could set LNE here if you wanted LNext processing. SVR4 will use it. - */ - if ( TtyP->termios->c_iflag & ISTRIP ) { - rio_dprintk (RIO_DEBUG_PARAM, "Strip input characters\n"); - if (! (PortP->State & RIO_TRIAD_MODE)) { + ** Could set LNE here if you wanted LNext processing. SVR4 will use it. + */ + if (TtyP->termios->c_iflag & ISTRIP) { + rio_dprintk(RIO_DEBUG_PARAM, "Strip input characters\n"); + if (!(PortP->State & RIO_TRIAD_MODE)) { Cor5 |= COR5_ISTRIP; } } - if ( TtyP->termios->c_oflag & ONLCR ) { - rio_dprintk (RIO_DEBUG_PARAM, "Map newline to carriage-return, newline on output\n"); - if ( PortP->CookMode == COOK_MEDIUM ) + if (TtyP->termios->c_oflag & ONLCR) { + rio_dprintk(RIO_DEBUG_PARAM, "Map newline to carriage-return, newline on output\n"); + if (PortP->CookMode == COOK_MEDIUM) Cor5 |= COR5_ONLCR; } - if ( TtyP->termios->c_oflag & OCRNL ) { - rio_dprintk (RIO_DEBUG_PARAM, "Map carriage return to newline on output\n"); - if ( PortP->CookMode == COOK_MEDIUM ) + if (TtyP->termios->c_oflag & OCRNL) { + rio_dprintk(RIO_DEBUG_PARAM, "Map carriage return to newline on output\n"); + if (PortP->CookMode == COOK_MEDIUM) Cor5 |= COR5_OCRNL; } - if ( ( TtyP->termios->c_oflag & TABDLY) == TAB3 ) { - rio_dprintk (RIO_DEBUG_PARAM, "Tab delay 3 set\n"); - if ( PortP->CookMode == COOK_MEDIUM ) + if ((TtyP->termios->c_oflag & TABDLY) == TAB3) { + rio_dprintk(RIO_DEBUG_PARAM, "Tab delay 3 set\n"); + if (PortP->CookMode == COOK_MEDIUM) Cor5 |= COR5_TAB3; } /* - ** Flow control bytes. - */ + ** Flow control bytes. + */ TxXon = TtyP->termios->c_cc[VSTART]; TxXoff = TtyP->termios->c_cc[VSTOP]; RxXon = TtyP->termios->c_cc[VSTART]; RxXoff = TtyP->termios->c_cc[VSTOP]; /* - ** LNEXT byte - */ + ** LNEXT byte + */ LNext = 0; /* - ** Baud rate bytes - */ - rio_dprintk (RIO_DEBUG_PARAM, "Mapping of rx/tx baud %x (%x)\n", - TtyP->termios->c_cflag, CBAUD); + ** Baud rate bytes + */ + rio_dprintk(RIO_DEBUG_PARAM, "Mapping of rx/tx baud %x (%x)\n", TtyP->termios->c_cflag, CBAUD); switch (TtyP->termios->c_cflag & CBAUD) { #define e(b) case B ## b : RxBaud = TxBaud = RIO_B ## b ;break - e(50);e(75);e(110);e(134);e(150);e(200);e(300);e(600);e(1200); - e(1800);e(2400);e(4800);e(9600);e(19200);e(38400);e(57600); - e(115200); /* e(230400);e(460800); e(921600); */ + e(50); + e(75); + e(110); + e(134); + e(150); + e(200); + e(300); + e(600); + e(1200); + e(1800); + e(2400); + e(4800); + e(9600); + e(19200); + e(38400); + e(57600); + e(115200); /* e(230400);e(460800); e(921600); */ } /* XXX MIssing conversion table. XXX */ - /* (TtyP->termios->c_cflag & V_CBAUD); */ + /* (TtyP->termios->c_cflag & V_CBAUD); */ - rio_dprintk (RIO_DEBUG_PARAM, "tx baud 0x%x, rx baud 0x%x\n", TxBaud, RxBaud); + rio_dprintk(RIO_DEBUG_PARAM, "tx baud 0x%x, rx baud 0x%x\n", TxBaud, RxBaud); /* - ** Leftovers - */ - if ( TtyP->termios->c_cflag & CREAD ) - rio_dprintk (RIO_DEBUG_PARAM, "Enable receiver\n"); + ** Leftovers + */ + if (TtyP->termios->c_cflag & CREAD) + rio_dprintk(RIO_DEBUG_PARAM, "Enable receiver\n"); #ifdef RCV1EN - if ( TtyP->termios->c_cflag & RCV1EN ) - rio_dprintk (RIO_DEBUG_PARAM, "RCV1EN (?)\n"); + if (TtyP->termios->c_cflag & RCV1EN) + rio_dprintk(RIO_DEBUG_PARAM, "RCV1EN (?)\n"); #endif #ifdef XMT1EN - if ( TtyP->termios->c_cflag & XMT1EN ) - rio_dprintk (RIO_DEBUG_PARAM, "XMT1EN (?)\n"); + if (TtyP->termios->c_cflag & XMT1EN) + rio_dprintk(RIO_DEBUG_PARAM, "XMT1EN (?)\n"); #endif #if 0 - if ( TtyP->termios->c_cflag & LOBLK ) - rio_dprintk (RIO_DEBUG_PARAM, "LOBLK - JCL output blocks when not current\n"); + if (TtyP->termios->c_cflag & LOBLK) + rio_dprintk(RIO_DEBUG_PARAM, "LOBLK - JCL output blocks when not current\n"); #endif - if ( TtyP->termios->c_lflag & ISIG ) - rio_dprintk (RIO_DEBUG_PARAM, "Input character signal generating enabled\n"); - if ( TtyP->termios->c_lflag & ICANON ) - rio_dprintk (RIO_DEBUG_PARAM, "Canonical input: erase and kill enabled\n"); - if ( TtyP->termios->c_lflag & XCASE ) - rio_dprintk (RIO_DEBUG_PARAM, "Canonical upper/lower presentation\n"); - if ( TtyP->termios->c_lflag & ECHO ) - rio_dprintk (RIO_DEBUG_PARAM, "Enable input echo\n"); - if ( TtyP->termios->c_lflag & ECHOE ) - rio_dprintk (RIO_DEBUG_PARAM, "Enable echo erase\n"); - if ( TtyP->termios->c_lflag & ECHOK ) - rio_dprintk (RIO_DEBUG_PARAM, "Enable echo kill\n"); - if ( TtyP->termios->c_lflag & ECHONL ) - rio_dprintk (RIO_DEBUG_PARAM, "Enable echo newline\n"); - if ( TtyP->termios->c_lflag & NOFLSH ) - rio_dprintk (RIO_DEBUG_PARAM, "Disable flush after interrupt or quit\n"); + if (TtyP->termios->c_lflag & ISIG) + rio_dprintk(RIO_DEBUG_PARAM, "Input character signal generating enabled\n"); + if (TtyP->termios->c_lflag & ICANON) + rio_dprintk(RIO_DEBUG_PARAM, "Canonical input: erase and kill enabled\n"); + if (TtyP->termios->c_lflag & XCASE) + rio_dprintk(RIO_DEBUG_PARAM, "Canonical upper/lower presentation\n"); + if (TtyP->termios->c_lflag & ECHO) + rio_dprintk(RIO_DEBUG_PARAM, "Enable input echo\n"); + if (TtyP->termios->c_lflag & ECHOE) + rio_dprintk(RIO_DEBUG_PARAM, "Enable echo erase\n"); + if (TtyP->termios->c_lflag & ECHOK) + rio_dprintk(RIO_DEBUG_PARAM, "Enable echo kill\n"); + if (TtyP->termios->c_lflag & ECHONL) + rio_dprintk(RIO_DEBUG_PARAM, "Enable echo newline\n"); + if (TtyP->termios->c_lflag & NOFLSH) + rio_dprintk(RIO_DEBUG_PARAM, "Disable flush after interrupt or quit\n"); #ifdef TOSTOP - if ( TtyP->termios->c_lflag & TOSTOP ) - rio_dprintk (RIO_DEBUG_PARAM, "Send SIGTTOU for background output\n"); + if (TtyP->termios->c_lflag & TOSTOP) + rio_dprintk(RIO_DEBUG_PARAM, "Send SIGTTOU for background output\n"); #endif #ifdef XCLUDE - if ( TtyP->termios->c_lflag & XCLUDE ) - rio_dprintk (RIO_DEBUG_PARAM, "Exclusive use of this line\n"); + if (TtyP->termios->c_lflag & XCLUDE) + rio_dprintk(RIO_DEBUG_PARAM, "Exclusive use of this line\n"); #endif - if ( TtyP->termios->c_iflag & IUCLC ) - rio_dprintk (RIO_DEBUG_PARAM, "Map uppercase to lowercase on input\n"); - if ( TtyP->termios->c_oflag & OPOST ) - rio_dprintk (RIO_DEBUG_PARAM, "Enable output post-processing\n"); - if ( TtyP->termios->c_oflag & OLCUC ) - rio_dprintk (RIO_DEBUG_PARAM, "Map lowercase to uppercase on output\n"); - if ( TtyP->termios->c_oflag & ONOCR ) - rio_dprintk (RIO_DEBUG_PARAM, "No carriage return output at column 0\n"); - if ( TtyP->termios->c_oflag & ONLRET ) - rio_dprintk (RIO_DEBUG_PARAM, "Newline performs carriage return function\n"); - if ( TtyP->termios->c_oflag & OFILL ) - rio_dprintk (RIO_DEBUG_PARAM, "Use fill characters for delay\n"); - if ( TtyP->termios->c_oflag & OFDEL ) - rio_dprintk (RIO_DEBUG_PARAM, "Fill character is DEL\n"); - if ( TtyP->termios->c_oflag & NLDLY ) - rio_dprintk (RIO_DEBUG_PARAM, "Newline delay set\n"); - if ( TtyP->termios->c_oflag & CRDLY ) - rio_dprintk (RIO_DEBUG_PARAM, "Carriage return delay set\n"); - if ( TtyP->termios->c_oflag & TABDLY ) - rio_dprintk (RIO_DEBUG_PARAM, "Tab delay set\n"); + if (TtyP->termios->c_iflag & IUCLC) + rio_dprintk(RIO_DEBUG_PARAM, "Map uppercase to lowercase on input\n"); + if (TtyP->termios->c_oflag & OPOST) + rio_dprintk(RIO_DEBUG_PARAM, "Enable output post-processing\n"); + if (TtyP->termios->c_oflag & OLCUC) + rio_dprintk(RIO_DEBUG_PARAM, "Map lowercase to uppercase on output\n"); + if (TtyP->termios->c_oflag & ONOCR) + rio_dprintk(RIO_DEBUG_PARAM, "No carriage return output at column 0\n"); + if (TtyP->termios->c_oflag & ONLRET) + rio_dprintk(RIO_DEBUG_PARAM, "Newline performs carriage return function\n"); + if (TtyP->termios->c_oflag & OFILL) + rio_dprintk(RIO_DEBUG_PARAM, "Use fill characters for delay\n"); + if (TtyP->termios->c_oflag & OFDEL) + rio_dprintk(RIO_DEBUG_PARAM, "Fill character is DEL\n"); + if (TtyP->termios->c_oflag & NLDLY) + rio_dprintk(RIO_DEBUG_PARAM, "Newline delay set\n"); + if (TtyP->termios->c_oflag & CRDLY) + rio_dprintk(RIO_DEBUG_PARAM, "Carriage return delay set\n"); + if (TtyP->termios->c_oflag & TABDLY) + rio_dprintk(RIO_DEBUG_PARAM, "Tab delay set\n"); #if 0 - if ( TtyP->termios->c_oflag & BSDLY ) - rio_dprintk (RIO_DEBUG_PARAM, "Back-space delay set\n"); - if ( TtyP->termios->c_oflag & VTDLY ) - rio_dprintk (RIO_DEBUG_PARAM, "Vertical tab delay set\n"); - if ( TtyP->termios->c_oflag & FFDLY ) - rio_dprintk (RIO_DEBUG_PARAM, "Form-feed delay set\n"); + if (TtyP->termios->c_oflag & BSDLY) + rio_dprintk(RIO_DEBUG_PARAM, "Back-space delay set\n"); + if (TtyP->termios->c_oflag & VTDLY) + rio_dprintk(RIO_DEBUG_PARAM, "Vertical tab delay set\n"); + if (TtyP->termios->c_oflag & FFDLY) + rio_dprintk(RIO_DEBUG_PARAM, "Form-feed delay set\n"); #endif /* - ** These things are kind of useful in a later life! - */ + ** These things are kind of useful in a later life! + */ PortP->Cor2Copy = Cor2; - if ( PortP->State & RIO_DELETED ) { - rio_spin_unlock_irqrestore( &PortP->portSem, flags); - func_exit (); + if (PortP->State & RIO_DELETED) { + rio_spin_unlock_irqrestore(&PortP->portSem, flags); + func_exit(); return RIO_FAIL; } /* - ** Actually write the info into the packet to be sent - */ - WBYTE(phb_param_ptr->Cmd, cmd); - WBYTE(phb_param_ptr->Cor1, Cor1); - WBYTE(phb_param_ptr->Cor2, Cor2); - WBYTE(phb_param_ptr->Cor4, Cor4); - WBYTE(phb_param_ptr->Cor5, Cor5); - WBYTE(phb_param_ptr->TxXon, TxXon); - WBYTE(phb_param_ptr->RxXon, RxXon); + ** Actually write the info into the packet to be sent + */ + WBYTE(phb_param_ptr->Cmd, cmd); + WBYTE(phb_param_ptr->Cor1, Cor1); + WBYTE(phb_param_ptr->Cor2, Cor2); + WBYTE(phb_param_ptr->Cor4, Cor4); + WBYTE(phb_param_ptr->Cor5, Cor5); + WBYTE(phb_param_ptr->TxXon, TxXon); + WBYTE(phb_param_ptr->RxXon, RxXon); WBYTE(phb_param_ptr->TxXoff, TxXoff); WBYTE(phb_param_ptr->RxXoff, RxXoff); - WBYTE(phb_param_ptr->LNext, LNext); + WBYTE(phb_param_ptr->LNext, LNext); WBYTE(phb_param_ptr->TxBaud, TxBaud); WBYTE(phb_param_ptr->RxBaud, RxBaud); /* - ** Set the length/command field - */ - WBYTE(PacketP->len , 12 | PKT_CMD_BIT); + ** Set the length/command field + */ + WBYTE(PacketP->len, 12 | PKT_CMD_BIT); /* - ** The packet is formed - now, whack it off - ** to its final destination: - */ + ** The packet is formed - now, whack it off + ** to its final destination: + */ add_transmit(PortP); /* - ** Count characters transmitted for port statistics reporting - */ + ** Count characters transmitted for port statistics reporting + */ if (PortP->statsGather) PortP->txchars += 12; - rio_spin_unlock_irqrestore( &PortP->portSem, flags); + rio_spin_unlock_irqrestore(&PortP->portSem, flags); - rio_dprintk (RIO_DEBUG_PARAM, "add_transmit returned.\n"); + rio_dprintk(RIO_DEBUG_PARAM, "add_transmit returned.\n"); /* - ** job done. - */ - func_exit (); + ** job done. + */ + func_exit(); return RIO_SUCCESS; } @@ -638,16 +640,15 @@ int SleepFlag; ** We can add another packet to a transmit queue if the packet pointer pointed ** to by the TxAdd pointer has PKT_IN_USE clear in its address. */ -int -can_add_transmit(PktP, PortP) +int can_add_transmit(PktP, PortP) PKT **PktP; -struct Port *PortP; +struct Port *PortP; { register PKT *tp; - *PktP = tp = (PKT *)RIO_PTR(PortP->Caddr,RWORD(*PortP->TxAdd)); + *PktP = tp = (PKT *) RIO_PTR(PortP->Caddr, RWORD(*PortP->TxAdd)); - return !((uint)tp & PKT_IN_USE); + return !((uint) tp & PKT_IN_USE); } /* @@ -655,25 +656,22 @@ struct Port *PortP; ** and then move the TxAdd pointer along one position to point to the next ** packet pointer. You must wrap the pointer from the end back to the start. */ -void -add_transmit(PortP) -struct Port *PortP; +void add_transmit(PortP) +struct Port *PortP; { - if (RWORD(*PortP->TxAdd) & PKT_IN_USE) { - rio_dprintk (RIO_DEBUG_PARAM, "add_transmit: Packet has been stolen!"); - } - WWORD( *(ushort *)PortP->TxAdd, RWORD(*PortP->TxAdd) | PKT_IN_USE); - PortP->TxAdd = (PortP->TxAdd == PortP->TxEnd) ? PortP->TxStart : - PortP->TxAdd + 1; - WWORD( PortP->PhbP->tx_add , RIO_OFF(PortP->Caddr,PortP->TxAdd) ); + if (RWORD(*PortP->TxAdd) & PKT_IN_USE) { + rio_dprintk(RIO_DEBUG_PARAM, "add_transmit: Packet has been stolen!"); + } + WWORD(*(ushort *) PortP->TxAdd, RWORD(*PortP->TxAdd) | PKT_IN_USE); + PortP->TxAdd = (PortP->TxAdd == PortP->TxEnd) ? PortP->TxStart : PortP->TxAdd + 1; + WWORD(PortP->PhbP->tx_add, RIO_OFF(PortP->Caddr, PortP->TxAdd)); } /**************************************** * Put a packet onto the end of the * free list ****************************************/ -void -put_free_end(HostP, PktP) +void put_free_end(HostP, PktP) struct Host *HostP; PKT *PktP; { @@ -688,24 +686,23 @@ PKT *PktP; * ************************************************/ - rio_dprintk (RIO_DEBUG_PFE, "put_free_end(PktP=%x)\n",(int)PktP); + rio_dprintk(RIO_DEBUG_PFE, "put_free_end(PktP=%x)\n", (int) PktP); - if ((old_end=RWORD(HostP->ParmMapP->free_list_end)) != TPNULL) { - new_end = RIO_OFF(HostP->Caddr,PktP); - tmp_pointer = (FREE_LIST *)RIO_PTR(HostP->Caddr,old_end); - WWORD(tmp_pointer->next , new_end ); - WWORD(((FREE_LIST *)PktP)->prev , old_end); - WWORD(((FREE_LIST *)PktP)->next , TPNULL); + if ((old_end = RWORD(HostP->ParmMapP->free_list_end)) != TPNULL) { + new_end = RIO_OFF(HostP->Caddr, PktP); + tmp_pointer = (FREE_LIST *) RIO_PTR(HostP->Caddr, old_end); + WWORD(tmp_pointer->next, new_end); + WWORD(((FREE_LIST *) PktP)->prev, old_end); + WWORD(((FREE_LIST *) PktP)->next, TPNULL); WWORD(HostP->ParmMapP->free_list_end, new_end); - } - else { /* First packet on the free list this should never happen! */ - rio_dprintk (RIO_DEBUG_PFE, "put_free_end(): This should never happen\n"); - WWORD(HostP->ParmMapP->free_list_end , RIO_OFF(HostP->Caddr,PktP)); - tmp_pointer = (FREE_LIST *)PktP; - WWORD(tmp_pointer->prev , TPNULL); - WWORD(tmp_pointer->next , TPNULL); - } - rio_dprintk (RIO_DEBUG_CMD, "Before unlock: %p\n", &HostP->HostLock); + } else { /* First packet on the free list this should never happen! */ + rio_dprintk(RIO_DEBUG_PFE, "put_free_end(): This should never happen\n"); + WWORD(HostP->ParmMapP->free_list_end, RIO_OFF(HostP->Caddr, PktP)); + tmp_pointer = (FREE_LIST *) PktP; + WWORD(tmp_pointer->prev, TPNULL); + WWORD(tmp_pointer->next, TPNULL); + } + rio_dprintk(RIO_DEBUG_CMD, "Before unlock: %p\n", &HostP->HostLock); rio_spin_unlock_irqrestore(&HostP->HostLock, flags); } @@ -715,14 +712,12 @@ PKT *PktP; ** relevant packet, [having cleared the PKT_IN_USE bit]. If PKT_IN_USE is clear, ** then can_remove_receive() returns 0. */ -int -can_remove_receive(PktP, PortP) +int can_remove_receive(PktP, PortP) PKT **PktP; struct Port *PortP; { - if ( RWORD(*PortP->RxRemove) & PKT_IN_USE) { - *PktP = (PKT *)RIO_PTR(PortP->Caddr, - RWORD(*PortP->RxRemove) & ~PKT_IN_USE); + if (RWORD(*PortP->RxRemove) & PKT_IN_USE) { + *PktP = (PKT *) RIO_PTR(PortP->Caddr, RWORD(*PortP->RxRemove) & ~PKT_IN_USE); return 1; } return 0; @@ -733,12 +728,10 @@ struct Port *PortP; ** and then bump the pointers. Once the pointers get to the end, they must ** be wrapped back to the start. */ -void -remove_receive(PortP) -struct Port *PortP; +void remove_receive(PortP) +struct Port *PortP; { - WWORD( *PortP->RxRemove, RWORD(*PortP->RxRemove) & ~PKT_IN_USE ); - PortP->RxRemove = (PortP->RxRemove == PortP->RxEnd) ? PortP->RxStart : - PortP->RxRemove + 1; - WWORD( PortP->PhbP->rx_remove , RIO_OFF(PortP->Caddr, PortP->RxRemove) ); + WWORD(*PortP->RxRemove, RWORD(*PortP->RxRemove) & ~PKT_IN_USE); + PortP->RxRemove = (PortP->RxRemove == PortP->RxEnd) ? PortP->RxStart : PortP->RxRemove + 1; + WWORD(PortP->PhbP->rx_remove, RIO_OFF(PortP->Caddr, PortP->RxRemove)); } diff --git a/drivers/char/rio/riopcicopy.c b/drivers/char/rio/riopcicopy.c index 2ea99a60aa32..535afaa51ca5 100644 --- a/drivers/char/rio/riopcicopy.c +++ b/drivers/char/rio/riopcicopy.c @@ -1,8 +1,8 @@ /* Yeah. We have copyright on this one. Sure. */ -void rio_pcicopy( char *from, char *to, int amount) +void rio_pcicopy(char *from, char *to, int amount) { - while ( amount-- ) - *to++ = *from++; + while (amount--) + *to++ = *from++; } diff --git a/drivers/char/rio/rioroute.c b/drivers/char/rio/rioroute.c index e9564c9fb37c..0f4cd33ba641 100644 --- a/drivers/char/rio/rioroute.c +++ b/drivers/char/rio/rioroute.c @@ -93,625 +93,517 @@ static void RIOConCon(struct rio_info *, struct Host *, uint, uint, uint, uint, ** Incoming on the ROUTE_RUP ** I wrote this while I was tired. Forgive me. */ -int RIORouteRup( struct rio_info *p, uint Rup, struct Host *HostP, PKT *PacketP ) +int RIORouteRup(struct rio_info *p, uint Rup, struct Host *HostP, PKT * PacketP) { - struct PktCmd *PktCmdP = (struct PktCmd *)PacketP->data; - struct PktCmd_M *PktReplyP; - struct CmdBlk *CmdBlkP; - struct Port *PortP; - struct Map *MapP; - struct Top *TopP; - int ThisLink, ThisLinkMin, ThisLinkMax; - int port; - int Mod, Mod1, Mod2; - ushort RtaType; - uint RtaUniq; - uint ThisUnit, ThisUnit2; /* 2 ids to accommodate 16 port RTA */ - uint OldUnit, NewUnit, OldLink, NewLink; - char *MyType, *MyName; - int Lies; - unsigned long flags; + struct PktCmd *PktCmdP = (struct PktCmd *) PacketP->data; + struct PktCmd_M *PktReplyP; + struct CmdBlk *CmdBlkP; + struct Port *PortP; + struct Map *MapP; + struct Top *TopP; + int ThisLink, ThisLinkMin, ThisLinkMax; + int port; + int Mod, Mod1, Mod2; + ushort RtaType; + uint RtaUniq; + uint ThisUnit, ThisUnit2; /* 2 ids to accommodate 16 port RTA */ + uint OldUnit, NewUnit, OldLink, NewLink; + char *MyType, *MyName; + int Lies; + unsigned long flags; #ifdef STACK - RIOStackCheck("RIORouteRup"); + RIOStackCheck("RIORouteRup"); #endif #ifdef CHECK - CheckPacketP(PacketP); - CheckHostP(HostP); - CheckRup(Rup); - CheckHost(Host); + CheckPacketP(PacketP); + CheckHostP(HostP); + CheckRup(Rup); + CheckHost(Host); #endif - /* - ** Is this unit telling us it's current link topology? - */ - if ( RBYTE(PktCmdP->Command) == ROUTE_TOPOLOGY ) - { - MapP = HostP->Mapping; - - /* - ** The packet can be sent either by the host or by an RTA. - ** If it comes from the host, then we need to fill in the - ** Topology array in the host structure. If it came in - ** from an RTA then we need to fill in the Mapping structure's - ** Topology array for the unit. - */ - if ( Rup >= (ushort)MAX_RUP ) - { - ThisUnit = HOST_ID; - TopP = HostP->Topology; - MyType = "Host"; - MyName = HostP->Name; - ThisLinkMin = ThisLinkMax = Rup - MAX_RUP; - } - else - { - ThisUnit = Rup+1; - TopP = HostP->Mapping[Rup].Topology; - MyType = "RTA"; - MyName = HostP->Mapping[Rup].Name; - ThisLinkMin = 0; - ThisLinkMax = LINKS_PER_UNIT - 1; - } - - /* - ** Lies will not be tolerated. - ** If any pair of links claim to be connected to the same - ** place, then ignore this packet completely. - */ - Lies = 0; - for ( ThisLink=ThisLinkMin + 1; ThisLink <= ThisLinkMax; ThisLink++) - { - /* - ** it won't lie about network interconnect, total disconnects - ** and no-IDs. (or at least, it doesn't *matter* if it does) - */ - if ( RBYTE(PktCmdP->RouteTopology[ThisLink].Unit) > (ushort)MAX_RUP ) - continue; - - for ( NewLink=ThisLinkMin; NewLink < ThisLink; NewLink++ ) - { - if ( (RBYTE(PktCmdP->RouteTopology[ThisLink].Unit) == - RBYTE(PktCmdP->RouteTopology[NewLink].Unit)) && - (RBYTE(PktCmdP->RouteTopology[ThisLink].Link) == - RBYTE(PktCmdP->RouteTopology[NewLink].Link)) ) - { - Lies++; - } - } - } - - if ( Lies ) - { - rio_dprintk (RIO_DEBUG_ROUTE, "LIES! DAMN LIES! %d LIES!\n",Lies); - rio_dprintk (RIO_DEBUG_ROUTE, "%d:%c %d:%c %d:%c %d:%c\n", - RBYTE(PktCmdP->RouteTopology[0].Unit), - 'A'+RBYTE(PktCmdP->RouteTopology[0].Link), - RBYTE(PktCmdP->RouteTopology[1].Unit), - 'A'+RBYTE(PktCmdP->RouteTopology[1].Link), - RBYTE(PktCmdP->RouteTopology[2].Unit), - 'A'+RBYTE(PktCmdP->RouteTopology[2].Link), - RBYTE(PktCmdP->RouteTopology[3].Unit), - 'A'+RBYTE(PktCmdP->RouteTopology[3].Link)); - return TRUE; - } - - /* - ** now, process each link. - */ - for ( ThisLink=ThisLinkMin; ThisLink <= ThisLinkMax; ThisLink++) - { - /* - ** this is what it was connected to - */ - OldUnit = TopP[ThisLink].Unit; - OldLink = TopP[ThisLink].Link; - - /* - ** this is what it is now connected to - */ - NewUnit = RBYTE(PktCmdP->RouteTopology[ThisLink].Unit); - NewLink = RBYTE(PktCmdP->RouteTopology[ThisLink].Link); - - if ( OldUnit != NewUnit || OldLink != NewLink ) - { /* - ** something has changed! - */ - - if ( NewUnit > MAX_RUP && - NewUnit != ROUTE_DISCONNECT && - NewUnit != ROUTE_NO_ID && - NewUnit != ROUTE_INTERCONNECT ) - { - rio_dprintk (RIO_DEBUG_ROUTE, "I have a link from %s %s to unit %d:%d - I don't like it.\n", - MyType, - MyName, - NewUnit, - NewLink); - } - else - { - /* - ** put the new values in - */ - TopP[ThisLink].Unit = NewUnit; - TopP[ThisLink].Link = NewLink; - - RIOSetChange(p); - - if ( OldUnit <= MAX_RUP ) - { - /* - ** If something has become bust, then re-enable them messages - */ - if (! p->RIONoMessage) - RIOConCon(p,HostP,ThisUnit,ThisLink,OldUnit,OldLink,DISCONNECT); - } - - if ( ( NewUnit <= MAX_RUP ) && !p->RIONoMessage ) - RIOConCon(p,HostP,ThisUnit,ThisLink,NewUnit,NewLink,CONNECT); - - if ( NewUnit == ROUTE_NO_ID ) - rio_dprintk (RIO_DEBUG_ROUTE, "%s %s (%c) is connected to an unconfigured unit.\n", - MyType,MyName,'A'+ThisLink); - - if ( NewUnit == ROUTE_INTERCONNECT ) - { - if (! p->RIONoMessage) - cprintf("%s '%s' (%c) is connected to another network.\n", MyType,MyName,'A'+ThisLink); - } - - /* - ** perform an update for 'the other end', so that these messages - ** only appears once. Only disconnect the other end if it is pointing - ** at us! - */ - if ( OldUnit == HOST_ID ) - { - if ( HostP->Topology[OldLink].Unit == ThisUnit && - HostP->Topology[OldLink].Link == ThisLink ) - { - rio_dprintk (RIO_DEBUG_ROUTE, "SETTING HOST (%c) TO DISCONNECTED!\n", OldLink+'A'); - HostP->Topology[OldLink].Unit = ROUTE_DISCONNECT; - HostP->Topology[OldLink].Link = NO_LINK; - } - else - { - rio_dprintk (RIO_DEBUG_ROUTE, "HOST(%c) WAS NOT CONNECTED TO %s (%c)!\n", - OldLink+'A',HostP->Mapping[ThisUnit-1].Name,ThisLink+'A'); - } - } - else if ( OldUnit <= MAX_RUP ) - { - if ( HostP->Mapping[OldUnit-1].Topology[OldLink].Unit == ThisUnit && - HostP->Mapping[OldUnit-1].Topology[OldLink].Link == ThisLink ) - { - rio_dprintk (RIO_DEBUG_ROUTE, "SETTING RTA %s (%c) TO DISCONNECTED!\n", - HostP->Mapping[OldUnit-1].Name,OldLink+'A'); - HostP->Mapping[OldUnit-1].Topology[OldLink].Unit=ROUTE_DISCONNECT; - HostP->Mapping[OldUnit-1].Topology[OldLink].Link=NO_LINK; - } - else - { - rio_dprintk (RIO_DEBUG_ROUTE, "RTA %s (%c) WAS NOT CONNECTED TO %s (%c)\n", - HostP->Mapping[OldUnit-1].Name,OldLink+'A', - HostP->Mapping[ThisUnit-1].Name,ThisLink+'A'); - } - } - if ( NewUnit == HOST_ID ) - { - rio_dprintk (RIO_DEBUG_ROUTE, "MARKING HOST (%c) CONNECTED TO %s (%c)\n", - NewLink+'A',MyName,ThisLink+'A'); - HostP->Topology[NewLink].Unit = ThisUnit; - HostP->Topology[NewLink].Link = ThisLink; - } - else if ( NewUnit <= MAX_RUP ) - { - rio_dprintk (RIO_DEBUG_ROUTE, "MARKING RTA %s (%c) CONNECTED TO %s (%c)\n", - HostP->Mapping[NewUnit-1].Name,NewLink+'A',MyName,ThisLink+'A'); - HostP->Mapping[NewUnit-1].Topology[NewLink].Unit=ThisUnit; - HostP->Mapping[NewUnit-1].Topology[NewLink].Link=ThisLink; - } + ** Is this unit telling us it's current link topology? + */ + if (RBYTE(PktCmdP->Command) == ROUTE_TOPOLOGY) { + MapP = HostP->Mapping; + + /* + ** The packet can be sent either by the host or by an RTA. + ** If it comes from the host, then we need to fill in the + ** Topology array in the host structure. If it came in + ** from an RTA then we need to fill in the Mapping structure's + ** Topology array for the unit. + */ + if (Rup >= (ushort) MAX_RUP) { + ThisUnit = HOST_ID; + TopP = HostP->Topology; + MyType = "Host"; + MyName = HostP->Name; + ThisLinkMin = ThisLinkMax = Rup - MAX_RUP; + } else { + ThisUnit = Rup + 1; + TopP = HostP->Mapping[Rup].Topology; + MyType = "RTA"; + MyName = HostP->Mapping[Rup].Name; + ThisLinkMin = 0; + ThisLinkMax = LINKS_PER_UNIT - 1; + } + + /* + ** Lies will not be tolerated. + ** If any pair of links claim to be connected to the same + ** place, then ignore this packet completely. + */ + Lies = 0; + for (ThisLink = ThisLinkMin + 1; ThisLink <= ThisLinkMax; ThisLink++) { + /* + ** it won't lie about network interconnect, total disconnects + ** and no-IDs. (or at least, it doesn't *matter* if it does) + */ + if (RBYTE(PktCmdP->RouteTopology[ThisLink].Unit) > (ushort) MAX_RUP) + continue; + + for (NewLink = ThisLinkMin; NewLink < ThisLink; NewLink++) { + if ((RBYTE(PktCmdP->RouteTopology[ThisLink].Unit) == RBYTE(PktCmdP->RouteTopology[NewLink].Unit)) && (RBYTE(PktCmdP->RouteTopology[ThisLink].Link) == RBYTE(PktCmdP->RouteTopology[NewLink].Link))) { + Lies++; + } + } + } + + if (Lies) { + rio_dprintk(RIO_DEBUG_ROUTE, "LIES! DAMN LIES! %d LIES!\n", Lies); + rio_dprintk(RIO_DEBUG_ROUTE, "%d:%c %d:%c %d:%c %d:%c\n", + RBYTE(PktCmdP->RouteTopology[0].Unit), + 'A' + RBYTE(PktCmdP->RouteTopology[0].Link), + RBYTE(PktCmdP->RouteTopology[1].Unit), + 'A' + RBYTE(PktCmdP->RouteTopology[1].Link), RBYTE(PktCmdP->RouteTopology[2].Unit), 'A' + RBYTE(PktCmdP->RouteTopology[2].Link), RBYTE(PktCmdP->RouteTopology[3].Unit), 'A' + RBYTE(PktCmdP->RouteTopology[3].Link)); + return TRUE; + } + + /* + ** now, process each link. + */ + for (ThisLink = ThisLinkMin; ThisLink <= ThisLinkMax; ThisLink++) { + /* + ** this is what it was connected to + */ + OldUnit = TopP[ThisLink].Unit; + OldLink = TopP[ThisLink].Link; + + /* + ** this is what it is now connected to + */ + NewUnit = RBYTE(PktCmdP->RouteTopology[ThisLink].Unit); + NewLink = RBYTE(PktCmdP->RouteTopology[ThisLink].Link); + + if (OldUnit != NewUnit || OldLink != NewLink) { + /* + ** something has changed! + */ + + if (NewUnit > MAX_RUP && NewUnit != ROUTE_DISCONNECT && NewUnit != ROUTE_NO_ID && NewUnit != ROUTE_INTERCONNECT) { + rio_dprintk(RIO_DEBUG_ROUTE, "I have a link from %s %s to unit %d:%d - I don't like it.\n", MyType, MyName, NewUnit, NewLink); + } else { + /* + ** put the new values in + */ + TopP[ThisLink].Unit = NewUnit; + TopP[ThisLink].Link = NewLink; + + RIOSetChange(p); + + if (OldUnit <= MAX_RUP) { + /* + ** If something has become bust, then re-enable them messages + */ + if (!p->RIONoMessage) + RIOConCon(p, HostP, ThisUnit, ThisLink, OldUnit, OldLink, DISCONNECT); + } + + if ((NewUnit <= MAX_RUP) && !p->RIONoMessage) + RIOConCon(p, HostP, ThisUnit, ThisLink, NewUnit, NewLink, CONNECT); + + if (NewUnit == ROUTE_NO_ID) + rio_dprintk(RIO_DEBUG_ROUTE, "%s %s (%c) is connected to an unconfigured unit.\n", MyType, MyName, 'A' + ThisLink); + + if (NewUnit == ROUTE_INTERCONNECT) { + if (!p->RIONoMessage) + cprintf("%s '%s' (%c) is connected to another network.\n", MyType, MyName, 'A' + ThisLink); + } + + /* + ** perform an update for 'the other end', so that these messages + ** only appears once. Only disconnect the other end if it is pointing + ** at us! + */ + if (OldUnit == HOST_ID) { + if (HostP->Topology[OldLink].Unit == ThisUnit && HostP->Topology[OldLink].Link == ThisLink) { + rio_dprintk(RIO_DEBUG_ROUTE, "SETTING HOST (%c) TO DISCONNECTED!\n", OldLink + 'A'); + HostP->Topology[OldLink].Unit = ROUTE_DISCONNECT; + HostP->Topology[OldLink].Link = NO_LINK; + } else { + rio_dprintk(RIO_DEBUG_ROUTE, "HOST(%c) WAS NOT CONNECTED TO %s (%c)!\n", OldLink + 'A', HostP->Mapping[ThisUnit - 1].Name, ThisLink + 'A'); + } + } else if (OldUnit <= MAX_RUP) { + if (HostP->Mapping[OldUnit - 1].Topology[OldLink].Unit == ThisUnit && HostP->Mapping[OldUnit - 1].Topology[OldLink].Link == ThisLink) { + rio_dprintk(RIO_DEBUG_ROUTE, "SETTING RTA %s (%c) TO DISCONNECTED!\n", HostP->Mapping[OldUnit - 1].Name, OldLink + 'A'); + HostP->Mapping[OldUnit - 1].Topology[OldLink].Unit = ROUTE_DISCONNECT; + HostP->Mapping[OldUnit - 1].Topology[OldLink].Link = NO_LINK; + } else { + rio_dprintk(RIO_DEBUG_ROUTE, "RTA %s (%c) WAS NOT CONNECTED TO %s (%c)\n", HostP->Mapping[OldUnit - 1].Name, OldLink + 'A', HostP->Mapping[ThisUnit - 1].Name, ThisLink + 'A'); + } + } + if (NewUnit == HOST_ID) { + rio_dprintk(RIO_DEBUG_ROUTE, "MARKING HOST (%c) CONNECTED TO %s (%c)\n", NewLink + 'A', MyName, ThisLink + 'A'); + HostP->Topology[NewLink].Unit = ThisUnit; + HostP->Topology[NewLink].Link = ThisLink; + } else if (NewUnit <= MAX_RUP) { + rio_dprintk(RIO_DEBUG_ROUTE, "MARKING RTA %s (%c) CONNECTED TO %s (%c)\n", HostP->Mapping[NewUnit - 1].Name, NewLink + 'A', MyName, ThisLink + 'A'); + HostP->Mapping[NewUnit - 1].Topology[NewLink].Unit = ThisUnit; + HostP->Mapping[NewUnit - 1].Topology[NewLink].Link = ThisLink; + } + } + RIOSetChange(p); + RIOCheckIsolated(p, HostP, OldUnit); + } + } + return TRUE; } - RIOSetChange(p); - RIOCheckIsolated(p, HostP, OldUnit ); - } - } - return TRUE; - } - - /* - ** The only other command we recognise is a route_request command - */ - if ( RBYTE(PktCmdP->Command) != ROUTE_REQUEST ) - { - rio_dprintk (RIO_DEBUG_ROUTE, "Unknown command %d received on rup %d host %d ROUTE_RUP\n", - RBYTE(PktCmdP->Command),Rup,(int)HostP); - return TRUE; - } - - RtaUniq = (RBYTE(PktCmdP->UniqNum[0])) + - (RBYTE(PktCmdP->UniqNum[1]) << 8) + - (RBYTE(PktCmdP->UniqNum[2]) << 16) + - (RBYTE(PktCmdP->UniqNum[3]) << 24); - - /* - ** Determine if 8 or 16 port RTA - */ - RtaType = GetUnitType(RtaUniq); - - rio_dprintk (RIO_DEBUG_ROUTE, "Received a request for an ID for serial number %x\n", RtaUniq); - - Mod = RBYTE(PktCmdP->ModuleTypes); - Mod1 = LONYBLE(Mod); - if (RtaType == TYPE_RTA16) - { - /* - ** Only one ident is set for a 16 port RTA. To make compatible - ** with 8 port, set 2nd ident in Mod2 to the same as Mod1. - */ - Mod2 = Mod1; - rio_dprintk (RIO_DEBUG_ROUTE, "Backplane type is %s (all ports)\n", - p->RIOModuleTypes[Mod1].Name); - } - else - { - Mod2 = HINYBLE(Mod); - rio_dprintk (RIO_DEBUG_ROUTE, "Module types are %s (ports 0-3) and %s (ports 4-7)\n", - p->RIOModuleTypes[Mod1].Name, p->RIOModuleTypes[Mod2].Name); - } - - if ( RtaUniq == 0xffffffff ) - { - ShowPacket( DBG_SPECIAL, PacketP ); - } - - /* - ** try to unhook a command block from the command free list. - */ - if ( !(CmdBlkP = RIOGetCmdBlk()) ) - { - rio_dprintk (RIO_DEBUG_ROUTE, "No command blocks to route RTA! come back later.\n"); - return 0; - } - - /* - ** Fill in the default info on the command block - */ - CmdBlkP->Packet.dest_unit = Rup; - CmdBlkP->Packet.dest_port = ROUTE_RUP; - CmdBlkP->Packet.src_unit = HOST_ID; - CmdBlkP->Packet.src_port = ROUTE_RUP; - CmdBlkP->Packet.len = PKT_CMD_BIT | 1; - CmdBlkP->PreFuncP = CmdBlkP->PostFuncP = NULL; - PktReplyP = (struct PktCmd_M *)CmdBlkP->Packet.data; - - if (! RIOBootOk(p, HostP, RtaUniq)) - { - rio_dprintk (RIO_DEBUG_ROUTE, "RTA %x tried to get an ID, but does not belong - FOAD it!\n", - RtaUniq); - PktReplyP->Command = ROUTE_FOAD; - HostP->Copy("RT_FOAD", PktReplyP->CommandText, 7); - RIOQueueCmdBlk(HostP, Rup, CmdBlkP); - return TRUE; - } - - /* - ** Check to see if the RTA is configured for this host - */ - for ( ThisUnit=0; ThisUnitMapping[ThisUnit].Flags & SLOT_IN_USE ? - "Slot-In-Use":"Not In Use", - HostP->Mapping[ThisUnit].Flags & SLOT_TENTATIVE ? - "Slot-Tentative":"Not Tentative", - HostP->Mapping[ThisUnit].RtaUniqueNum); - - /* - ** We have an entry for it. - */ - if ( (HostP->Mapping[ThisUnit].Flags & (SLOT_IN_USE | SLOT_TENTATIVE)) && - (HostP->Mapping[ThisUnit].RtaUniqueNum == RtaUniq) ) - { - if (RtaType == TYPE_RTA16) - { - ThisUnit2 = HostP->Mapping[ThisUnit].ID2 - 1; - rio_dprintk (RIO_DEBUG_ROUTE, "Found unit 0x%x at slots %d+%d\n", - RtaUniq,ThisUnit,ThisUnit2); - } - else - rio_dprintk (RIO_DEBUG_ROUTE, "Found unit 0x%x at slot %d\n", - RtaUniq,ThisUnit); - /* - ** If we have no knowledge of booting it, then the host has - ** been re-booted, and so we must kill the RTA, so that it - ** will be booted again (potentially with new bins) - ** and it will then re-ask for an ID, which we will service. - */ - if ( (HostP->Mapping[ThisUnit].Flags & SLOT_IN_USE) && - !(HostP->Mapping[ThisUnit].Flags & RTA_BOOTED) ) - { - if ( !(HostP->Mapping[ThisUnit].Flags & MSG_DONE) ) - { - if ( !p->RIONoMessage ) - cprintf("RTA '%s' is being updated.\n",HostP->Mapping[ThisUnit].Name); - HostP->Mapping[ThisUnit].Flags |= MSG_DONE; + + /* + ** The only other command we recognise is a route_request command + */ + if (RBYTE(PktCmdP->Command) != ROUTE_REQUEST) { + rio_dprintk(RIO_DEBUG_ROUTE, "Unknown command %d received on rup %d host %d ROUTE_RUP\n", RBYTE(PktCmdP->Command), Rup, (int) HostP); + return TRUE; } - PktReplyP->Command = ROUTE_FOAD; - HostP->Copy("RT_FOAD",PktReplyP->CommandText,7); - RIOQueueCmdBlk(HostP, Rup, CmdBlkP); - return TRUE; - } - - /* - ** Send the ID (entry) to this RTA. The ID number is implicit as - ** the offset into the table. It is worth noting at this stage - ** that offset zero in the table contains the entries for the - ** RTA with ID 1!!!! - */ - PktReplyP->Command = ROUTE_ALLOCATE; - PktReplyP->IDNum = ThisUnit+1; - if (RtaType == TYPE_RTA16) - { - if (HostP->Mapping[ThisUnit].Flags & SLOT_IN_USE) - /* - ** Adjust the phb and tx pkt dest_units for 2nd block of 8 - ** only if the RTA has ports associated (SLOT_IN_USE) - */ - RIOFixPhbs(p, HostP, ThisUnit2); - PktReplyP->IDNum2 = ThisUnit2+1; - rio_dprintk (RIO_DEBUG_ROUTE, "RTA '%s' has been allocated IDs %d+%d\n", - HostP->Mapping[ThisUnit].Name, PktReplyP->IDNum, PktReplyP->IDNum2); - } - else - { - PktReplyP->IDNum2 = ROUTE_NO_ID; - rio_dprintk (RIO_DEBUG_ROUTE, "RTA '%s' has been allocated ID %d\n", - HostP->Mapping[ThisUnit].Name,PktReplyP->IDNum); - } - HostP->Copy("RT_ALLOCAT",PktReplyP->CommandText,10); - - RIOQueueCmdBlk( HostP, Rup, CmdBlkP); - - /* - ** If this is a freshly booted RTA, then we need to re-open - ** the ports, if any where open, so that data may once more - ** flow around the system! - */ - if ( (HostP->Mapping[ThisUnit].Flags & RTA_NEWBOOT) && - (HostP->Mapping[ThisUnit].SysPort != NO_PORT) ) - { + + RtaUniq = (RBYTE(PktCmdP->UniqNum[0])) + (RBYTE(PktCmdP->UniqNum[1]) << 8) + (RBYTE(PktCmdP->UniqNum[2]) << 16) + (RBYTE(PktCmdP->UniqNum[3]) << 24); + /* - ** look at the ports associated with this beast and - ** see if any where open. If they was, then re-open - ** them, using the info from the tty flags. - */ - for ( port=0; portRIOPortp[port+HostP->Mapping[ThisUnit].SysPort]; - if ( PortP->State & (RIO_MOPEN|RIO_LOPEN) ) - { - rio_dprintk (RIO_DEBUG_ROUTE, "Re-opened this port\n"); - rio_spin_lock_irqsave(&PortP->portSem, flags); - PortP->MagicFlags |= MAGIC_REBOOT; - rio_spin_unlock_irqrestore(&PortP->portSem, flags); - } + ** Determine if 8 or 16 port RTA + */ + RtaType = GetUnitType(RtaUniq); + + rio_dprintk(RIO_DEBUG_ROUTE, "Received a request for an ID for serial number %x\n", RtaUniq); + + Mod = RBYTE(PktCmdP->ModuleTypes); + Mod1 = LONYBLE(Mod); + if (RtaType == TYPE_RTA16) { + /* + ** Only one ident is set for a 16 port RTA. To make compatible + ** with 8 port, set 2nd ident in Mod2 to the same as Mod1. + */ + Mod2 = Mod1; + rio_dprintk(RIO_DEBUG_ROUTE, "Backplane type is %s (all ports)\n", p->RIOModuleTypes[Mod1].Name); + } else { + Mod2 = HINYBLE(Mod); + rio_dprintk(RIO_DEBUG_ROUTE, "Module types are %s (ports 0-3) and %s (ports 4-7)\n", p->RIOModuleTypes[Mod1].Name, p->RIOModuleTypes[Mod2].Name); } - if (RtaType == TYPE_RTA16) - { - for ( port=0; portRIOPortp[port+HostP->Mapping[ThisUnit2].SysPort]; - if ( PortP->State & (RIO_MOPEN|RIO_LOPEN) ) - { - rio_dprintk (RIO_DEBUG_ROUTE, "Re-opened this port\n"); - rio_spin_lock_irqsave(&PortP->portSem, flags); - PortP->MagicFlags |= MAGIC_REBOOT; - rio_spin_unlock_irqrestore(&PortP->portSem, flags); - } - } + + if (RtaUniq == 0xffffffff) { + ShowPacket(DBG_SPECIAL, PacketP); } - } - - /* - ** keep a copy of the module types! - */ - HostP->UnixRups[ThisUnit].ModTypes = Mod; - if (RtaType == TYPE_RTA16) - HostP->UnixRups[ThisUnit2].ModTypes = Mod; - - /* - ** If either of the modules on this unit is read-only or write-only - ** or none-xprint, then we need to transfer that info over to the - ** relevant ports. - */ - if ( HostP->Mapping[ThisUnit].SysPort != NO_PORT ) - { - for ( port=0; portRIOPortp[port+HostP->Mapping[ThisUnit].SysPort]->Config &= ~RIO_NOMASK; - p->RIOPortp[port+HostP->Mapping[ThisUnit].SysPort]->Config |= - p->RIOModuleTypes[Mod1].Flags[port]; - p->RIOPortp[port+PORTS_PER_MODULE+HostP->Mapping[ThisUnit].SysPort]->Config &= ~RIO_NOMASK; - p->RIOPortp[port+PORTS_PER_MODULE+HostP->Mapping[ThisUnit].SysPort]->Config |= p->RIOModuleTypes[Mod2].Flags[port]; + + /* + ** try to unhook a command block from the command free list. + */ + if (!(CmdBlkP = RIOGetCmdBlk())) { + rio_dprintk(RIO_DEBUG_ROUTE, "No command blocks to route RTA! come back later.\n"); + return 0; } - if (RtaType == TYPE_RTA16) - { - for ( port=0; portRIOPortp[port+HostP->Mapping[ThisUnit2].SysPort]->Config &= ~RIO_NOMASK; - p->RIOPortp[port+HostP->Mapping[ThisUnit2].SysPort]->Config |= p->RIOModuleTypes[Mod1].Flags[port]; - p->RIOPortp[port+PORTS_PER_MODULE+HostP->Mapping[ThisUnit2].SysPort]->Config &= ~RIO_NOMASK; - p->RIOPortp[port+PORTS_PER_MODULE+HostP->Mapping[ThisUnit2].SysPort]->Config |= p->RIOModuleTypes[Mod2].Flags[port]; - } + + /* + ** Fill in the default info on the command block + */ + CmdBlkP->Packet.dest_unit = Rup; + CmdBlkP->Packet.dest_port = ROUTE_RUP; + CmdBlkP->Packet.src_unit = HOST_ID; + CmdBlkP->Packet.src_port = ROUTE_RUP; + CmdBlkP->Packet.len = PKT_CMD_BIT | 1; + CmdBlkP->PreFuncP = CmdBlkP->PostFuncP = NULL; + PktReplyP = (struct PktCmd_M *) CmdBlkP->Packet.data; + + if (!RIOBootOk(p, HostP, RtaUniq)) { + rio_dprintk(RIO_DEBUG_ROUTE, "RTA %x tried to get an ID, but does not belong - FOAD it!\n", RtaUniq); + PktReplyP->Command = ROUTE_FOAD; + HostP->Copy("RT_FOAD", PktReplyP->CommandText, 7); + RIOQueueCmdBlk(HostP, Rup, CmdBlkP); + return TRUE; } - } - - /* - ** Job done, get on with the interrupts! - */ - return TRUE; - } - } - /* - ** There is no table entry for this RTA at all. - ** - ** Lets check to see if we actually booted this unit - if not, - ** then we reset it and it will go round the loop of being booted - ** we can then worry about trying to fit it into the table. - */ - for ( ThisUnit=0; ThisUnitNumExtraBooted; ThisUnit++ ) - if ( HostP->ExtraUnits[ThisUnit] == RtaUniq ) - break; - if ( ThisUnit == HostP->NumExtraBooted && ThisUnit != MAX_EXTRA_UNITS ) - { - /* - ** if the unit wasn't in the table, and the table wasn't full, then - ** we reset the unit, because we didn't boot it. - ** However, if the table is full, it could be that we did boot - ** this unit, and so we won't reboot it, because it isn't really - ** all that disasterous to keep the old bins in most cases. This - ** is a rather tacky feature, but we are on the edge of reallity - ** here, because the implication is that someone has connected - ** 16+MAX_EXTRA_UNITS onto one host. - */ - static int UnknownMesgDone = 0; - - if ( !UnknownMesgDone ) - { - if (! p->RIONoMessage) - cprintf("One or more unknown RTAs are being updated.\n"); - UnknownMesgDone = 1; - } - - PktReplyP->Command = ROUTE_FOAD; - HostP->Copy("RT_FOAD",PktReplyP->CommandText,7); - } - else - { - /* - ** we did boot it (as an extra), and there may now be a table - ** slot free (because of a delete), so we will try to make - ** a tentative entry for it, so that the configurator can see it - ** and fill in the details for us. - */ - if (RtaType == TYPE_RTA16) - { - if (RIOFindFreeID(p, HostP, &ThisUnit, &ThisUnit2) == 0) - { - RIODefaultName(p, HostP, ThisUnit); - FillSlot(ThisUnit, ThisUnit2, RtaUniq, HostP); + + /* + ** Check to see if the RTA is configured for this host + */ + for (ThisUnit = 0; ThisUnit < MAX_RUP; ThisUnit++) { + rio_dprintk(RIO_DEBUG_ROUTE, "Entry %d Flags=%s %s UniqueNum=0x%x\n", + ThisUnit, HostP->Mapping[ThisUnit].Flags & SLOT_IN_USE ? "Slot-In-Use" : "Not In Use", HostP->Mapping[ThisUnit].Flags & SLOT_TENTATIVE ? "Slot-Tentative" : "Not Tentative", HostP->Mapping[ThisUnit].RtaUniqueNum); + + /* + ** We have an entry for it. + */ + if ((HostP->Mapping[ThisUnit].Flags & (SLOT_IN_USE | SLOT_TENTATIVE)) && (HostP->Mapping[ThisUnit].RtaUniqueNum == RtaUniq)) { + if (RtaType == TYPE_RTA16) { + ThisUnit2 = HostP->Mapping[ThisUnit].ID2 - 1; + rio_dprintk(RIO_DEBUG_ROUTE, "Found unit 0x%x at slots %d+%d\n", RtaUniq, ThisUnit, ThisUnit2); + } else + rio_dprintk(RIO_DEBUG_ROUTE, "Found unit 0x%x at slot %d\n", RtaUniq, ThisUnit); + /* + ** If we have no knowledge of booting it, then the host has + ** been re-booted, and so we must kill the RTA, so that it + ** will be booted again (potentially with new bins) + ** and it will then re-ask for an ID, which we will service. + */ + if ((HostP->Mapping[ThisUnit].Flags & SLOT_IN_USE) && !(HostP->Mapping[ThisUnit].Flags & RTA_BOOTED)) { + if (!(HostP->Mapping[ThisUnit].Flags & MSG_DONE)) { + if (!p->RIONoMessage) + cprintf("RTA '%s' is being updated.\n", HostP->Mapping[ThisUnit].Name); + HostP->Mapping[ThisUnit].Flags |= MSG_DONE; + } + PktReplyP->Command = ROUTE_FOAD; + HostP->Copy("RT_FOAD", PktReplyP->CommandText, 7); + RIOQueueCmdBlk(HostP, Rup, CmdBlkP); + return TRUE; + } + + /* + ** Send the ID (entry) to this RTA. The ID number is implicit as + ** the offset into the table. It is worth noting at this stage + ** that offset zero in the table contains the entries for the + ** RTA with ID 1!!!! + */ + PktReplyP->Command = ROUTE_ALLOCATE; + PktReplyP->IDNum = ThisUnit + 1; + if (RtaType == TYPE_RTA16) { + if (HostP->Mapping[ThisUnit].Flags & SLOT_IN_USE) + /* + ** Adjust the phb and tx pkt dest_units for 2nd block of 8 + ** only if the RTA has ports associated (SLOT_IN_USE) + */ + RIOFixPhbs(p, HostP, ThisUnit2); + PktReplyP->IDNum2 = ThisUnit2 + 1; + rio_dprintk(RIO_DEBUG_ROUTE, "RTA '%s' has been allocated IDs %d+%d\n", HostP->Mapping[ThisUnit].Name, PktReplyP->IDNum, PktReplyP->IDNum2); + } else { + PktReplyP->IDNum2 = ROUTE_NO_ID; + rio_dprintk(RIO_DEBUG_ROUTE, "RTA '%s' has been allocated ID %d\n", HostP->Mapping[ThisUnit].Name, PktReplyP->IDNum); + } + HostP->Copy("RT_ALLOCAT", PktReplyP->CommandText, 10); + + RIOQueueCmdBlk(HostP, Rup, CmdBlkP); + + /* + ** If this is a freshly booted RTA, then we need to re-open + ** the ports, if any where open, so that data may once more + ** flow around the system! + */ + if ((HostP->Mapping[ThisUnit].Flags & RTA_NEWBOOT) && (HostP->Mapping[ThisUnit].SysPort != NO_PORT)) { + /* + ** look at the ports associated with this beast and + ** see if any where open. If they was, then re-open + ** them, using the info from the tty flags. + */ + for (port = 0; port < PORTS_PER_RTA; port++) { + PortP = p->RIOPortp[port + HostP->Mapping[ThisUnit].SysPort]; + if (PortP->State & (RIO_MOPEN | RIO_LOPEN)) { + rio_dprintk(RIO_DEBUG_ROUTE, "Re-opened this port\n"); + rio_spin_lock_irqsave(&PortP->portSem, flags); + PortP->MagicFlags |= MAGIC_REBOOT; + rio_spin_unlock_irqrestore(&PortP->portSem, flags); + } + } + if (RtaType == TYPE_RTA16) { + for (port = 0; port < PORTS_PER_RTA; port++) { + PortP = p->RIOPortp[port + HostP->Mapping[ThisUnit2].SysPort]; + if (PortP->State & (RIO_MOPEN | RIO_LOPEN)) { + rio_dprintk(RIO_DEBUG_ROUTE, "Re-opened this port\n"); + rio_spin_lock_irqsave(&PortP->portSem, flags); + PortP->MagicFlags |= MAGIC_REBOOT; + rio_spin_unlock_irqrestore(&PortP->portSem, flags); + } + } + } + } + + /* + ** keep a copy of the module types! + */ + HostP->UnixRups[ThisUnit].ModTypes = Mod; + if (RtaType == TYPE_RTA16) + HostP->UnixRups[ThisUnit2].ModTypes = Mod; + + /* + ** If either of the modules on this unit is read-only or write-only + ** or none-xprint, then we need to transfer that info over to the + ** relevant ports. + */ + if (HostP->Mapping[ThisUnit].SysPort != NO_PORT) { + for (port = 0; port < PORTS_PER_MODULE; port++) { + p->RIOPortp[port + HostP->Mapping[ThisUnit].SysPort]->Config &= ~RIO_NOMASK; + p->RIOPortp[port + HostP->Mapping[ThisUnit].SysPort]->Config |= p->RIOModuleTypes[Mod1].Flags[port]; + p->RIOPortp[port + PORTS_PER_MODULE + HostP->Mapping[ThisUnit].SysPort]->Config &= ~RIO_NOMASK; + p->RIOPortp[port + PORTS_PER_MODULE + HostP->Mapping[ThisUnit].SysPort]->Config |= p->RIOModuleTypes[Mod2].Flags[port]; + } + if (RtaType == TYPE_RTA16) { + for (port = 0; port < PORTS_PER_MODULE; port++) { + p->RIOPortp[port + HostP->Mapping[ThisUnit2].SysPort]->Config &= ~RIO_NOMASK; + p->RIOPortp[port + HostP->Mapping[ThisUnit2].SysPort]->Config |= p->RIOModuleTypes[Mod1].Flags[port]; + p->RIOPortp[port + PORTS_PER_MODULE + HostP->Mapping[ThisUnit2].SysPort]->Config &= ~RIO_NOMASK; + p->RIOPortp[port + PORTS_PER_MODULE + HostP->Mapping[ThisUnit2].SysPort]->Config |= p->RIOModuleTypes[Mod2].Flags[port]; + } + } + } + + /* + ** Job done, get on with the interrupts! + */ + return TRUE; + } } - } - else - { - if (RIOFindFreeID(p, HostP, &ThisUnit, NULL) == 0) - { - RIODefaultName(p, HostP, ThisUnit); - FillSlot(ThisUnit, 0, RtaUniq, HostP); + /* + ** There is no table entry for this RTA at all. + ** + ** Lets check to see if we actually booted this unit - if not, + ** then we reset it and it will go round the loop of being booted + ** we can then worry about trying to fit it into the table. + */ + for (ThisUnit = 0; ThisUnit < HostP->NumExtraBooted; ThisUnit++) + if (HostP->ExtraUnits[ThisUnit] == RtaUniq) + break; + if (ThisUnit == HostP->NumExtraBooted && ThisUnit != MAX_EXTRA_UNITS) { + /* + ** if the unit wasn't in the table, and the table wasn't full, then + ** we reset the unit, because we didn't boot it. + ** However, if the table is full, it could be that we did boot + ** this unit, and so we won't reboot it, because it isn't really + ** all that disasterous to keep the old bins in most cases. This + ** is a rather tacky feature, but we are on the edge of reallity + ** here, because the implication is that someone has connected + ** 16+MAX_EXTRA_UNITS onto one host. + */ + static int UnknownMesgDone = 0; + + if (!UnknownMesgDone) { + if (!p->RIONoMessage) + cprintf("One or more unknown RTAs are being updated.\n"); + UnknownMesgDone = 1; + } + + PktReplyP->Command = ROUTE_FOAD; + HostP->Copy("RT_FOAD", PktReplyP->CommandText, 7); + } else { + /* + ** we did boot it (as an extra), and there may now be a table + ** slot free (because of a delete), so we will try to make + ** a tentative entry for it, so that the configurator can see it + ** and fill in the details for us. + */ + if (RtaType == TYPE_RTA16) { + if (RIOFindFreeID(p, HostP, &ThisUnit, &ThisUnit2) == 0) { + RIODefaultName(p, HostP, ThisUnit); + FillSlot(ThisUnit, ThisUnit2, RtaUniq, HostP); + } + } else { + if (RIOFindFreeID(p, HostP, &ThisUnit, NULL) == 0) { + RIODefaultName(p, HostP, ThisUnit); + FillSlot(ThisUnit, 0, RtaUniq, HostP); + } + } + PktReplyP->Command = ROUTE_USED; + HostP->Copy("RT_USED", PktReplyP->CommandText, 7); } - } - PktReplyP->Command = ROUTE_USED; - HostP->Copy("RT_USED",PktReplyP->CommandText,7); - } - RIOQueueCmdBlk( HostP, Rup, CmdBlkP); - return TRUE; + RIOQueueCmdBlk(HostP, Rup, CmdBlkP); + return TRUE; } -void -RIOFixPhbs(p, HostP, unit) +void RIOFixPhbs(p, HostP, unit) struct rio_info *p; struct Host *HostP; uint unit; { - ushort link, port; - struct Port *PortP; + ushort link, port; + struct Port *PortP; unsigned long flags; int PortN = HostP->Mapping[unit].SysPort; - rio_dprintk (RIO_DEBUG_ROUTE, "RIOFixPhbs unit %d sysport %d\n", unit, PortN); + rio_dprintk(RIO_DEBUG_ROUTE, "RIOFixPhbs unit %d sysport %d\n", unit, PortN); if (PortN != -1) { - ushort dest_unit = HostP->Mapping[unit].ID2; + ushort dest_unit = HostP->Mapping[unit].ID2; /* - ** Get the link number used for the 1st 8 phbs on this unit. - */ + ** Get the link number used for the 1st 8 phbs on this unit. + */ PortP = p->RIOPortp[HostP->Mapping[dest_unit - 1].SysPort]; link = RWORD(PortP->PhbP->link); for (port = 0; port < PORTS_PER_RTA; port++, PortN++) { - ushort dest_port = port + 8; + ushort dest_port = port + 8; #if 0 - uint PktInt; + uint PktInt; #endif - WORD *TxPktP; - PKT *Pkt; + WORD *TxPktP; + PKT *Pkt; PortP = p->RIOPortp[PortN]; rio_spin_lock_irqsave(&PortP->portSem, flags); /* - ** If RTA is not powered on, the tx packets will be - ** unset, so go no further. - */ + ** If RTA is not powered on, the tx packets will be + ** unset, so go no further. + */ if (PortP->TxStart == 0) { - rio_dprintk (RIO_DEBUG_ROUTE, "Tx pkts not set up yet\n"); - rio_spin_unlock_irqrestore(&PortP->portSem, flags); - break; + rio_dprintk(RIO_DEBUG_ROUTE, "Tx pkts not set up yet\n"); + rio_spin_unlock_irqrestore(&PortP->portSem, flags); + break; } /* - ** For the second slot of a 16 port RTA, the driver needs to - ** sort out the phb to port mappings. The dest_unit for this - ** group of 8 phbs is set to the dest_unit of the accompanying - ** 8 port block. The dest_port of the second unit is set to - ** be in the range 8-15 (i.e. 8 is added). Thus, for a 16 port - ** RTA with IDs 5 and 6, traffic bound for port 6 of unit 6 - ** (being the second map ID) will be sent to dest_unit 5, port - ** 14. When this RTA is deleted, dest_unit for ID 6 will be - ** restored, and the dest_port will be reduced by 8. - ** Transmit packets also have a destination field which needs - ** adjusting in the same manner. - ** Note that the unit/port bytes in 'dest' are swapped. - ** We also need to adjust the phb and rup link numbers for the - ** second block of 8 ttys. - */ + ** For the second slot of a 16 port RTA, the driver needs to + ** sort out the phb to port mappings. The dest_unit for this + ** group of 8 phbs is set to the dest_unit of the accompanying + ** 8 port block. The dest_port of the second unit is set to + ** be in the range 8-15 (i.e. 8 is added). Thus, for a 16 port + ** RTA with IDs 5 and 6, traffic bound for port 6 of unit 6 + ** (being the second map ID) will be sent to dest_unit 5, port + ** 14. When this RTA is deleted, dest_unit for ID 6 will be + ** restored, and the dest_port will be reduced by 8. + ** Transmit packets also have a destination field which needs + ** adjusting in the same manner. + ** Note that the unit/port bytes in 'dest' are swapped. + ** We also need to adjust the phb and rup link numbers for the + ** second block of 8 ttys. + */ for (TxPktP = PortP->TxStart; TxPktP <= PortP->TxEnd; TxPktP++) { /* - ** *TxPktP is the pointer to the transmit packet on the host - ** card. This needs to be translated into a 32 bit pointer - ** so it can be accessed from the driver. - */ - Pkt = (PKT *) RIO_PTR(HostP->Caddr,RINDW(TxPktP)); + ** *TxPktP is the pointer to the transmit packet on the host + ** card. This needs to be translated into a 32 bit pointer + ** so it can be accessed from the driver. + */ + Pkt = (PKT *) RIO_PTR(HostP->Caddr, RINDW(TxPktP)); /* - ** If the packet is used, reset it. - */ - Pkt = (PKT *)((uint)Pkt & ~PKT_IN_USE); + ** If the packet is used, reset it. + */ + Pkt = (PKT *) ((uint) Pkt & ~PKT_IN_USE); WBYTE(Pkt->dest_unit, dest_unit); WBYTE(Pkt->dest_port, dest_port); } - rio_dprintk (RIO_DEBUG_ROUTE, "phb dest: Old %x:%x New %x:%x\n", - RWORD(PortP->PhbP->destination) & 0xff, - (RWORD(PortP->PhbP->destination) >> 8) & 0xff, - dest_unit, dest_port); + rio_dprintk(RIO_DEBUG_ROUTE, "phb dest: Old %x:%x New %x:%x\n", RWORD(PortP->PhbP->destination) & 0xff, (RWORD(PortP->PhbP->destination) >> 8) & 0xff, dest_unit, dest_port); WWORD(PortP->PhbP->destination, dest_unit + (dest_port << 8)); WWORD(PortP->PhbP->link, link); rio_spin_unlock_irqrestore(&PortP->portSem, flags); } /* - ** Now make sure the range of ports to be serviced includes - ** the 2nd 8 on this 16 port RTA. - */ - if (link > 3) return; + ** Now make sure the range of ports to be serviced includes + ** the 2nd 8 on this 16 port RTA. + */ + if (link > 3) + return; if (((unit * 8) + 7) > RWORD(HostP->LinkStrP[link].last_port)) { - rio_dprintk (RIO_DEBUG_ROUTE, "last port on host link %d: %d\n", link, (unit * 8) + 7); + rio_dprintk(RIO_DEBUG_ROUTE, "last port on host link %d: %d\n", link, (unit * 8) + 7); WWORD(HostP->LinkStrP[link].last_port, (unit * 8) + 7); } } @@ -723,9 +615,8 @@ uint unit; ** the world about it. This is done to ensure that the configurator ** only gets up-to-date information about what is going on. */ -static int -RIOCheckIsolated(p, HostP, UnitId) -struct rio_info * p; +static int RIOCheckIsolated(p, HostP, UnitId) +struct rio_info *p; struct Host *HostP; uint UnitId; { @@ -733,16 +624,16 @@ uint UnitId; rio_spin_lock_irqsave(&HostP->HostLock, flags); #ifdef CHECK - CheckHostP( HostP ); - CheckUnitId( UnitId ); + CheckHostP(HostP); + CheckUnitId(UnitId); #endif - if ( RIOCheck( HostP, UnitId ) ) { - rio_dprintk (RIO_DEBUG_ROUTE, "Unit %d is NOT isolated\n", UnitId); + if (RIOCheck(HostP, UnitId)) { + rio_dprintk(RIO_DEBUG_ROUTE, "Unit %d is NOT isolated\n", UnitId); rio_spin_unlock_irqrestore(&HostP->HostLock, flags); - return(0); + return (0); } - RIOIsolate(p, HostP, UnitId ); + RIOIsolate(p, HostP, UnitId); RIOSetChange(p); rio_spin_unlock_irqrestore(&HostP->HostLock, flags); return 1; @@ -753,85 +644,83 @@ uint UnitId; ** all the units attached to it. This will mean that the entire ** subnet will re-introduce itself. */ -static int -RIOIsolate(p, HostP, UnitId) -struct rio_info * p; -struct Host * HostP; -uint UnitId; +static int RIOIsolate(p, HostP, UnitId) +struct rio_info *p; +struct Host *HostP; +uint UnitId; { uint link, unit; #ifdef CHECK - CheckHostP( HostP ); - CheckUnitId( UnitId ); + CheckHostP(HostP); + CheckUnitId(UnitId); #endif UnitId--; /* this trick relies on the Unit Id being UNSIGNED! */ - if ( UnitId >= MAX_RUP ) /* dontcha just lurv unsigned maths! */ - return(0); + if (UnitId >= MAX_RUP) /* dontcha just lurv unsigned maths! */ + return (0); - if ( HostP->Mapping[UnitId].Flags & BEEN_HERE ) - return(0); + if (HostP->Mapping[UnitId].Flags & BEEN_HERE) + return (0); HostP->Mapping[UnitId].Flags |= BEEN_HERE; - if ( p->RIOPrintDisabled == DO_PRINT ) - rio_dprintk (RIO_DEBUG_ROUTE, "RIOMesgIsolated %s", HostP->Mapping[UnitId].Name); + if (p->RIOPrintDisabled == DO_PRINT) + rio_dprintk(RIO_DEBUG_ROUTE, "RIOMesgIsolated %s", HostP->Mapping[UnitId].Name); - for ( link=0; linkMapping[UnitId].Topology[link].Unit; HostP->Mapping[UnitId].Topology[link].Unit = ROUTE_DISCONNECT; HostP->Mapping[UnitId].Topology[link].Link = NO_LINK; - RIOIsolate(p, HostP, unit ); + RIOIsolate(p, HostP, unit); } HostP->Mapping[UnitId].Flags &= ~BEEN_HERE; return 1; } -static int -RIOCheck(HostP, UnitId) +static int RIOCheck(HostP, UnitId) struct Host *HostP; uint UnitId; { - unsigned char link; + unsigned char link; #ifdef CHECK - CheckHostP( HostP ); - CheckUnitId( UnitId ); + CheckHostP(HostP); + CheckUnitId(UnitId); #endif /* rio_dprint(RIO_DEBUG_ROUTE, ("Check to see if unit %d has a route to the host\n",UnitId)); */ - rio_dprintk (RIO_DEBUG_ROUTE, "RIOCheck : UnitID = %d\n", UnitId); + rio_dprintk(RIO_DEBUG_ROUTE, "RIOCheck : UnitID = %d\n", UnitId); - if ( UnitId == HOST_ID ) { + if (UnitId == HOST_ID) { /* rio_dprint(RIO_DEBUG_ROUTE, ("Unit %d is NOT isolated - it IS the host!\n", UnitId)); */ return 1; } UnitId--; - if ( UnitId >= MAX_RUP ) { + if (UnitId >= MAX_RUP) { /* rio_dprint(RIO_DEBUG_ROUTE, ("Unit %d - ignored.\n", UnitId)); */ return 0; } - for ( link=0; linkMapping[UnitId].Topology[link].Unit==HOST_ID ) { + for (link = 0; link < LINKS_PER_UNIT; link++) { + if (HostP->Mapping[UnitId].Topology[link].Unit == HOST_ID) { /* rio_dprint(RIO_DEBUG_ROUTE, ("Unit %d is connected directly to host via link (%c).\n", - UnitId, 'A'+link)); */ + UnitId, 'A'+link)); */ return 1; } } - if ( HostP->Mapping[UnitId].Flags & BEEN_HERE ) { + if (HostP->Mapping[UnitId].Flags & BEEN_HERE) { /* rio_dprint(RIO_DEBUG_ROUTE, ("Been to Unit %d before - ignoring\n", UnitId)); */ return 0; } HostP->Mapping[UnitId].Flags |= BEEN_HERE; - for ( link=0; link < LINKS_PER_UNIT; link++ ) { + for (link = 0; link < LINKS_PER_UNIT; link++) { /* rio_dprint(RIO_DEBUG_ROUTE, ("Unit %d check link (%c)\n", UnitId,'A'+link)); */ - if ( RIOCheck( HostP, HostP->Mapping[UnitId].Topology[link].Unit ) ) { + if (RIOCheck(HostP, HostP->Mapping[UnitId].Topology[link].Unit)) { /* rio_dprint(RIO_DEBUG_ROUTE, ("Unit %d is connected to something that knows the host via link (%c)\n", UnitId,link+'A')); */ HostP->Mapping[UnitId].Flags &= ~BEEN_HERE; return 1; @@ -841,7 +730,7 @@ uint UnitId; HostP->Mapping[UnitId].Flags &= ~BEEN_HERE; /* rio_dprint(RIO_DEBUG_ROUTE, ("Unit %d DOESNT KNOW THE HOST!\n", UnitId)); */ - + return 0; } @@ -849,61 +738,57 @@ uint UnitId; ** Returns the type of unit (host, 16/8 port RTA) */ -uint -GetUnitType(Uniq) +uint GetUnitType(Uniq) uint Uniq; { - switch ( (Uniq >> 28) & 0xf) - { - case RIO_AT: - case RIO_MCA: - case RIO_EISA: - case RIO_PCI: - rio_dprintk (RIO_DEBUG_ROUTE, "Unit type: Host\n"); - return(TYPE_HOST); - case RIO_RTA_16: - rio_dprintk (RIO_DEBUG_ROUTE, "Unit type: 16 port RTA\n"); - return(TYPE_RTA16); - case RIO_RTA: - rio_dprintk (RIO_DEBUG_ROUTE, "Unit type: 8 port RTA\n"); - return(TYPE_RTA8); - default : - rio_dprintk (RIO_DEBUG_ROUTE, "Unit type: Unrecognised\n"); - return(99); + switch ((Uniq >> 28) & 0xf) { + case RIO_AT: + case RIO_MCA: + case RIO_EISA: + case RIO_PCI: + rio_dprintk(RIO_DEBUG_ROUTE, "Unit type: Host\n"); + return (TYPE_HOST); + case RIO_RTA_16: + rio_dprintk(RIO_DEBUG_ROUTE, "Unit type: 16 port RTA\n"); + return (TYPE_RTA16); + case RIO_RTA: + rio_dprintk(RIO_DEBUG_ROUTE, "Unit type: 8 port RTA\n"); + return (TYPE_RTA8); + default: + rio_dprintk(RIO_DEBUG_ROUTE, "Unit type: Unrecognised\n"); + return (99); } } -int -RIOSetChange(p) -struct rio_info * p; +int RIOSetChange(p) +struct rio_info *p; { - if ( p->RIOQuickCheck != NOT_CHANGED ) - return(0); + if (p->RIOQuickCheck != NOT_CHANGED) + return (0); p->RIOQuickCheck = CHANGED; - if ( p->RIOSignalProcess ) { - rio_dprintk (RIO_DEBUG_ROUTE, "Send SIG-HUP"); + if (p->RIOSignalProcess) { + rio_dprintk(RIO_DEBUG_ROUTE, "Send SIG-HUP"); /* - psignal( RIOSignalProcess, SIGHUP ); - */ + psignal( RIOSignalProcess, SIGHUP ); + */ } - return(0); + return (0); } -static void -RIOConCon(p, HostP, FromId, FromLink, ToId, ToLink, Change) -struct rio_info * p; +static void RIOConCon(p, HostP, FromId, FromLink, ToId, ToLink, Change) +struct rio_info *p; struct Host *HostP; uint FromId; uint FromLink; uint ToId; uint ToLink; -int Change; +int Change; { - char *FromName; - char *FromType; - char *ToName; - char *ToType; - unsigned int tp; + char *FromName; + char *FromType; + char *ToName; + char *ToType; + unsigned int tp; /* ** 15.10.1998 ARG - ESIL 0759 @@ -932,38 +817,32 @@ int Change; ** rio_info struct - RIORtaDisCons (RIO RTA connections) keeps track of RTA ** connections and disconnections. */ - if (Change == CONNECT) { - if (p->RIORtaDisCons) p->RIORtaDisCons--; - } - else { + if (Change == CONNECT) { + if (p->RIORtaDisCons) + p->RIORtaDisCons--; + } else { p->RIORtaDisCons++; - } + } - if ( p->RIOPrintDisabled == DONT_PRINT ) + if (p->RIOPrintDisabled == DONT_PRINT) return; - if ( FromId > ToId ) { + if (FromId > ToId) { tp = FromId; FromId = ToId; ToId = tp; tp = FromLink; FromLink = ToLink; ToLink = tp; - } - - FromName = FromId ? HostP->Mapping[FromId-1].Name : HostP->Name; - FromType = FromId ? "RTA" : "HOST"; - ToName = ToId ? HostP->Mapping[ToId-1].Name : HostP->Name; - ToType = ToId ? "RTA" : "HOST"; - - rio_dprintk (RIO_DEBUG_ROUTE, "Link between %s '%s' (%c) and %s '%s' (%c) %s.\n", - FromType, FromName, 'A'+FromLink, - ToType, ToName, 'A'+ToLink, - (Change==CONNECT) ? "established" : "disconnected"); - cprintf("Link between %s '%s' (%c) and %s '%s' (%c) %s.\n", - FromType, FromName, 'A'+FromLink, - ToType, ToName, 'A'+ToLink, - (Change==CONNECT) ? "established" : "disconnected"); + } + + FromName = FromId ? HostP->Mapping[FromId - 1].Name : HostP->Name; + FromType = FromId ? "RTA" : "HOST"; + ToName = ToId ? HostP->Mapping[ToId - 1].Name : HostP->Name; + ToType = ToId ? "RTA" : "HOST"; + + rio_dprintk(RIO_DEBUG_ROUTE, "Link between %s '%s' (%c) and %s '%s' (%c) %s.\n", FromType, FromName, 'A' + FromLink, ToType, ToName, 'A' + ToLink, (Change == CONNECT) ? "established" : "disconnected"); + cprintf("Link between %s '%s' (%c) and %s '%s' (%c) %s.\n", FromType, FromName, 'A' + FromLink, ToType, ToName, 'A' + ToLink, (Change == CONNECT) ? "established" : "disconnected"); } /* @@ -972,24 +851,21 @@ int Change; ** Delete and RTA entry from the saved table given to us ** by the configuration program. */ -static int -RIORemoveFromSavedTable(struct rio_info *p, struct Map *pMap) +static int RIORemoveFromSavedTable(struct rio_info *p, struct Map *pMap) { - int entry; - - /* - ** We loop for all entries even after finding an entry and - ** zeroing it because we may have two entries to delete if - ** it's a 16 port RTA. - */ - for (entry = 0; entry < TOTAL_MAP_ENTRIES; entry++) - { - if (p->RIOSavedTable[entry].RtaUniqueNum == pMap->RtaUniqueNum) - { - bzero((caddr_t)&p->RIOSavedTable[entry], sizeof(struct Map)); + int entry; + + /* + ** We loop for all entries even after finding an entry and + ** zeroing it because we may have two entries to delete if + ** it's a 16 port RTA. + */ + for (entry = 0; entry < TOTAL_MAP_ENTRIES; entry++) { + if (p->RIOSavedTable[entry].RtaUniqueNum == pMap->RtaUniqueNum) { + bzero((caddr_t) & p->RIOSavedTable[entry], sizeof(struct Map)); + } } - } - return 0; + return 0; } @@ -999,64 +875,58 @@ RIORemoveFromSavedTable(struct rio_info *p, struct Map *pMap) ** Scan the unit links to and return zero if the unit is completely ** disconnected. */ -static int -RIOFreeDisconnected(struct rio_info *p, struct Host *HostP, int unit) +static int RIOFreeDisconnected(struct rio_info *p, struct Host *HostP, int unit) { - int link; - - - rio_dprintk (RIO_DEBUG_ROUTE, "RIOFreeDisconnect unit %d\n", unit); - /* - ** If the slot is tentative and does not belong to the - ** second half of a 16 port RTA then scan to see if - ** is disconnected. - */ - for (link = 0; link < LINKS_PER_UNIT; link++) - { - if (HostP->Mapping[unit].Topology[link].Unit != ROUTE_DISCONNECT) - break; - } - - /* - ** If not all links are disconnected then we can forget about it. - */ - if (link < LINKS_PER_UNIT) - return 1; + int link; + + + rio_dprintk(RIO_DEBUG_ROUTE, "RIOFreeDisconnect unit %d\n", unit); + /* + ** If the slot is tentative and does not belong to the + ** second half of a 16 port RTA then scan to see if + ** is disconnected. + */ + for (link = 0; link < LINKS_PER_UNIT; link++) { + if (HostP->Mapping[unit].Topology[link].Unit != ROUTE_DISCONNECT) + break; + } + + /* + ** If not all links are disconnected then we can forget about it. + */ + if (link < LINKS_PER_UNIT) + return 1; #ifdef NEED_TO_FIX_THIS - /* Ok so all the links are disconnected. But we may have only just - ** made this slot tentative and not yet received a topology update. - ** Lets check how long ago we made it tentative. - */ - rio_dprintk (RIO_DEBUG_ROUTE, "Just about to check LBOLT on entry %d\n", unit); - if (drv_getparm(LBOLT, (ulong_t *) ¤t_time)) - rio_dprintk (RIO_DEBUG_ROUTE, "drv_getparm(LBOLT,....) Failed.\n"); - - elapse_time = current_time - TentTime[unit]; - rio_dprintk (RIO_DEBUG_ROUTE, "elapse %d = current %d - tent %d (%d usec)\n", - elapse_time, current_time, TentTime[unit], drv_hztousec(elapse_time)); - if (drv_hztousec(elapse_time) < WAIT_TO_FINISH) - { - rio_dprintk (RIO_DEBUG_ROUTE, "Skipping slot %d, not timed out yet %d\n", - unit, drv_hztousec(elapse_time)); - return 1; - } + /* Ok so all the links are disconnected. But we may have only just + ** made this slot tentative and not yet received a topology update. + ** Lets check how long ago we made it tentative. + */ + rio_dprintk(RIO_DEBUG_ROUTE, "Just about to check LBOLT on entry %d\n", unit); + if (drv_getparm(LBOLT, (ulong_t *) & current_time)) + rio_dprintk(RIO_DEBUG_ROUTE, "drv_getparm(LBOLT,....) Failed.\n"); + + elapse_time = current_time - TentTime[unit]; + rio_dprintk(RIO_DEBUG_ROUTE, "elapse %d = current %d - tent %d (%d usec)\n", elapse_time, current_time, TentTime[unit], drv_hztousec(elapse_time)); + if (drv_hztousec(elapse_time) < WAIT_TO_FINISH) { + rio_dprintk(RIO_DEBUG_ROUTE, "Skipping slot %d, not timed out yet %d\n", unit, drv_hztousec(elapse_time)); + return 1; + } #endif - /* - ** We have found an usable slot. - ** If it is half of a 16 port RTA then delete the other half. - */ - if (HostP->Mapping[unit].ID2 != 0) - { - int nOther = (HostP->Mapping[unit].ID2) -1; - - rio_dprintk (RIO_DEBUG_ROUTE, "RioFreedis second slot %d.\n", nOther); - bzero((caddr_t)&HostP->Mapping[nOther], sizeof(struct Map)); - } - RIORemoveFromSavedTable(p, &HostP->Mapping[unit]); + /* + ** We have found an usable slot. + ** If it is half of a 16 port RTA then delete the other half. + */ + if (HostP->Mapping[unit].ID2 != 0) { + int nOther = (HostP->Mapping[unit].ID2) - 1; + + rio_dprintk(RIO_DEBUG_ROUTE, "RioFreedis second slot %d.\n", nOther); + bzero((caddr_t) & HostP->Mapping[nOther], sizeof(struct Map)); + } + RIORemoveFromSavedTable(p, &HostP->Mapping[unit]); - return 0; + return 0; } @@ -1066,150 +936,134 @@ RIOFreeDisconnected(struct rio_info *p, struct Host *HostP, int unit) ** This function scans the given host table for either one ** or two free unit ID's. */ -int -RIOFindFreeID(struct rio_info *p, struct Host *HostP, uint *pID1, uint *pID2) +int RIOFindFreeID(struct rio_info *p, struct Host *HostP, uint * pID1, uint * pID2) { - int unit,tempID; - - /* - ** Initialise the ID's to MAX_RUP. - ** We do this to make the loop for setting the ID's as simple as - ** possible. - */ - *pID1 = MAX_RUP; - if (pID2 != NULL) - *pID2 = MAX_RUP; - - /* - ** Scan all entries of the host mapping table for free slots. - ** We scan for free slots first and then if that is not successful - ** we start all over again looking for tentative slots we can re-use. - */ - for (unit = 0; unit < MAX_RUP; unit++) - { - rio_dprintk (RIO_DEBUG_ROUTE, "Scanning unit %d\n",unit); + int unit, tempID; + /* - ** If the flags are zero then the slot is empty. - */ - if (HostP->Mapping[unit].Flags == 0) - { - rio_dprintk (RIO_DEBUG_ROUTE, " This slot is empty.\n"); - /* - ** If we haven't allocated the first ID then do it now. - */ - if (*pID1 == MAX_RUP) - { - rio_dprintk (RIO_DEBUG_ROUTE, "Make tentative entry for first unit %d\n", unit); - *pID1 = unit; + ** Initialise the ID's to MAX_RUP. + ** We do this to make the loop for setting the ID's as simple as + ** possible. + */ + *pID1 = MAX_RUP; + if (pID2 != NULL) + *pID2 = MAX_RUP; + /* + ** Scan all entries of the host mapping table for free slots. + ** We scan for free slots first and then if that is not successful + ** we start all over again looking for tentative slots we can re-use. + */ + for (unit = 0; unit < MAX_RUP; unit++) { + rio_dprintk(RIO_DEBUG_ROUTE, "Scanning unit %d\n", unit); /* - ** If the second ID is not needed then we can return - ** now. - */ - if (pID2 == NULL) - return 0; - } - else - { - /* - ** Allocate the second slot and return. - */ - rio_dprintk (RIO_DEBUG_ROUTE, "Make tentative entry for second unit %d\n", unit); - *pID2 = unit; - return 0; - } + ** If the flags are zero then the slot is empty. + */ + if (HostP->Mapping[unit].Flags == 0) { + rio_dprintk(RIO_DEBUG_ROUTE, " This slot is empty.\n"); + /* + ** If we haven't allocated the first ID then do it now. + */ + if (*pID1 == MAX_RUP) { + rio_dprintk(RIO_DEBUG_ROUTE, "Make tentative entry for first unit %d\n", unit); + *pID1 = unit; + + /* + ** If the second ID is not needed then we can return + ** now. + */ + if (pID2 == NULL) + return 0; + } else { + /* + ** Allocate the second slot and return. + */ + rio_dprintk(RIO_DEBUG_ROUTE, "Make tentative entry for second unit %d\n", unit); + *pID2 = unit; + return 0; + } + } } - } - - /* - ** If we manage to come out of the free slot loop then we - ** need to start all over again looking for tentative slots - ** that we can re-use. - */ - rio_dprintk (RIO_DEBUG_ROUTE, "Starting to scan for tentative slots\n"); - for (unit = 0; unit < MAX_RUP; unit++) - { - if (((HostP->Mapping[unit].Flags & SLOT_TENTATIVE) || - (HostP->Mapping[unit].Flags == 0)) && ! - (HostP->Mapping[unit].Flags & RTA16_SECOND_SLOT )) - { - rio_dprintk (RIO_DEBUG_ROUTE, " Slot %d looks promising.\n",unit); - - if(unit == *pID1) - { - rio_dprintk (RIO_DEBUG_ROUTE, " No it isn't, its the 1st half\n"); - continue; - } - - /* - ** Slot is Tentative or Empty, but not a tentative second - ** slot of a 16 porter. - ** Attempt to free up this slot (and its parnter if - ** it is a 16 port slot. The second slot will become - ** empty after a call to RIOFreeDisconnected so thats why - ** we look for empty slots above as well). - */ - if (HostP->Mapping[unit].Flags != 0) - if (RIOFreeDisconnected(p, HostP, unit) != 0) - continue; - /* - ** If we haven't allocated the first ID then do it now. - */ - if (*pID1 == MAX_RUP) - { - rio_dprintk (RIO_DEBUG_ROUTE, "Grab tentative entry for first unit %d\n", unit); - *pID1 = unit; - /* - ** Clear out this slot now that we intend to use it. - */ - bzero(&HostP->Mapping[unit], sizeof(struct Map)); + /* + ** If we manage to come out of the free slot loop then we + ** need to start all over again looking for tentative slots + ** that we can re-use. + */ + rio_dprintk(RIO_DEBUG_ROUTE, "Starting to scan for tentative slots\n"); + for (unit = 0; unit < MAX_RUP; unit++) { + if (((HostP->Mapping[unit].Flags & SLOT_TENTATIVE) || (HostP->Mapping[unit].Flags == 0)) && !(HostP->Mapping[unit].Flags & RTA16_SECOND_SLOT)) { + rio_dprintk(RIO_DEBUG_ROUTE, " Slot %d looks promising.\n", unit); + + if (unit == *pID1) { + rio_dprintk(RIO_DEBUG_ROUTE, " No it isn't, its the 1st half\n"); + continue; + } - /* - ** If the second ID is not needed then we can return - ** now. - */ - if (pID2 == NULL) - return 0; - } - else - { - /* - ** Allocate the second slot and return. - */ - rio_dprintk (RIO_DEBUG_ROUTE, "Grab tentative/empty entry for second unit %d\n", - unit); - *pID2 = unit; + /* + ** Slot is Tentative or Empty, but not a tentative second + ** slot of a 16 porter. + ** Attempt to free up this slot (and its parnter if + ** it is a 16 port slot. The second slot will become + ** empty after a call to RIOFreeDisconnected so thats why + ** we look for empty slots above as well). + */ + if (HostP->Mapping[unit].Flags != 0) + if (RIOFreeDisconnected(p, HostP, unit) != 0) + continue; + /* + ** If we haven't allocated the first ID then do it now. + */ + if (*pID1 == MAX_RUP) { + rio_dprintk(RIO_DEBUG_ROUTE, "Grab tentative entry for first unit %d\n", unit); + *pID1 = unit; - /* - ** Clear out this slot now that we intend to use it. - */ - bzero(&HostP->Mapping[unit], sizeof(struct Map)); - - /* At this point under the right(wrong?) conditions - ** we may have a first unit ID being higher than the - ** second unit ID. This is a bad idea if we are about - ** to fill the slots with a 16 port RTA. - ** Better check and swap them over. - */ - - if (*pID1 > *pID2) - { - rio_dprintk (RIO_DEBUG_ROUTE, "Swapping IDS %d %d\n", *pID1, *pID2); - tempID = *pID1; - *pID1 = *pID2; - *pID2 = tempID; + /* + ** Clear out this slot now that we intend to use it. + */ + bzero(&HostP->Mapping[unit], sizeof(struct Map)); + + /* + ** If the second ID is not needed then we can return + ** now. + */ + if (pID2 == NULL) + return 0; + } else { + /* + ** Allocate the second slot and return. + */ + rio_dprintk(RIO_DEBUG_ROUTE, "Grab tentative/empty entry for second unit %d\n", unit); + *pID2 = unit; + + /* + ** Clear out this slot now that we intend to use it. + */ + bzero(&HostP->Mapping[unit], sizeof(struct Map)); + + /* At this point under the right(wrong?) conditions + ** we may have a first unit ID being higher than the + ** second unit ID. This is a bad idea if we are about + ** to fill the slots with a 16 port RTA. + ** Better check and swap them over. + */ + + if (*pID1 > *pID2) { + rio_dprintk(RIO_DEBUG_ROUTE, "Swapping IDS %d %d\n", *pID1, *pID2); + tempID = *pID1; + *pID1 = *pID2; + *pID2 = tempID; + } + return 0; + } } - return 0; - } } - } - /* - ** If we manage to get to the end of the second loop then we - ** can give up and return a failure. - */ - return 1; + /* + ** If we manage to get to the end of the second loop then we + ** can give up and return a failure. + */ + return 1; } diff --git a/drivers/char/rio/riospace.h b/drivers/char/rio/riospace.h index 32b09b0f23aa..534f1f5b9f53 100644 --- a/drivers/char/rio/riospace.h +++ b/drivers/char/rio/riospace.h @@ -47,9 +47,8 @@ static char *_riospace_h_sccs_ = "@(#)riospace.h 1.2"; ** In particular, it won't be able to see changes to RIO_SLOTS */ -struct Conf -{ - char Locator[24]; +struct Conf { + char Locator[24]; unsigned int StartupTime; unsigned int SlowCook; unsigned int IntrPollTime; @@ -59,8 +58,8 @@ struct Conf unsigned int HostLoadBase; unsigned int XpHz; unsigned int XpCps; - char *XpOn; - char *XpOff; + char *XpOn; + char *XpOff; unsigned int MaxXpCps; unsigned int MinXpCps; unsigned int SpinCmds; @@ -74,7 +73,7 @@ struct Conf /* ** Board types - these MUST correspond to product codes! -*/ +*/ #define RIO_EMPTY 0x0 #define RIO_EISA 0x3 #define RIO_RTA_16 0x9 @@ -86,18 +85,16 @@ struct Conf /* ** Board data structure. This is used for configuration info */ -struct Brd -{ - unsigned char Type; /* RIO_EISA, RIO_MCA, RIO_AT, RIO_EMPTY... */ - unsigned char Ivec; /* POLLED or ivec number */ - unsigned char Mode; /* Control stuff, see below */ +struct Brd { + unsigned char Type; /* RIO_EISA, RIO_MCA, RIO_AT, RIO_EMPTY... */ + unsigned char Ivec; /* POLLED or ivec number */ + unsigned char Mode; /* Control stuff, see below */ }; -struct Board -{ - char Locator[RIO_LOCATOR_LEN]; - int NumSlots; - struct Brd Boards[MAX_RIO_BOARDS]; +struct Board { + char Locator[RIO_LOCATOR_LEN]; + int NumSlots; + struct Brd Boards[MAX_RIO_BOARDS]; }; #define BOOT_FROM_LINK 0x00 @@ -158,4 +155,4 @@ struct Board #define DBG_ALWAYS 0x80000000 -#endif /* __rio_riospace_h__ */ +#endif /* __rio_riospace_h__ */ diff --git a/drivers/char/rio/riotable.c b/drivers/char/rio/riotable.c index e45bc275907a..42c3dffcbbb2 100644 --- a/drivers/char/rio/riotable.c +++ b/drivers/char/rio/riotable.c @@ -91,9 +91,8 @@ static char *_riotable_c_sccs_ = "@(#)riotable.c 1.2"; ** A configuration table has been loaded. It is now up to us ** to sort it out and use the information contained therein. */ -int -RIONewTable(p) -struct rio_info * p; +int RIONewTable(p) +struct rio_info *p; { int Host, Host1, Host2, NameIsUnique, Entry, SubEnt; struct Map *MapP; @@ -103,26 +102,26 @@ struct rio_info * p; char *cptr; /* - ** We have been sent a new table to install. We need to break - ** it down into little bits and spread it around a bit to see - ** what we have got. - */ + ** We have been sent a new table to install. We need to break + ** it down into little bits and spread it around a bit to see + ** what we have got. + */ /* - ** Things to check: - ** (things marked 'xx' aren't checked any more!) - ** (1) That there are no booted Hosts/RTAs out there. - ** (2) That the names are properly formed - ** (3) That blank entries really are. - ** xx (4) That hosts mentioned in the table actually exist. xx - ** (5) That the IDs are unique (per host). - ** (6) That host IDs are zero - ** (7) That port numbers are valid - ** (8) That port numbers aren't duplicated - ** (9) That names aren't duplicated - ** xx (10) That hosts that actually exist are mentioned in the table. xx - */ - rio_dprintk (RIO_DEBUG_TABLE, "RIONewTable: entering(1)\n"); - if ( p->RIOSystemUp ) { /* (1) */ + ** Things to check: + ** (things marked 'xx' aren't checked any more!) + ** (1) That there are no booted Hosts/RTAs out there. + ** (2) That the names are properly formed + ** (3) That blank entries really are. + ** xx (4) That hosts mentioned in the table actually exist. xx + ** (5) That the IDs are unique (per host). + ** (6) That host IDs are zero + ** (7) That port numbers are valid + ** (8) That port numbers aren't duplicated + ** (9) That names aren't duplicated + ** xx (10) That hosts that actually exist are mentioned in the table. xx + */ + rio_dprintk(RIO_DEBUG_TABLE, "RIONewTable: entering(1)\n"); + if (p->RIOSystemUp) { /* (1) */ p->RIOError.Error = HOST_HAS_ALREADY_BEEN_BOOTED; return -EBUSY; } @@ -131,19 +130,19 @@ struct rio_info * p; p->RIOError.Entry = -1; p->RIOError.Other = -1; - for ( Entry=0; EntryRIOConnectTable[Entry]; if ((MapP->Flags & RTA16_SECOND_SLOT) == 0) { - rio_dprintk (RIO_DEBUG_TABLE, "RIONewTable: entering(2)\n"); - cptr = MapP->Name; /* (2) */ - cptr[MAX_NAME_LEN-1]='\0'; - if ( cptr[0]=='\0' ) { - bcopy(MapP->RtaUniqueNum?"RTA NN":"HOST NN",MapP->Name,8); - MapP->Name[5] = '0'+Entry/10; - MapP->Name[6] = '0'+Entry%10; + rio_dprintk(RIO_DEBUG_TABLE, "RIONewTable: entering(2)\n"); + cptr = MapP->Name; /* (2) */ + cptr[MAX_NAME_LEN - 1] = '\0'; + if (cptr[0] == '\0') { + bcopy(MapP->RtaUniqueNum ? "RTA NN" : "HOST NN", MapP->Name, 8); + MapP->Name[5] = '0' + Entry / 10; + MapP->Name[6] = '0' + Entry % 10; } - while ( *cptr ) { - if ( *cptr<' ' || *cptr>'~' ) { + while (*cptr) { + if (*cptr < ' ' || *cptr > '~') { p->RIOError.Error = BAD_CHARACTER_IN_NAME; p->RIOError.Entry = Entry; return -ENXIO; @@ -153,133 +152,119 @@ struct rio_info * p; } /* - ** If the entry saved was a tentative entry then just forget - ** about it. - */ - if ( MapP->Flags & SLOT_TENTATIVE ) { + ** If the entry saved was a tentative entry then just forget + ** about it. + */ + if (MapP->Flags & SLOT_TENTATIVE) { MapP->HostUniqueNum = 0; MapP->RtaUniqueNum = 0; continue; } - rio_dprintk (RIO_DEBUG_TABLE, "RIONewTable: entering(3)\n"); - if ( !MapP->RtaUniqueNum && !MapP->HostUniqueNum ) { /* (3) */ - if ( MapP->ID || MapP->SysPort || MapP->Flags ) { - rio_dprintk (RIO_DEBUG_TABLE, "%s pretending to be empty but isn't\n",MapP->Name); + rio_dprintk(RIO_DEBUG_TABLE, "RIONewTable: entering(3)\n"); + if (!MapP->RtaUniqueNum && !MapP->HostUniqueNum) { /* (3) */ + if (MapP->ID || MapP->SysPort || MapP->Flags) { + rio_dprintk(RIO_DEBUG_TABLE, "%s pretending to be empty but isn't\n", MapP->Name); p->RIOError.Error = TABLE_ENTRY_ISNT_PROPERLY_NULL; p->RIOError.Entry = Entry; return -ENXIO; } - rio_dprintk (RIO_DEBUG_TABLE, "!RIO: Daemon: test (3) passes\n"); + rio_dprintk(RIO_DEBUG_TABLE, "!RIO: Daemon: test (3) passes\n"); continue; } - rio_dprintk (RIO_DEBUG_TABLE, "RIONewTable: entering(4)\n"); - for ( Host=0; HostRIONumHosts; Host++ ) { /* (4) */ - if ( p->RIOHosts[Host].UniqueNum==MapP->HostUniqueNum ) { + rio_dprintk(RIO_DEBUG_TABLE, "RIONewTable: entering(4)\n"); + for (Host = 0; Host < p->RIONumHosts; Host++) { /* (4) */ + if (p->RIOHosts[Host].UniqueNum == MapP->HostUniqueNum) { HostP = &p->RIOHosts[Host]; /* - ** having done the lookup, we don't really want to do - ** it again, so hang the host number in a safe place - */ + ** having done the lookup, we don't really want to do + ** it again, so hang the host number in a safe place + */ MapP->Topology[0].Unit = Host; break; } } - if ( Host >= p->RIONumHosts ) { - rio_dprintk (RIO_DEBUG_TABLE, "RTA %s has unknown host unique number 0x%x\n", - MapP->Name, MapP->HostUniqueNum); + if (Host >= p->RIONumHosts) { + rio_dprintk(RIO_DEBUG_TABLE, "RTA %s has unknown host unique number 0x%x\n", MapP->Name, MapP->HostUniqueNum); MapP->HostUniqueNum = 0; - /* MapP->RtaUniqueNum = 0; */ - /* MapP->ID = 0; */ - /* MapP->Flags = 0; */ - /* MapP->SysPort = 0; */ - /* MapP->Name[0] = 0; */ + /* MapP->RtaUniqueNum = 0; */ + /* MapP->ID = 0; */ + /* MapP->Flags = 0; */ + /* MapP->SysPort = 0; */ + /* MapP->Name[0] = 0; */ continue; } - rio_dprintk (RIO_DEBUG_TABLE, "RIONewTable: entering(5)\n"); - if ( MapP->RtaUniqueNum ) { /* (5) */ - if ( !MapP->ID ) { - rio_dprintk (RIO_DEBUG_TABLE, "RIO: RTA %s has been allocated an ID of zero!\n", - MapP->Name); - p->RIOError.Error = ZERO_RTA_ID; + rio_dprintk(RIO_DEBUG_TABLE, "RIONewTable: entering(5)\n"); + if (MapP->RtaUniqueNum) { /* (5) */ + if (!MapP->ID) { + rio_dprintk(RIO_DEBUG_TABLE, "RIO: RTA %s has been allocated an ID of zero!\n", MapP->Name); + p->RIOError.Error = ZERO_RTA_ID; p->RIOError.Entry = Entry; return -ENXIO; } - if ( MapP->ID > MAX_RUP ) { - rio_dprintk (RIO_DEBUG_TABLE, "RIO: RTA %s has been allocated an invalid ID %d\n", - MapP->Name, MapP->ID); + if (MapP->ID > MAX_RUP) { + rio_dprintk(RIO_DEBUG_TABLE, "RIO: RTA %s has been allocated an invalid ID %d\n", MapP->Name, MapP->ID); p->RIOError.Error = ID_NUMBER_OUT_OF_RANGE; p->RIOError.Entry = Entry; return -ENXIO; } - for ( SubEnt=0; SubEntHostUniqueNum == - p->RIOConnectTable[SubEnt].HostUniqueNum && - MapP->ID == p->RIOConnectTable[SubEnt].ID ) { - rio_dprintk (RIO_DEBUG_TABLE, "Dupl. ID number allocated to RTA %s and RTA %s\n", - MapP->Name, p->RIOConnectTable[SubEnt].Name); + for (SubEnt = 0; SubEnt < Entry; SubEnt++) { + if (MapP->HostUniqueNum == p->RIOConnectTable[SubEnt].HostUniqueNum && MapP->ID == p->RIOConnectTable[SubEnt].ID) { + rio_dprintk(RIO_DEBUG_TABLE, "Dupl. ID number allocated to RTA %s and RTA %s\n", MapP->Name, p->RIOConnectTable[SubEnt].Name); p->RIOError.Error = DUPLICATED_RTA_ID; p->RIOError.Entry = Entry; p->RIOError.Other = SubEnt; return -ENXIO; } /* - ** If the RtaUniqueNum is the same, it may be looking at both - ** entries for a 16 port RTA, so check the ids - */ - if ((MapP->RtaUniqueNum == - p->RIOConnectTable[SubEnt].RtaUniqueNum) - && (MapP->ID2 != p->RIOConnectTable[SubEnt].ID)) { - rio_dprintk (RIO_DEBUG_TABLE, "RTA %s has duplicate unique number\n",MapP->Name); - rio_dprintk (RIO_DEBUG_TABLE, "RTA %s has duplicate unique number\n", - p->RIOConnectTable[SubEnt].Name); + ** If the RtaUniqueNum is the same, it may be looking at both + ** entries for a 16 port RTA, so check the ids + */ + if ((MapP->RtaUniqueNum == p->RIOConnectTable[SubEnt].RtaUniqueNum) + && (MapP->ID2 != p->RIOConnectTable[SubEnt].ID)) { + rio_dprintk(RIO_DEBUG_TABLE, "RTA %s has duplicate unique number\n", MapP->Name); + rio_dprintk(RIO_DEBUG_TABLE, "RTA %s has duplicate unique number\n", p->RIOConnectTable[SubEnt].Name); p->RIOError.Error = DUPLICATE_UNIQUE_NUMBER; p->RIOError.Entry = Entry; p->RIOError.Other = SubEnt; return -ENXIO; } } - rio_dprintk (RIO_DEBUG_TABLE, "RIONewTable: entering(7a)\n"); + rio_dprintk(RIO_DEBUG_TABLE, "RIONewTable: entering(7a)\n"); /* (7a) */ - if ((MapP->SysPort != NO_PORT)&&(MapP->SysPort % PORTS_PER_RTA)) { - rio_dprintk (RIO_DEBUG_TABLE, "TTY Port number %d-RTA %s is not a multiple of %d!\n", - (int)MapP->SysPort,MapP->Name, PORTS_PER_RTA); + if ((MapP->SysPort != NO_PORT) && (MapP->SysPort % PORTS_PER_RTA)) { + rio_dprintk(RIO_DEBUG_TABLE, "TTY Port number %d-RTA %s is not a multiple of %d!\n", (int) MapP->SysPort, MapP->Name, PORTS_PER_RTA); p->RIOError.Error = TTY_NUMBER_OUT_OF_RANGE; p->RIOError.Entry = Entry; return -ENXIO; } - rio_dprintk (RIO_DEBUG_TABLE, "RIONewTable: entering(7b)\n"); + rio_dprintk(RIO_DEBUG_TABLE, "RIONewTable: entering(7b)\n"); /* (7b) */ - if ((MapP->SysPort != NO_PORT)&&(MapP->SysPort >= RIO_PORTS)) { - rio_dprintk (RIO_DEBUG_TABLE, "TTY Port number %d for RTA %s is too big\n", - (int)MapP->SysPort, MapP->Name); + if ((MapP->SysPort != NO_PORT) && (MapP->SysPort >= RIO_PORTS)) { + rio_dprintk(RIO_DEBUG_TABLE, "TTY Port number %d for RTA %s is too big\n", (int) MapP->SysPort, MapP->Name); p->RIOError.Error = TTY_NUMBER_OUT_OF_RANGE; p->RIOError.Entry = Entry; return -ENXIO; } - for ( SubEnt=0; SubEntRIOConnectTable[SubEnt].Flags & RTA16_SECOND_SLOT ) - continue; - if ( p->RIOConnectTable[SubEnt].RtaUniqueNum ) { - rio_dprintk (RIO_DEBUG_TABLE, "RIONewTable: entering(8)\n"); + for (SubEnt = 0; SubEnt < Entry; SubEnt++) { + if (p->RIOConnectTable[SubEnt].Flags & RTA16_SECOND_SLOT) + continue; + if (p->RIOConnectTable[SubEnt].RtaUniqueNum) { + rio_dprintk(RIO_DEBUG_TABLE, "RIONewTable: entering(8)\n"); /* (8) */ - if ( (MapP->SysPort != NO_PORT) && (MapP->SysPort == - p->RIOConnectTable[SubEnt].SysPort) ) { - rio_dprintk (RIO_DEBUG_TABLE, "RTA %s:same TTY port # as RTA %s (%d)\n", - MapP->Name, p->RIOConnectTable[SubEnt].Name, - (int)MapP->SysPort); + if ((MapP->SysPort != NO_PORT) && (MapP->SysPort == p->RIOConnectTable[SubEnt].SysPort)) { + rio_dprintk(RIO_DEBUG_TABLE, "RTA %s:same TTY port # as RTA %s (%d)\n", MapP->Name, p->RIOConnectTable[SubEnt].Name, (int) MapP->SysPort); p->RIOError.Error = TTY_NUMBER_IN_USE; p->RIOError.Entry = Entry; p->RIOError.Other = SubEnt; return -ENXIO; } - rio_dprintk (RIO_DEBUG_TABLE, "RIONewTable: entering(9)\n"); - if (strcmp(MapP->Name, - p->RIOConnectTable[SubEnt].Name)==0 && !(MapP->Flags & RTA16_SECOND_SLOT)) { /* (9) */ - rio_dprintk (RIO_DEBUG_TABLE, "RTA name %s used twice\n", MapP->Name); + rio_dprintk(RIO_DEBUG_TABLE, "RIONewTable: entering(9)\n"); + if (strcmp(MapP->Name, p->RIOConnectTable[SubEnt].Name) == 0 && !(MapP->Flags & RTA16_SECOND_SLOT)) { /* (9) */ + rio_dprintk(RIO_DEBUG_TABLE, "RTA name %s used twice\n", MapP->Name); p->RIOError.Error = NAME_USED_TWICE; p->RIOError.Entry = Entry; p->RIOError.Other = SubEnt; @@ -287,19 +272,16 @@ struct rio_info * p; } } } - } - else { /* (6) */ - rio_dprintk (RIO_DEBUG_TABLE, "RIONewTable: entering(6)\n"); - if ( MapP->ID ) { - rio_dprintk (RIO_DEBUG_TABLE, "RIO:HOST %s has been allocated ID that isn't zero!\n", - MapP->Name); + } else { /* (6) */ + rio_dprintk(RIO_DEBUG_TABLE, "RIONewTable: entering(6)\n"); + if (MapP->ID) { + rio_dprintk(RIO_DEBUG_TABLE, "RIO:HOST %s has been allocated ID that isn't zero!\n", MapP->Name); p->RIOError.Error = HOST_ID_NOT_ZERO; p->RIOError.Entry = Entry; return -ENXIO; } - if ( MapP->SysPort != NO_PORT ) { - rio_dprintk (RIO_DEBUG_TABLE, "RIO: HOST %s has been allocated port numbers!\n", - MapP->Name); + if (MapP->SysPort != NO_PORT) { + rio_dprintk(RIO_DEBUG_TABLE, "RIO: HOST %s has been allocated port numbers!\n", MapP->Name); p->RIOError.Error = HOST_SYSPORT_BAD; p->RIOError.Entry = Entry; return -ENXIO; @@ -308,106 +290,101 @@ struct rio_info * p; } /* - ** wow! if we get here then it's a goody! - */ + ** wow! if we get here then it's a goody! + */ /* - ** Zero the (old) entries for each host... - */ - for ( Host=0; HostRIOHosts[Host].Mapping[Entry], - sizeof(struct Map)); + ** Zero the (old) entries for each host... + */ + for (Host = 0; Host < RIO_HOSTS; Host++) { + for (Entry = 0; Entry < MAX_RUP; Entry++) { + bzero((caddr_t) & p->RIOHosts[Host].Mapping[Entry], sizeof(struct Map)); } - bzero((caddr_t)&p->RIOHosts[Host].Name[0], - sizeof(p->RIOHosts[Host].Name) ); + bzero((caddr_t) & p->RIOHosts[Host].Name[0], sizeof(p->RIOHosts[Host].Name)); } /* - ** Copy in the new table entries - */ - for ( Entry=0; Entry< TOTAL_MAP_ENTRIES; Entry++ ) { - rio_dprintk (RIO_DEBUG_TABLE, "RIONewTable: Copy table for Host entry %d\n", Entry); + ** Copy in the new table entries + */ + for (Entry = 0; Entry < TOTAL_MAP_ENTRIES; Entry++) { + rio_dprintk(RIO_DEBUG_TABLE, "RIONewTable: Copy table for Host entry %d\n", Entry); MapP = &p->RIOConnectTable[Entry]; /* - ** Now, if it is an empty slot ignore it! - */ - if ( MapP->HostUniqueNum==0 ) + ** Now, if it is an empty slot ignore it! + */ + if (MapP->HostUniqueNum == 0) continue; /* - ** we saved the host number earlier, so grab it back - */ + ** we saved the host number earlier, so grab it back + */ HostP = &p->RIOHosts[MapP->Topology[0].Unit]; /* - ** If it is a host, then we only need to fill in the name field. - */ - if ( MapP->ID==0 ) { - rio_dprintk (RIO_DEBUG_TABLE, "Host entry found. Name %s\n", MapP->Name); - bcopy(MapP->Name,HostP->Name,MAX_NAME_LEN); + ** If it is a host, then we only need to fill in the name field. + */ + if (MapP->ID == 0) { + rio_dprintk(RIO_DEBUG_TABLE, "Host entry found. Name %s\n", MapP->Name); + bcopy(MapP->Name, HostP->Name, MAX_NAME_LEN); continue; } /* - ** Its an RTA entry, so fill in the host mapping entries for it - ** and the port mapping entries. Notice that entry zero is for - ** ID one. - */ - HostMapP = &HostP->Mapping[MapP->ID-1]; + ** Its an RTA entry, so fill in the host mapping entries for it + ** and the port mapping entries. Notice that entry zero is for + ** ID one. + */ + HostMapP = &HostP->Mapping[MapP->ID - 1]; if (MapP->Flags & SLOT_IN_USE) { - rio_dprintk (RIO_DEBUG_TABLE, "Rta entry found. Name %s\n", MapP->Name); + rio_dprintk(RIO_DEBUG_TABLE, "Rta entry found. Name %s\n", MapP->Name); /* - ** structure assign, then sort out the bits we shouldn't have done - */ + ** structure assign, then sort out the bits we shouldn't have done + */ *HostMapP = *MapP; HostMapP->Flags = SLOT_IN_USE; if (MapP->Flags & RTA16_SECOND_SLOT) HostMapP->Flags |= RTA16_SECOND_SLOT; - RIOReMapPorts(p, HostP, HostMapP ); - } - else { - rio_dprintk (RIO_DEBUG_TABLE, "TENTATIVE Rta entry found. Name %s\n", MapP->Name); + RIOReMapPorts(p, HostP, HostMapP); + } else { + rio_dprintk(RIO_DEBUG_TABLE, "TENTATIVE Rta entry found. Name %s\n", MapP->Name); } } - for ( Entry=0; Entry< TOTAL_MAP_ENTRIES; Entry++ ) { + for (Entry = 0; Entry < TOTAL_MAP_ENTRIES; Entry++) { p->RIOSavedTable[Entry] = p->RIOConnectTable[Entry]; } - for ( Host=0; HostRIONumHosts; Host++ ) { - for ( SubEnt=0; SubEntRIONumHosts; Host++) { + for (SubEnt = 0; SubEnt < LINKS_PER_UNIT; SubEnt++) { p->RIOHosts[Host].Topology[SubEnt].Unit = ROUTE_DISCONNECT; p->RIOHosts[Host].Topology[SubEnt].Link = NO_LINK; } - for ( Entry=0; EntryRIOHosts[Host].Mapping[Entry].Topology[SubEnt].Unit = - ROUTE_DISCONNECT; - p->RIOHosts[Host].Mapping[Entry].Topology[SubEnt].Link = - NO_LINK; + for (Entry = 0; Entry < MAX_RUP; Entry++) { + for (SubEnt = 0; SubEnt < LINKS_PER_UNIT; SubEnt++) { + p->RIOHosts[Host].Mapping[Entry].Topology[SubEnt].Unit = ROUTE_DISCONNECT; + p->RIOHosts[Host].Mapping[Entry].Topology[SubEnt].Link = NO_LINK; } } - if ( !p->RIOHosts[Host].Name[0] ) { - bcopy("HOST 1",p->RIOHosts[Host].Name,7); + if (!p->RIOHosts[Host].Name[0]) { + bcopy("HOST 1", p->RIOHosts[Host].Name, 7); p->RIOHosts[Host].Name[5] += Host; } /* - ** Check that default name assigned is unique. - */ + ** Check that default name assigned is unique. + */ Host1 = Host; NameIsUnique = 0; while (!NameIsUnique) { NameIsUnique = 1; - for ( Host2=0; Host2RIONumHosts; Host2++ ) { + for (Host2 = 0; Host2 < p->RIONumHosts; Host2++) { if (Host2 == Host) continue; if (strcmp(p->RIOHosts[Host].Name, p->RIOHosts[Host2].Name) - == 0) { + == 0) { NameIsUnique = 0; Host1++; if (Host1 >= p->RIONumHosts) @@ -417,15 +394,14 @@ struct rio_info * p; } } /* - ** Rename host if name already used. - */ - if (Host1 != Host) - { - rio_dprintk (RIO_DEBUG_TABLE, "Default name %s already used\n", p->RIOHosts[Host].Name); - bcopy("HOST 1",p->RIOHosts[Host].Name,7); + ** Rename host if name already used. + */ + if (Host1 != Host) { + rio_dprintk(RIO_DEBUG_TABLE, "Default name %s already used\n", p->RIOHosts[Host].Name); + bcopy("HOST 1", p->RIOHosts[Host].Name, 7); p->RIOHosts[Host].Name[5] += Host1; } - rio_dprintk (RIO_DEBUG_TABLE, "Assigning default name %s\n", p->RIOHosts[Host].Name); + rio_dprintk(RIO_DEBUG_TABLE, "Assigning default name %s\n", p->RIOHosts[Host].Name); } return 0; } @@ -434,9 +410,8 @@ struct rio_info * p; ** User process needs the config table - build it from first ** principles. */ -int -RIOApel(p) -struct rio_info * p; +int RIOApel(p) +struct rio_info *p; { int Host; int link; @@ -446,35 +421,34 @@ struct rio_info * p; struct Host *HostP; long oldspl; - disable(oldspl); /* strange but true! */ - - rio_dprintk (RIO_DEBUG_TABLE, "Generating a table to return to config.rio\n"); + disable(oldspl); /* strange but true! */ + + rio_dprintk(RIO_DEBUG_TABLE, "Generating a table to return to config.rio\n"); - bzero((caddr_t)&p->RIOConnectTable[0], - sizeof(struct Map) * TOTAL_MAP_ENTRIES ); + bzero((caddr_t) & p->RIOConnectTable[0], sizeof(struct Map) * TOTAL_MAP_ENTRIES); - for ( Host=0; HostRIOHosts[Host]; MapP = &p->RIOConnectTable[Next++]; MapP->HostUniqueNum = HostP->UniqueNum; - if ( (HostP->Flags & RUN_STATE) != RC_RUNNING ) + if ((HostP->Flags & RUN_STATE) != RC_RUNNING) continue; MapP->RtaUniqueNum = 0; MapP->ID = 0; MapP->Flags = SLOT_IN_USE; MapP->SysPort = NO_PORT; - for ( link=0; linkTopology[link] = HostP->Topology[link]; - bcopy(HostP->Name,MapP->Name,MAX_NAME_LEN); - for ( Rup=0; RupMapping[Rup].Flags & (SLOT_IN_USE|SLOT_TENTATIVE) ) { + bcopy(HostP->Name, MapP->Name, MAX_NAME_LEN); + for (Rup = 0; Rup < MAX_RUP; Rup++) { + if (HostP->Mapping[Rup].Flags & (SLOT_IN_USE | SLOT_TENTATIVE)) { p->RIOConnectTable[Next] = HostP->Mapping[Rup]; - if ( HostP->Mapping[Rup].Flags & SLOT_IN_USE) + if (HostP->Mapping[Rup].Flags & SLOT_IN_USE) p->RIOConnectTable[Next].Flags |= SLOT_IN_USE; - if ( HostP->Mapping[Rup].Flags & SLOT_TENTATIVE) + if (HostP->Mapping[Rup].Flags & SLOT_TENTATIVE) p->RIOConnectTable[Next].Flags |= SLOT_TENTATIVE; - if ( HostP->Mapping[Rup].Flags & RTA16_SECOND_SLOT ) + if (HostP->Mapping[Rup].Flags & RTA16_SECOND_SLOT) p->RIOConnectTable[Next].Flags |= RTA16_SECOND_SLOT; Next++; } @@ -489,8 +463,7 @@ struct rio_info * p; ** if the entry is suitably inactive, then we can gob on it and remove ** it from the table. */ -int -RIODeleteRta(p, MapP) +int RIODeleteRta(p, MapP) struct rio_info *p; struct Map *MapP; { @@ -502,110 +475,98 @@ struct Map *MapP; int work_done = 0; unsigned long lock_flags, sem_flags; - rio_dprintk (RIO_DEBUG_TABLE, "Delete entry on host %x, rta %x\n", - MapP->HostUniqueNum, MapP->RtaUniqueNum); + rio_dprintk(RIO_DEBUG_TABLE, "Delete entry on host %x, rta %x\n", MapP->HostUniqueNum, MapP->RtaUniqueNum); - for ( host=0; host < p->RIONumHosts; host++ ) { + for (host = 0; host < p->RIONumHosts; host++) { HostP = &p->RIOHosts[host]; - rio_spin_lock_irqsave( &HostP->HostLock, lock_flags ); + rio_spin_lock_irqsave(&HostP->HostLock, lock_flags); - if ( (HostP->Flags & RUN_STATE) != RC_RUNNING ) { + if ((HostP->Flags & RUN_STATE) != RC_RUNNING) { rio_spin_unlock_irqrestore(&HostP->HostLock, lock_flags); continue; } - for ( entry=0; entryRtaUniqueNum == HostP->Mapping[entry].RtaUniqueNum ) { + for (entry = 0; entry < MAX_RUP; entry++) { + if (MapP->RtaUniqueNum == HostP->Mapping[entry].RtaUniqueNum) { HostMapP = &HostP->Mapping[entry]; - rio_dprintk (RIO_DEBUG_TABLE, "Found entry offset %d on host %s\n", - entry, HostP->Name); + rio_dprintk(RIO_DEBUG_TABLE, "Found entry offset %d on host %s\n", entry, HostP->Name); /* - ** Check all four links of the unit are disconnected - */ - for ( link=0; link< LINKS_PER_UNIT; link++ ) { - if ( HostMapP->Topology[link].Unit != ROUTE_DISCONNECT ) { - rio_dprintk (RIO_DEBUG_TABLE, "Entry is in use and cannot be deleted!\n"); + ** Check all four links of the unit are disconnected + */ + for (link = 0; link < LINKS_PER_UNIT; link++) { + if (HostMapP->Topology[link].Unit != ROUTE_DISCONNECT) { + rio_dprintk(RIO_DEBUG_TABLE, "Entry is in use and cannot be deleted!\n"); p->RIOError.Error = UNIT_IS_IN_USE; - rio_spin_unlock_irqrestore( &HostP->HostLock, lock_flags); + rio_spin_unlock_irqrestore(&HostP->HostLock, lock_flags); return -EBUSY; } } /* - ** Slot has been allocated, BUT not booted/routed/ - ** connected/selected or anything else-ed - */ + ** Slot has been allocated, BUT not booted/routed/ + ** connected/selected or anything else-ed + */ SysPort = HostMapP->SysPort; - if ( SysPort != NO_PORT ) { - for (port=SysPort; port < SysPort+PORTS_PER_RTA; port++) { + if (SysPort != NO_PORT) { + for (port = SysPort; port < SysPort + PORTS_PER_RTA; port++) { PortP = p->RIOPortp[port]; - rio_dprintk (RIO_DEBUG_TABLE, "Unmap port\n"); + rio_dprintk(RIO_DEBUG_TABLE, "Unmap port\n"); - rio_spin_lock_irqsave( &PortP->portSem, sem_flags ); + rio_spin_lock_irqsave(&PortP->portSem, sem_flags); PortP->Mapped = 0; - if ( PortP->State & (RIO_MOPEN|RIO_LOPEN) ) { + if (PortP->State & (RIO_MOPEN | RIO_LOPEN)) { - rio_dprintk (RIO_DEBUG_TABLE, "Gob on port\n"); + rio_dprintk(RIO_DEBUG_TABLE, "Gob on port\n"); PortP->TxBufferIn = PortP->TxBufferOut = 0; /* What should I do - wakeup( &PortP->TxBufferIn ); - wakeup( &PortP->TxBufferOut); - */ + wakeup( &PortP->TxBufferIn ); + wakeup( &PortP->TxBufferOut); + */ PortP->InUse = NOT_INUSE; /* What should I do - wakeup( &PortP->InUse ); - signal(PortP->TtyP->t_pgrp,SIGKILL); - ttyflush(PortP->TtyP,(FREAD|FWRITE)); - */ + wakeup( &PortP->InUse ); + signal(PortP->TtyP->t_pgrp,SIGKILL); + ttyflush(PortP->TtyP,(FREAD|FWRITE)); + */ PortP->State |= RIO_CLOSING | RIO_DELETED; } /* - ** For the second slot of a 16 port RTA, the - ** driver needs to reset the changes made to - ** the phb to port mappings in RIORouteRup. - */ + ** For the second slot of a 16 port RTA, the + ** driver needs to reset the changes made to + ** the phb to port mappings in RIORouteRup. + */ if (PortP->SecondBlock) { ushort dest_unit = HostMapP->ID; ushort dest_port = port - SysPort; - WORD *TxPktP; - PKT *Pkt; + WORD *TxPktP; + PKT *Pkt; - for (TxPktP = PortP->TxStart; - TxPktP <= PortP->TxEnd; TxPktP++) { + for (TxPktP = PortP->TxStart; TxPktP <= PortP->TxEnd; TxPktP++) { /* - ** *TxPktP is the pointer to the - ** transmit packet on the host card. - ** This needs to be translated into - ** a 32 bit pointer so it can be - ** accessed from the driver. - */ - Pkt = (PKT *) RIO_PTR(HostP->Caddr, - RWORD(*TxPktP)); - rio_dprintk (RIO_DEBUG_TABLE, - "Tx packet (%x) destination: Old %x:%x New %x:%x\n", - *TxPktP, Pkt->dest_unit, - Pkt->dest_port, dest_unit, dest_port); + ** *TxPktP is the pointer to the + ** transmit packet on the host card. + ** This needs to be translated into + ** a 32 bit pointer so it can be + ** accessed from the driver. + */ + Pkt = (PKT *) RIO_PTR(HostP->Caddr, RWORD(*TxPktP)); + rio_dprintk(RIO_DEBUG_TABLE, "Tx packet (%x) destination: Old %x:%x New %x:%x\n", *TxPktP, Pkt->dest_unit, Pkt->dest_port, dest_unit, dest_port); WWORD(Pkt->dest_unit, dest_unit); WWORD(Pkt->dest_port, dest_port); } - rio_dprintk (RIO_DEBUG_TABLE, - "Port %d phb destination: Old %x:%x New %x:%x\n", - port, PortP->PhbP->destination & 0xff, - (PortP->PhbP->destination >> 8) & 0xff, - dest_unit, dest_port); - WWORD(PortP->PhbP->destination, - dest_unit + (dest_port << 8)); + rio_dprintk(RIO_DEBUG_TABLE, "Port %d phb destination: Old %x:%x New %x:%x\n", port, PortP->PhbP->destination & 0xff, (PortP->PhbP->destination >> 8) & 0xff, dest_unit, dest_port); + WWORD(PortP->PhbP->destination, dest_unit + (dest_port << 8)); } rio_spin_unlock_irqrestore(&PortP->portSem, sem_flags); } } - rio_dprintk (RIO_DEBUG_TABLE, "Entry nulled.\n"); - bzero((char *)HostMapP,sizeof(struct Map)); + rio_dprintk(RIO_DEBUG_TABLE, "Entry nulled.\n"); + bzero((char *) HostMapP, sizeof(struct Map)); work_done++; } } @@ -613,203 +574,178 @@ struct Map *MapP; } /* XXXXX lock me up */ - for ( entry=0; entry< TOTAL_MAP_ENTRIES; entry++ ) { - if ( p->RIOSavedTable[entry].RtaUniqueNum == MapP->RtaUniqueNum ) { - bzero((char *)&p->RIOSavedTable[entry],sizeof(struct Map)); + for (entry = 0; entry < TOTAL_MAP_ENTRIES; entry++) { + if (p->RIOSavedTable[entry].RtaUniqueNum == MapP->RtaUniqueNum) { + bzero((char *) &p->RIOSavedTable[entry], sizeof(struct Map)); work_done++; } - if ( p->RIOConnectTable[entry].RtaUniqueNum == MapP->RtaUniqueNum ) { - bzero((char *)&p->RIOConnectTable[entry],sizeof(struct Map)); + if (p->RIOConnectTable[entry].RtaUniqueNum == MapP->RtaUniqueNum) { + bzero((char *) &p->RIOConnectTable[entry], sizeof(struct Map)); work_done++; } } - if ( work_done ) + if (work_done) return 0; - rio_dprintk (RIO_DEBUG_TABLE, "Couldn't find entry to be deleted\n"); + rio_dprintk(RIO_DEBUG_TABLE, "Couldn't find entry to be deleted\n"); p->RIOError.Error = COULDNT_FIND_ENTRY; return -ENXIO; } -int RIOAssignRta( struct rio_info *p, struct Map *MapP ) +int RIOAssignRta(struct rio_info *p, struct Map *MapP) { - int host; - struct Map *HostMapP; - char *sptr; - int link; - - - rio_dprintk (RIO_DEBUG_TABLE, "Assign entry on host %x, rta %x, ID %d, Sysport %d\n", - MapP->HostUniqueNum,MapP->RtaUniqueNum, - MapP->ID, (int)MapP->SysPort); - - if ((MapP->ID != (ushort)-1) && - ((int)MapP->ID < (int)1 || (int)MapP->ID > MAX_RUP )) - { - rio_dprintk (RIO_DEBUG_TABLE, "Bad ID in map entry!\n"); - p->RIOError.Error = ID_NUMBER_OUT_OF_RANGE; - return -EINVAL; - } - if (MapP->RtaUniqueNum == 0) - { - rio_dprintk (RIO_DEBUG_TABLE, "Rta Unique number zero!\n"); - p->RIOError.Error = RTA_UNIQUE_NUMBER_ZERO; - return -EINVAL; - } - if ( (MapP->SysPort != NO_PORT) && (MapP->SysPort % PORTS_PER_RTA) ) - { - rio_dprintk (RIO_DEBUG_TABLE, "Port %d not multiple of %d!\n",(int)MapP->SysPort,PORTS_PER_RTA); - p->RIOError.Error = TTY_NUMBER_OUT_OF_RANGE; - return -EINVAL; - } - if ( (MapP->SysPort != NO_PORT) && (MapP->SysPort >= RIO_PORTS) ) - { - rio_dprintk (RIO_DEBUG_TABLE, "Port %d not valid!\n",(int)MapP->SysPort); - p->RIOError.Error = TTY_NUMBER_OUT_OF_RANGE; - return -EINVAL; - } - - /* - ** Copy the name across to the map entry. - */ - MapP->Name[MAX_NAME_LEN-1] = '\0'; - sptr = MapP->Name; - while ( *sptr ) - { - if ( *sptr<' ' || *sptr>'~' ) - { - rio_dprintk (RIO_DEBUG_TABLE, "Name entry contains non-printing characters!\n"); - p->RIOError.Error = BAD_CHARACTER_IN_NAME; - return -EINVAL; - } - sptr++; - } - - for ( host=0; host < p->RIONumHosts; host++ ) - { - if ( MapP->HostUniqueNum == p->RIOHosts[host].UniqueNum ) - { - if ( (p->RIOHosts[host].Flags & RUN_STATE) != RC_RUNNING ) - { - p->RIOError.Error = HOST_NOT_RUNNING; - return -ENXIO; - } - - /* - ** Now we have a host we need to allocate an ID - ** if the entry does not already have one. - */ - if (MapP->ID == (ushort)-1) - { - int nNewID; - - rio_dprintk (RIO_DEBUG_TABLE, "Attempting to get a new ID for rta \"%s\"\n", - MapP->Name); - /* - ** The idea here is to allow RTA's to be assigned - ** before they actually appear on the network. - ** This allows the addition of RTA's without having - ** to plug them in. - ** What we do is: - ** - Find a free ID and allocate it to the RTA. - ** - If this map entry is the second half of a - ** 16 port entry then find the other half and - ** make sure the 2 cross reference each other. - */ - if (RIOFindFreeID(p, &p->RIOHosts[host], &nNewID, NULL) != 0) - { - p->RIOError.Error = COULDNT_FIND_ENTRY; - return -EBUSY; - } - MapP->ID = (ushort)nNewID + 1; - rio_dprintk (RIO_DEBUG_TABLE, "Allocated ID %d for this new RTA.\n", MapP->ID); - HostMapP = &p->RIOHosts[host].Mapping[nNewID]; - HostMapP->RtaUniqueNum = MapP->RtaUniqueNum; - HostMapP->HostUniqueNum = MapP->HostUniqueNum; - HostMapP->ID = MapP->ID; - for (link = 0; link < LINKS_PER_UNIT; link++) - { - HostMapP->Topology[link].Unit = ROUTE_DISCONNECT; - HostMapP->Topology[link].Link = NO_LINK; - } - if (MapP->Flags & RTA16_SECOND_SLOT) - { - int unit; - - for (unit = 0; unit < MAX_RUP; unit++) - if (p->RIOHosts[host].Mapping[unit].RtaUniqueNum == - MapP->RtaUniqueNum) - break; - if (unit == MAX_RUP) - { - p->RIOError.Error = COULDNT_FIND_ENTRY; - return -EBUSY; - } - HostMapP->Flags |= RTA16_SECOND_SLOT; - HostMapP->ID2 = MapP->ID2 = p->RIOHosts[host].Mapping[unit].ID; - p->RIOHosts[host].Mapping[unit].ID2 = MapP->ID; - rio_dprintk (RIO_DEBUG_TABLE, "Cross referenced id %d to ID %d.\n", - MapP->ID, - p->RIOHosts[host].Mapping[unit].ID); + int host; + struct Map *HostMapP; + char *sptr; + int link; + + + rio_dprintk(RIO_DEBUG_TABLE, "Assign entry on host %x, rta %x, ID %d, Sysport %d\n", MapP->HostUniqueNum, MapP->RtaUniqueNum, MapP->ID, (int) MapP->SysPort); + + if ((MapP->ID != (ushort) - 1) && ((int) MapP->ID < (int) 1 || (int) MapP->ID > MAX_RUP)) { + rio_dprintk(RIO_DEBUG_TABLE, "Bad ID in map entry!\n"); + p->RIOError.Error = ID_NUMBER_OUT_OF_RANGE; + return -EINVAL; + } + if (MapP->RtaUniqueNum == 0) { + rio_dprintk(RIO_DEBUG_TABLE, "Rta Unique number zero!\n"); + p->RIOError.Error = RTA_UNIQUE_NUMBER_ZERO; + return -EINVAL; + } + if ((MapP->SysPort != NO_PORT) && (MapP->SysPort % PORTS_PER_RTA)) { + rio_dprintk(RIO_DEBUG_TABLE, "Port %d not multiple of %d!\n", (int) MapP->SysPort, PORTS_PER_RTA); + p->RIOError.Error = TTY_NUMBER_OUT_OF_RANGE; + return -EINVAL; + } + if ((MapP->SysPort != NO_PORT) && (MapP->SysPort >= RIO_PORTS)) { + rio_dprintk(RIO_DEBUG_TABLE, "Port %d not valid!\n", (int) MapP->SysPort); + p->RIOError.Error = TTY_NUMBER_OUT_OF_RANGE; + return -EINVAL; + } + + /* + ** Copy the name across to the map entry. + */ + MapP->Name[MAX_NAME_LEN - 1] = '\0'; + sptr = MapP->Name; + while (*sptr) { + if (*sptr < ' ' || *sptr > '~') { + rio_dprintk(RIO_DEBUG_TABLE, "Name entry contains non-printing characters!\n"); + p->RIOError.Error = BAD_CHARACTER_IN_NAME; + return -EINVAL; } - } + sptr++; + } + + for (host = 0; host < p->RIONumHosts; host++) { + if (MapP->HostUniqueNum == p->RIOHosts[host].UniqueNum) { + if ((p->RIOHosts[host].Flags & RUN_STATE) != RC_RUNNING) { + p->RIOError.Error = HOST_NOT_RUNNING; + return -ENXIO; + } - HostMapP = &p->RIOHosts[host].Mapping[MapP->ID-1]; + /* + ** Now we have a host we need to allocate an ID + ** if the entry does not already have one. + */ + if (MapP->ID == (ushort) - 1) { + int nNewID; - if ( HostMapP->Flags & SLOT_IN_USE ) - { - rio_dprintk (RIO_DEBUG_TABLE, "Map table slot for ID %d is already in use.\n", MapP->ID); - p->RIOError.Error = ID_ALREADY_IN_USE; - return -EBUSY; - } - - /* - ** Assign the sys ports and the name, and mark the slot as - ** being in use. - */ - HostMapP->SysPort = MapP->SysPort; - if ((MapP->Flags & RTA16_SECOND_SLOT) == 0) - CCOPY( MapP->Name, HostMapP->Name, MAX_NAME_LEN ); - HostMapP->Flags = SLOT_IN_USE | RTA_BOOTED; + rio_dprintk(RIO_DEBUG_TABLE, "Attempting to get a new ID for rta \"%s\"\n", MapP->Name); + /* + ** The idea here is to allow RTA's to be assigned + ** before they actually appear on the network. + ** This allows the addition of RTA's without having + ** to plug them in. + ** What we do is: + ** - Find a free ID and allocate it to the RTA. + ** - If this map entry is the second half of a + ** 16 port entry then find the other half and + ** make sure the 2 cross reference each other. + */ + if (RIOFindFreeID(p, &p->RIOHosts[host], &nNewID, NULL) != 0) { + p->RIOError.Error = COULDNT_FIND_ENTRY; + return -EBUSY; + } + MapP->ID = (ushort) nNewID + 1; + rio_dprintk(RIO_DEBUG_TABLE, "Allocated ID %d for this new RTA.\n", MapP->ID); + HostMapP = &p->RIOHosts[host].Mapping[nNewID]; + HostMapP->RtaUniqueNum = MapP->RtaUniqueNum; + HostMapP->HostUniqueNum = MapP->HostUniqueNum; + HostMapP->ID = MapP->ID; + for (link = 0; link < LINKS_PER_UNIT; link++) { + HostMapP->Topology[link].Unit = ROUTE_DISCONNECT; + HostMapP->Topology[link].Link = NO_LINK; + } + if (MapP->Flags & RTA16_SECOND_SLOT) { + int unit; + + for (unit = 0; unit < MAX_RUP; unit++) + if (p->RIOHosts[host].Mapping[unit].RtaUniqueNum == MapP->RtaUniqueNum) + break; + if (unit == MAX_RUP) { + p->RIOError.Error = COULDNT_FIND_ENTRY; + return -EBUSY; + } + HostMapP->Flags |= RTA16_SECOND_SLOT; + HostMapP->ID2 = MapP->ID2 = p->RIOHosts[host].Mapping[unit].ID; + p->RIOHosts[host].Mapping[unit].ID2 = MapP->ID; + rio_dprintk(RIO_DEBUG_TABLE, "Cross referenced id %d to ID %d.\n", MapP->ID, p->RIOHosts[host].Mapping[unit].ID); + } + } + + HostMapP = &p->RIOHosts[host].Mapping[MapP->ID - 1]; + + if (HostMapP->Flags & SLOT_IN_USE) { + rio_dprintk(RIO_DEBUG_TABLE, "Map table slot for ID %d is already in use.\n", MapP->ID); + p->RIOError.Error = ID_ALREADY_IN_USE; + return -EBUSY; + } + + /* + ** Assign the sys ports and the name, and mark the slot as + ** being in use. + */ + HostMapP->SysPort = MapP->SysPort; + if ((MapP->Flags & RTA16_SECOND_SLOT) == 0) + CCOPY(MapP->Name, HostMapP->Name, MAX_NAME_LEN); + HostMapP->Flags = SLOT_IN_USE | RTA_BOOTED; #ifdef NEED_TO_FIX - RIO_SV_BROADCAST(p->RIOHosts[host].svFlags[MapP->ID-1]); + RIO_SV_BROADCAST(p->RIOHosts[host].svFlags[MapP->ID - 1]); #endif - if (MapP->Flags & RTA16_SECOND_SLOT) - HostMapP->Flags |= RTA16_SECOND_SLOT; - - RIOReMapPorts( p, &p->RIOHosts[host], HostMapP ); - /* - ** Adjust 2nd block of 8 phbs - */ - if (MapP->Flags & RTA16_SECOND_SLOT) - RIOFixPhbs(p, &p->RIOHosts[host], HostMapP->ID - 1); - - if ( HostMapP->SysPort != NO_PORT ) - { - if ( HostMapP->SysPort < p->RIOFirstPortsBooted ) - p->RIOFirstPortsBooted = HostMapP->SysPort; - if ( HostMapP->SysPort > p->RIOLastPortsBooted ) - p->RIOLastPortsBooted = HostMapP->SysPort; - } - if (MapP->Flags & RTA16_SECOND_SLOT) - rio_dprintk (RIO_DEBUG_TABLE, "Second map of RTA %s added to configuration\n", - p->RIOHosts[host].Mapping[MapP->ID2 - 1].Name); - else - rio_dprintk (RIO_DEBUG_TABLE, "RTA %s added to configuration\n", MapP->Name); - return 0; + if (MapP->Flags & RTA16_SECOND_SLOT) + HostMapP->Flags |= RTA16_SECOND_SLOT; + + RIOReMapPorts(p, &p->RIOHosts[host], HostMapP); + /* + ** Adjust 2nd block of 8 phbs + */ + if (MapP->Flags & RTA16_SECOND_SLOT) + RIOFixPhbs(p, &p->RIOHosts[host], HostMapP->ID - 1); + + if (HostMapP->SysPort != NO_PORT) { + if (HostMapP->SysPort < p->RIOFirstPortsBooted) + p->RIOFirstPortsBooted = HostMapP->SysPort; + if (HostMapP->SysPort > p->RIOLastPortsBooted) + p->RIOLastPortsBooted = HostMapP->SysPort; + } + if (MapP->Flags & RTA16_SECOND_SLOT) + rio_dprintk(RIO_DEBUG_TABLE, "Second map of RTA %s added to configuration\n", p->RIOHosts[host].Mapping[MapP->ID2 - 1].Name); + else + rio_dprintk(RIO_DEBUG_TABLE, "RTA %s added to configuration\n", MapP->Name); + return 0; + } } - } - p->RIOError.Error = UNKNOWN_HOST_NUMBER; - rio_dprintk (RIO_DEBUG_TABLE, "Unknown host %x\n", MapP->HostUniqueNum); - return -ENXIO; + p->RIOError.Error = UNKNOWN_HOST_NUMBER; + rio_dprintk(RIO_DEBUG_TABLE, "Unknown host %x\n", MapP->HostUniqueNum); + return -ENXIO; } -int -RIOReMapPorts(p, HostP, HostMapP) -struct rio_info * p; +int RIOReMapPorts(p, HostP, HostMapP) +struct rio_info *p; struct Host *HostP; -struct Map *HostMapP; +struct Map *HostMapP; { register struct Port *PortP; uint SubEnt; @@ -819,135 +755,127 @@ struct Map *HostMapP; unsigned long flags; #ifdef CHECK - CheckHostP( HostP ); - CheckHostMapP( HostMapP ); + CheckHostP(HostP); + CheckHostMapP(HostMapP); #endif - rio_dprintk (RIO_DEBUG_TABLE, "Mapping sysport %d to id %d\n", (int)HostMapP->SysPort, HostMapP->ID); + rio_dprintk(RIO_DEBUG_TABLE, "Mapping sysport %d to id %d\n", (int) HostMapP->SysPort, HostMapP->ID); /* - ** We need to tell the UnixRups which sysport the rup corresponds to - */ - HostP->UnixRups[HostMapP->ID-1].BaseSysPort = HostMapP->SysPort; + ** We need to tell the UnixRups which sysport the rup corresponds to + */ + HostP->UnixRups[HostMapP->ID - 1].BaseSysPort = HostMapP->SysPort; - if ( HostMapP->SysPort == NO_PORT ) - return(0); + if (HostMapP->SysPort == NO_PORT) + return (0); RtaType = GetUnitType(HostMapP->RtaUniqueNum); - rio_dprintk (RIO_DEBUG_TABLE, "Mapping sysport %d-%d\n", - (int)HostMapP->SysPort, (int)HostMapP->SysPort+PORTS_PER_RTA-1); + rio_dprintk(RIO_DEBUG_TABLE, "Mapping sysport %d-%d\n", (int) HostMapP->SysPort, (int) HostMapP->SysPort + PORTS_PER_RTA - 1); /* - ** now map each of its eight ports - */ - for ( SubEnt=0; SubEntSysPort = %d\n", - SubEnt, (int)HostMapP->SysPort); - SysPort = HostMapP->SysPort+SubEnt; /* portnumber within system */ - /* portnumber on host */ - - HostPort = (HostMapP->ID-1)*PORTS_PER_RTA+SubEnt; - - rio_dprintk (RIO_DEBUG_TABLE, "c1 p = %p, p->rioPortp = %p\n", p, p->RIOPortp); + ** now map each of its eight ports + */ + for (SubEnt = 0; SubEnt < PORTS_PER_RTA; SubEnt++) { + rio_dprintk(RIO_DEBUG_TABLE, "subent = %d, HostMapP->SysPort = %d\n", SubEnt, (int) HostMapP->SysPort); + SysPort = HostMapP->SysPort + SubEnt; /* portnumber within system */ + /* portnumber on host */ + + HostPort = (HostMapP->ID - 1) * PORTS_PER_RTA + SubEnt; + + rio_dprintk(RIO_DEBUG_TABLE, "c1 p = %p, p->rioPortp = %p\n", p, p->RIOPortp); PortP = p->RIOPortp[SysPort]; #if 0 - PortP->TtyP = &p->channel[SysPort]; + PortP->TtyP = &p->channel[SysPort]; #endif - rio_dprintk (RIO_DEBUG_TABLE, "Map port\n"); + rio_dprintk(RIO_DEBUG_TABLE, "Map port\n"); /* - ** Point at all the real neat data structures - */ + ** Point at all the real neat data structures + */ rio_spin_lock_irqsave(&PortP->portSem, flags); PortP->HostP = HostP; PortP->Caddr = HostP->Caddr; /* - ** The PhbP cannot be filled in yet - ** unless the host has been booted - */ + ** The PhbP cannot be filled in yet + ** unless the host has been booted + */ if ((HostP->Flags & RUN_STATE) == RC_RUNNING) { struct PHB *PhbP = PortP->PhbP = &HostP->PhbP[HostPort]; - PortP->TxAdd =(WORD *)RIO_PTR(HostP->Caddr,RWORD(PhbP->tx_add)); - PortP->TxStart =(WORD *)RIO_PTR(HostP->Caddr,RWORD(PhbP->tx_start)); - PortP->TxEnd =(WORD *)RIO_PTR(HostP->Caddr,RWORD(PhbP->tx_end)); - PortP->RxRemove=(WORD *)RIO_PTR(HostP->Caddr, - RWORD(PhbP->rx_remove)); - PortP->RxStart =(WORD *)RIO_PTR(HostP->Caddr,RWORD(PhbP->rx_start)); - PortP->RxEnd =(WORD *)RIO_PTR(HostP->Caddr,RWORD(PhbP->rx_end)); - } - else + PortP->TxAdd = (WORD *) RIO_PTR(HostP->Caddr, RWORD(PhbP->tx_add)); + PortP->TxStart = (WORD *) RIO_PTR(HostP->Caddr, RWORD(PhbP->tx_start)); + PortP->TxEnd = (WORD *) RIO_PTR(HostP->Caddr, RWORD(PhbP->tx_end)); + PortP->RxRemove = (WORD *) RIO_PTR(HostP->Caddr, RWORD(PhbP->rx_remove)); + PortP->RxStart = (WORD *) RIO_PTR(HostP->Caddr, RWORD(PhbP->rx_start)); + PortP->RxEnd = (WORD *) RIO_PTR(HostP->Caddr, RWORD(PhbP->rx_end)); + } else PortP->PhbP = NULL; /* - ** port related flags - */ - PortP->HostPort = HostPort; + ** port related flags + */ + PortP->HostPort = HostPort; /* - ** For each part of a 16 port RTA, RupNum is ID - 1. - */ + ** For each part of a 16 port RTA, RupNum is ID - 1. + */ PortP->RupNum = HostMapP->ID - 1; if (HostMapP->Flags & RTA16_SECOND_SLOT) { - PortP->ID2 = HostMapP->ID2 - 1; - PortP->SecondBlock = TRUE; - } - else { - PortP->ID2 = 0; - PortP->SecondBlock = FALSE; + PortP->ID2 = HostMapP->ID2 - 1; + PortP->SecondBlock = TRUE; + } else { + PortP->ID2 = 0; + PortP->SecondBlock = FALSE; } - PortP->RtaUniqueNum = HostMapP->RtaUniqueNum; + PortP->RtaUniqueNum = HostMapP->RtaUniqueNum; /* - ** If the port was already mapped then thats all we need to do. - */ + ** If the port was already mapped then thats all we need to do. + */ if (PortP->Mapped) { - rio_spin_unlock_irqrestore( &PortP->portSem, flags); + rio_spin_unlock_irqrestore(&PortP->portSem, flags); continue; - } - else HostMapP->Flags &= ~RTA_NEWBOOT; + } else + HostMapP->Flags &= ~RTA_NEWBOOT; - PortP->State = 0; - PortP->Config = 0; + PortP->State = 0; + PortP->Config = 0; /* - ** Check out the module type - if it is special (read only etc.) - ** then we need to set flags in the PortP->Config. - ** Note: For 16 port RTA, all ports are of the same type. - */ + ** Check out the module type - if it is special (read only etc.) + ** then we need to set flags in the PortP->Config. + ** Note: For 16 port RTA, all ports are of the same type. + */ if (RtaType == TYPE_RTA16) { - PortP->Config |= p->RIOModuleTypes[HostP->UnixRups - [HostMapP->ID-1].ModTypes].Flags[SubEnt % PORTS_PER_MODULE]; + PortP->Config |= p->RIOModuleTypes[HostP->UnixRups[HostMapP->ID - 1].ModTypes].Flags[SubEnt % PORTS_PER_MODULE]; } else { - if ( SubEnt < PORTS_PER_MODULE ) - PortP->Config |= p->RIOModuleTypes[LONYBLE(HostP->UnixRups - [HostMapP->ID-1].ModTypes)].Flags[SubEnt % PORTS_PER_MODULE]; + if (SubEnt < PORTS_PER_MODULE) + PortP->Config |= p->RIOModuleTypes[LONYBLE(HostP->UnixRups[HostMapP->ID - 1].ModTypes)].Flags[SubEnt % PORTS_PER_MODULE]; else - PortP->Config |= p->RIOModuleTypes[HINYBLE(HostP->UnixRups - [HostMapP->ID-1].ModTypes)].Flags[SubEnt % PORTS_PER_MODULE]; + PortP->Config |= p->RIOModuleTypes[HINYBLE(HostP->UnixRups[HostMapP->ID - 1].ModTypes)].Flags[SubEnt % PORTS_PER_MODULE]; } /* - ** more port related flags - */ - PortP->PortState = 0; - PortP->ModemLines = 0; - PortP->ModemState = 0; - PortP->CookMode = COOK_WELL; - PortP->ParamSem = 0; - PortP->FlushCmdBodge= 0; - PortP->WflushFlag = 0; - PortP->MagicFlags = 0; - PortP->Lock = 0; - PortP->Store = 0; - PortP->FirstOpen = 1; + ** more port related flags + */ + PortP->PortState = 0; + PortP->ModemLines = 0; + PortP->ModemState = 0; + PortP->CookMode = COOK_WELL; + PortP->ParamSem = 0; + PortP->FlushCmdBodge = 0; + PortP->WflushFlag = 0; + PortP->MagicFlags = 0; + PortP->Lock = 0; + PortP->Store = 0; + PortP->FirstOpen = 1; /* - ** Buffers 'n things - */ - PortP->RxDataStart = 0; - PortP->Cor2Copy = 0; - PortP->Name = &HostMapP->Name[0]; + ** Buffers 'n things + */ + PortP->RxDataStart = 0; + PortP->Cor2Copy = 0; + PortP->Name = &HostMapP->Name[0]; #ifdef STATS - bzero( (caddr_t)&PortP->Stat, sizeof(struct RIOStats) ); + bzero((caddr_t) & PortP->Stat, sizeof(struct RIOStats)); #endif PortP->statsGather = 0; PortP->txchars = 0; @@ -955,90 +883,87 @@ struct Map *HostMapP; PortP->opens = 0; PortP->closes = 0; PortP->ioctls = 0; - if ( PortP->TxRingBuffer ) - bzero( PortP->TxRingBuffer, p->RIOBufferSize ); - else if ( p->RIOBufferSize ) { + if (PortP->TxRingBuffer) + bzero(PortP->TxRingBuffer, p->RIOBufferSize); + else if (p->RIOBufferSize) { PortP->TxRingBuffer = sysbrk(p->RIOBufferSize); - bzero( PortP->TxRingBuffer, p->RIOBufferSize ); + bzero(PortP->TxRingBuffer, p->RIOBufferSize); } - PortP->TxBufferOut = 0; - PortP->TxBufferIn = 0; - PortP->Debug = 0; + PortP->TxBufferOut = 0; + PortP->TxBufferIn = 0; + PortP->Debug = 0; /* - ** LastRxTgl stores the state of the rx toggle bit for this - ** port, to be compared with the state of the next pkt received. - ** If the same, we have received the same rx pkt from the RTA - ** twice. Initialise to a value not equal to PHB_RX_TGL or 0. - */ - PortP->LastRxTgl = ~(uchar)PHB_RX_TGL; + ** LastRxTgl stores the state of the rx toggle bit for this + ** port, to be compared with the state of the next pkt received. + ** If the same, we have received the same rx pkt from the RTA + ** twice. Initialise to a value not equal to PHB_RX_TGL or 0. + */ + PortP->LastRxTgl = ~(uchar) PHB_RX_TGL; /* - ** and mark the port as usable - */ + ** and mark the port as usable + */ PortP->Mapped = 1; rio_spin_unlock_irqrestore(&PortP->portSem, flags); } - if ( HostMapP->SysPort < p->RIOFirstPortsMapped ) + if (HostMapP->SysPort < p->RIOFirstPortsMapped) p->RIOFirstPortsMapped = HostMapP->SysPort; - if ( HostMapP->SysPort > p->RIOLastPortsMapped ) + if (HostMapP->SysPort > p->RIOLastPortsMapped) p->RIOLastPortsMapped = HostMapP->SysPort; return 0; } -int -RIOChangeName(p, MapP) +int RIOChangeName(p, MapP) struct rio_info *p; -struct Map* MapP; +struct Map *MapP; { int host; struct Map *HostMapP; char *sptr; - rio_dprintk (RIO_DEBUG_TABLE, "Change name entry on host %x, rta %x, ID %d, Sysport %d\n", - MapP->HostUniqueNum,MapP->RtaUniqueNum, - MapP->ID, (int)MapP->SysPort); + rio_dprintk(RIO_DEBUG_TABLE, "Change name entry on host %x, rta %x, ID %d, Sysport %d\n", MapP->HostUniqueNum, MapP->RtaUniqueNum, MapP->ID, (int) MapP->SysPort); - if ( MapP->ID > MAX_RUP ) { - rio_dprintk (RIO_DEBUG_TABLE, "Bad ID in map entry!\n"); + if (MapP->ID > MAX_RUP) { + rio_dprintk(RIO_DEBUG_TABLE, "Bad ID in map entry!\n"); p->RIOError.Error = ID_NUMBER_OUT_OF_RANGE; return -EINVAL; } - MapP->Name[MAX_NAME_LEN-1] = '\0'; + MapP->Name[MAX_NAME_LEN - 1] = '\0'; sptr = MapP->Name; - while ( *sptr ) { - if ( *sptr<' ' || *sptr>'~' ) { - rio_dprintk (RIO_DEBUG_TABLE, "Name entry contains non-printing characters!\n"); + while (*sptr) { + if (*sptr < ' ' || *sptr > '~') { + rio_dprintk(RIO_DEBUG_TABLE, "Name entry contains non-printing characters!\n"); p->RIOError.Error = BAD_CHARACTER_IN_NAME; return -EINVAL; } sptr++; } - for ( host=0; host < p->RIONumHosts; host++ ) { - if ( MapP->HostUniqueNum == p->RIOHosts[host].UniqueNum ) { - if ( (p->RIOHosts[host].Flags & RUN_STATE) != RC_RUNNING ) { + for (host = 0; host < p->RIONumHosts; host++) { + if (MapP->HostUniqueNum == p->RIOHosts[host].UniqueNum) { + if ((p->RIOHosts[host].Flags & RUN_STATE) != RC_RUNNING) { p->RIOError.Error = HOST_NOT_RUNNING; return -ENXIO; } - if ( MapP->ID==0 ) { - CCOPY( MapP->Name, p->RIOHosts[host].Name, MAX_NAME_LEN ); + if (MapP->ID == 0) { + CCOPY(MapP->Name, p->RIOHosts[host].Name, MAX_NAME_LEN); return 0; } - HostMapP = &p->RIOHosts[host].Mapping[MapP->ID-1]; + HostMapP = &p->RIOHosts[host].Mapping[MapP->ID - 1]; - if ( HostMapP->RtaUniqueNum != MapP->RtaUniqueNum ) { + if (HostMapP->RtaUniqueNum != MapP->RtaUniqueNum) { p->RIOError.Error = RTA_NUMBER_WRONG; return -ENXIO; } - CCOPY( MapP->Name, HostMapP->Name, MAX_NAME_LEN ); + CCOPY(MapP->Name, HostMapP->Name, MAX_NAME_LEN); return 0; } } p->RIOError.Error = UNKNOWN_HOST_NUMBER; - rio_dprintk (RIO_DEBUG_TABLE, "Unknown host %x\n", MapP->HostUniqueNum); + rio_dprintk(RIO_DEBUG_TABLE, "Unknown host %x\n", MapP->HostUniqueNum); return -ENXIO; } diff --git a/drivers/char/rio/riotime.h b/drivers/char/rio/riotime.h index 66d52bc0549b..35e01cd103d0 100644 --- a/drivers/char/rio/riotime.h +++ b/drivers/char/rio/riotime.h @@ -40,7 +40,7 @@ #ifndef lint #ifdef SCCS -static char *_rio_riotime_h_sccs = "@(#)riotime.h 1.1" ; +static char *_rio_riotime_h_sccs = "@(#)riotime.h 1.1"; #endif #endif @@ -52,7 +52,7 @@ static char *_rio_riotime_h_sccs = "@(#)riotime.h 1.1" ; /************************************** * Convert a RIO tick (1/10th second) * into transputer low priority ticks - *************************************/ + *************************************/ #define RioTimeToLow(time) (time*(100000 / 64)) #define RioLowToTime(time) ((time*64)/100000) diff --git a/drivers/char/rio/riotty.c b/drivers/char/rio/riotty.c index 78a321afdf4f..5894a25b0113 100644 --- a/drivers/char/rio/riotty.c +++ b/drivers/char/rio/riotty.c @@ -90,21 +90,19 @@ static char *_riotty_c_sccs_ = "@(#)riotty.c 1.3"; #include "sam.h" #if 0 -static void ttyseth_pv(struct Port *, struct ttystatics *, - struct termios *sg, int); +static void ttyseth_pv(struct Port *, struct ttystatics *, struct termios *sg, int); #endif static void RIOClearUp(struct Port *PortP); -int RIOShortCommand(struct rio_info *p, struct Port *PortP, - int command, int len, int arg); +int RIOShortCommand(struct rio_info *p, struct Port *PortP, int command, int len, int arg); #if 0 static int RIOCookMode(struct ttystatics *); #endif -extern int conv_vb[]; /* now defined in ttymgr.c */ -extern int conv_bv[]; /* now defined in ttymgr.c */ - +extern int conv_vb[]; /* now defined in ttymgr.c */ +extern int conv_bv[]; /* now defined in ttymgr.c */ + /* ** 16.09.1998 ARG - Fix to build riotty.k.o for Modular Kernel Support ** @@ -117,27 +115,25 @@ extern int conv_bv[]; /* now defined in ttymgr.c */ #endif #ifdef NEED_THIS2 -static struct old_sgttyb -default_sg = -{ - B19200, B19200, /* input and output speed */ - 'H' - '@', /* erase char */ - -1, /* 2nd erase char */ - 'U' - '@', /* kill char */ - ECHO | CRMOD, /* mode */ - 'C' - '@', /* interrupt character */ - '\\' - '@', /* quit char */ - 'Q' - '@', /* start char */ - 'S' - '@', /* stop char */ - 'D' - '@', /* EOF */ - -1, /* brk */ - (LCRTBS | LCRTERA | LCRTKIL | LCTLECH), /* local mode word */ - 'Z' - '@', /* process stop */ - 'Y' - '@', /* delayed stop */ - 'R' - '@', /* reprint line */ - 'O' - '@', /* flush output */ - 'W' - '@', /* word erase */ - 'V' - '@' /* literal next char */ +static struct old_sgttyb default_sg = { + B19200, B19200, /* input and output speed */ + 'H' - '@', /* erase char */ + -1, /* 2nd erase char */ + 'U' - '@', /* kill char */ + ECHO | CRMOD, /* mode */ + 'C' - '@', /* interrupt character */ + '\\' - '@', /* quit char */ + 'Q' - '@', /* start char */ + 'S' - '@', /* stop char */ + 'D' - '@', /* EOF */ + -1, /* brk */ + (LCRTBS | LCRTERA | LCRTKIL | LCTLECH), /* local mode word */ + 'Z' - '@', /* process stop */ + 'Y' - '@', /* delayed stop */ + 'R' - '@', /* reprint line */ + 'O' - '@', /* flush output */ + 'W' - '@', /* word erase */ + 'V' - '@' /* literal next char */ }; #endif @@ -145,62 +141,59 @@ default_sg = extern struct rio_info *p; -int -riotopen(struct tty_struct * tty, struct file * filp) +int riotopen(struct tty_struct *tty, struct file *filp) { register uint SysPort; int Modem; int repeat_this = 250; - struct Port *PortP; /* pointer to the port structure */ + struct Port *PortP; /* pointer to the port structure */ unsigned long flags; int retval = 0; - func_enter (); + func_enter(); /* Make sure driver_data is NULL in case the rio isn't booted jet. Else gs_close is going to oops. - */ + */ tty->driver_data = NULL; - + SysPort = rio_minor(tty); - Modem = rio_ismodem(tty); + Modem = rio_ismodem(tty); - if ( p->RIOFailed ) { - rio_dprintk (RIO_DEBUG_TTY, "System initialisation failed\n"); + if (p->RIOFailed) { + rio_dprintk(RIO_DEBUG_TTY, "System initialisation failed\n"); pseterr(ENXIO); - func_exit (); + func_exit(); return -ENXIO; } - rio_dprintk (RIO_DEBUG_TTY, "port open SysPort %d (%s) (mapped:%d)\n", - SysPort, Modem ? "Modem" : "tty", - p->RIOPortp[SysPort]->Mapped); + rio_dprintk(RIO_DEBUG_TTY, "port open SysPort %d (%s) (mapped:%d)\n", SysPort, Modem ? "Modem" : "tty", p->RIOPortp[SysPort]->Mapped); /* - ** Validate that we have received a legitimate request. - ** Currently, just check that we are opening a port on - ** a host card that actually exists, and that the port - ** has been mapped onto a host. - */ + ** Validate that we have received a legitimate request. + ** Currently, just check that we are opening a port on + ** a host card that actually exists, and that the port + ** has been mapped onto a host. + */ if (SysPort >= RIO_PORTS) { /* out of range ? */ - rio_dprintk (RIO_DEBUG_TTY, "Illegal port number %d\n",SysPort); + rio_dprintk(RIO_DEBUG_TTY, "Illegal port number %d\n", SysPort); pseterr(ENXIO); func_exit(); return -ENXIO; } /* - ** Grab pointer to the port stucture - */ + ** Grab pointer to the port stucture + */ PortP = p->RIOPortp[SysPort]; /* Get control struc */ - rio_dprintk (RIO_DEBUG_TTY, "PortP: %p\n", PortP); - if ( !PortP->Mapped ) { /* we aren't mapped yet! */ + rio_dprintk(RIO_DEBUG_TTY, "PortP: %p\n", PortP); + if (!PortP->Mapped) { /* we aren't mapped yet! */ /* - ** The system doesn't know which RTA this port - ** corresponds to. - */ - rio_dprintk (RIO_DEBUG_TTY, "port not mapped into system\n"); - func_exit (); + ** The system doesn't know which RTA this port + ** corresponds to. + */ + rio_dprintk(RIO_DEBUG_TTY, "port not mapped into system\n"); + func_exit(); pseterr(ENXIO); return -ENXIO; } @@ -210,132 +203,131 @@ riotopen(struct tty_struct * tty, struct file * filp) PortP->gs.tty = tty; PortP->gs.count++; - rio_dprintk (RIO_DEBUG_TTY, "%d bytes in tx buffer\n", - PortP->gs.xmit_cnt); + rio_dprintk(RIO_DEBUG_TTY, "%d bytes in tx buffer\n", PortP->gs.xmit_cnt); - retval = gs_init_port (&PortP->gs); + retval = gs_init_port(&PortP->gs); if (retval) { PortP->gs.count--; return -ENXIO; } /* - ** If the host hasn't been booted yet, then - ** fail - */ - if ( (PortP->HostP->Flags & RUN_STATE) != RC_RUNNING ) { - rio_dprintk (RIO_DEBUG_TTY, "Host not running\n"); + ** If the host hasn't been booted yet, then + ** fail + */ + if ((PortP->HostP->Flags & RUN_STATE) != RC_RUNNING) { + rio_dprintk(RIO_DEBUG_TTY, "Host not running\n"); pseterr(ENXIO); - func_exit (); + func_exit(); return -ENXIO; } /* - ** If the RTA has not booted yet and the user has choosen to block - ** until the RTA is present then we must spin here waiting for - ** the RTA to boot. - */ + ** If the RTA has not booted yet and the user has choosen to block + ** until the RTA is present then we must spin here waiting for + ** the RTA to boot. + */ #if 0 if (!(PortP->HostP->Mapping[PortP->RupNum].Flags & RTA_BOOTED)) { if (PortP->WaitUntilBooted) { - rio_dprintk (RIO_DEBUG_TTY, "Waiting for RTA to boot\n"); + rio_dprintk(RIO_DEBUG_TTY, "Waiting for RTA to boot\n"); do { if (RIODelay(PortP, HUNDRED_MS) == RIO_FAIL) { - rio_dprintk (RIO_DEBUG_TTY, "RTA EINTR in delay \n"); - func_exit (); + rio_dprintk(RIO_DEBUG_TTY, "RTA EINTR in delay \n"); + func_exit(); return -EINTR; } - if (repeat_this -- <= 0) { - rio_dprintk (RIO_DEBUG_TTY, "Waiting for RTA to boot timeout\n"); - RIOPreemptiveCmd(p, PortP, FCLOSE ); + if (repeat_this-- <= 0) { + rio_dprintk(RIO_DEBUG_TTY, "Waiting for RTA to boot timeout\n"); + RIOPreemptiveCmd(p, PortP, FCLOSE); pseterr(EINTR); - func_exit (); + func_exit(); return -EIO; } - } while(!(PortP->HostP->Mapping[PortP->RupNum].Flags & RTA_BOOTED)); - rio_dprintk (RIO_DEBUG_TTY, "RTA has been booted\n"); + } while (!(PortP->HostP->Mapping[PortP->RupNum].Flags & RTA_BOOTED)); + rio_dprintk(RIO_DEBUG_TTY, "RTA has been booted\n"); } else { - rio_dprintk (RIO_DEBUG_TTY, "RTA never booted\n"); + rio_dprintk(RIO_DEBUG_TTY, "RTA never booted\n"); pseterr(ENXIO); - func_exit (); + func_exit(); return 0; } } #else /* I find the above code a bit hairy. I find the below code - easier to read and shorter. Now, if it works too that would + easier to read and shorter. Now, if it works too that would be great... -- REW - */ - rio_dprintk (RIO_DEBUG_TTY, "Checking if RTA has booted... \n"); + */ + rio_dprintk(RIO_DEBUG_TTY, "Checking if RTA has booted... \n"); while (!(PortP->HostP->Mapping[PortP->RupNum].Flags & RTA_BOOTED)) { - if (!PortP->WaitUntilBooted) { - rio_dprintk (RIO_DEBUG_TTY, "RTA never booted\n"); - func_exit (); - return -ENXIO; - } - - /* Under Linux you'd normally use a wait instead of this - busy-waiting. I'll stick with the old implementation for - now. --REW - */ - if (RIODelay(PortP, HUNDRED_MS) == RIO_FAIL) { - rio_dprintk (RIO_DEBUG_TTY, "RTA_wait_for_boot: EINTR in delay \n"); - func_exit (); - return -EINTR; - } - if (repeat_this -- <= 0) { - rio_dprintk (RIO_DEBUG_TTY, "Waiting for RTA to boot timeout\n"); - func_exit (); - return -EIO; - } + if (!PortP->WaitUntilBooted) { + rio_dprintk(RIO_DEBUG_TTY, "RTA never booted\n"); + func_exit(); + return -ENXIO; + } + + /* Under Linux you'd normally use a wait instead of this + busy-waiting. I'll stick with the old implementation for + now. --REW + */ + if (RIODelay(PortP, HUNDRED_MS) == RIO_FAIL) { + rio_dprintk(RIO_DEBUG_TTY, "RTA_wait_for_boot: EINTR in delay \n"); + func_exit(); + return -EINTR; + } + if (repeat_this-- <= 0) { + rio_dprintk(RIO_DEBUG_TTY, "Waiting for RTA to boot timeout\n"); + func_exit(); + return -EIO; + } } - rio_dprintk (RIO_DEBUG_TTY, "RTA has been booted\n"); + rio_dprintk(RIO_DEBUG_TTY, "RTA has been booted\n"); #endif #if 0 - tp = PortP->TtyP; /* get tty struct */ + tp = PortP->TtyP; /* get tty struct */ #endif rio_spin_lock_irqsave(&PortP->portSem, flags); - if ( p->RIOHalted ) { + if (p->RIOHalted) { goto bombout; } #if 0 retval = gs_init_port(&PortP->gs); - if (retval){ - func_exit (); + if (retval) { + func_exit(); return retval; } #endif /* - ** If the port is in the final throws of being closed, - ** we should wait here (politely), waiting - ** for it to finish, so that it doesn't close us! - */ - while ( (PortP->State & RIO_CLOSING) && !p->RIOHalted ) { - rio_dprintk (RIO_DEBUG_TTY, "Waiting for RIO_CLOSING to go away\n"); - if (repeat_this -- <= 0) { - rio_dprintk (RIO_DEBUG_TTY, "Waiting for not idle closed broken by signal\n"); - RIOPreemptiveCmd(p, PortP, FCLOSE ); + ** If the port is in the final throws of being closed, + ** we should wait here (politely), waiting + ** for it to finish, so that it doesn't close us! + */ + while ((PortP->State & RIO_CLOSING) && !p->RIOHalted) { + rio_dprintk(RIO_DEBUG_TTY, "Waiting for RIO_CLOSING to go away\n"); + if (repeat_this-- <= 0) { + rio_dprintk(RIO_DEBUG_TTY, "Waiting for not idle closed broken by signal\n"); + RIOPreemptiveCmd(p, PortP, FCLOSE); retval = -EINTR; goto bombout; } rio_spin_unlock_irqrestore(&PortP->portSem, flags); if (RIODelay(PortP, HUNDRED_MS) == RIO_FAIL) { - rio_spin_lock_irqsave(&PortP->portSem, flags); + rio_spin_lock_irqsave(&PortP->portSem, flags); retval = -EINTR; goto bombout; } - rio_spin_lock_irqsave(&PortP->portSem, flags); + rio_spin_lock_irqsave(&PortP->portSem, flags); } - if ( !PortP->Mapped ) { - rio_dprintk (RIO_DEBUG_TTY, "Port unmapped while closing!\n"); + if (!PortP->Mapped) { + rio_dprintk(RIO_DEBUG_TTY, "Port unmapped while closing!\n"); rio_spin_unlock_irqrestore(&PortP->portSem, flags); retval = -ENXIO; - func_exit (); + func_exit(); return retval; } - if ( p->RIOHalted ) { + if (p->RIOHalted) { goto bombout; } @@ -346,16 +338,16 @@ riotopen(struct tty_struct * tty, struct file * filp) */ /* Uh? Suppose I turn these on and then another process opens the port again? The flags get cleared! Not good. -- REW */ - if ( !(PortP->State & (RIO_LOPEN | RIO_MOPEN)) ) { - PortP->Config &= ~(RIO_CTSFLOW|RIO_RTSFLOW); + if (!(PortP->State & (RIO_LOPEN | RIO_MOPEN))) { + PortP->Config &= ~(RIO_CTSFLOW | RIO_RTSFLOW); } if (!(PortP->firstOpen)) { /* First time ? */ - rio_dprintk (RIO_DEBUG_TTY, "First open for this port\n"); - + rio_dprintk(RIO_DEBUG_TTY, "First open for this port\n"); + PortP->firstOpen++; - PortP->CookMode = 0; /* XXX RIOCookMode(tp); */ + PortP->CookMode = 0; /* XXX RIOCookMode(tp); */ PortP->InUse = NOT_INUSE; /* Tentative fix for bug PR27. Didn't work. */ @@ -363,26 +355,26 @@ riotopen(struct tty_struct * tty, struct file * filp) rio_spin_unlock_irqrestore(&PortP->portSem, flags); #ifdef NEED_THIS - ttyseth(PortP, tp, (struct old_sgttyb *)&default_sg); + ttyseth(PortP, tp, (struct old_sgttyb *) &default_sg); #endif /* Someone explain to me why this delay/config is - here. If I read the docs correctly the "open" - command piggybacks the parameters immediately. + here. If I read the docs correctly the "open" + command piggybacks the parameters immediately. -- REW */ - RIOParam(PortP,OPEN,Modem,OK_TO_SLEEP); /* Open the port */ + RIOParam(PortP, OPEN, Modem, OK_TO_SLEEP); /* Open the port */ #if 0 /* This delay of 1 second was annoying. I removed it. -- REW */ - RIODelay(PortP, HUNDRED_MS*10); - RIOParam(PortP,CONFIG,Modem,OK_TO_SLEEP); /* Config the port */ + RIODelay(PortP, HUNDRED_MS * 10); + RIOParam(PortP, CONFIG, Modem, OK_TO_SLEEP); /* Config the port */ #endif rio_spin_lock_irqsave(&PortP->portSem, flags); /* - ** wait for the port to be not closed. - */ - while ( !(PortP->PortState & PORT_ISOPEN) && !p->RIOHalted ) { - rio_dprintk (RIO_DEBUG_TTY, "Waiting for PORT_ISOPEN-currently %x\n",PortP->PortState); + ** wait for the port to be not closed. + */ + while (!(PortP->PortState & PORT_ISOPEN) && !p->RIOHalted) { + rio_dprintk(RIO_DEBUG_TTY, "Waiting for PORT_ISOPEN-currently %x\n", PortP->PortState); /* ** 15.10.1998 ARG - ESIL 0759 ** (Part) fix for port being trashed when opened whilst RTA "disconnected" @@ -399,115 +391,109 @@ riotopen(struct tty_struct * tty, struct file * filp) */ rio_spin_unlock_irqrestore(&PortP->portSem, flags); if (RIODelay(PortP, HUNDRED_MS) == RIO_FAIL) { - rio_dprintk (RIO_DEBUG_TTY, "Waiting for open to finish broken by signal\n"); - RIOPreemptiveCmd(p, PortP, FCLOSE ); - func_exit (); + rio_dprintk(RIO_DEBUG_TTY, "Waiting for open to finish broken by signal\n"); + RIOPreemptiveCmd(p, PortP, FCLOSE); + func_exit(); return -EINTR; } rio_spin_lock_irqsave(&PortP->portSem, flags); } - if ( p->RIOHalted ) { - retval = -EIO; -bombout: - /* RIOClearUp( PortP ); */ + if (p->RIOHalted) { + retval = -EIO; + bombout: + /* RIOClearUp( PortP ); */ rio_spin_unlock_irqrestore(&PortP->portSem, flags); return retval; } - rio_dprintk (RIO_DEBUG_TTY, "PORT_ISOPEN found\n"); + rio_dprintk(RIO_DEBUG_TTY, "PORT_ISOPEN found\n"); } - -#ifdef MODEM_SUPPORT +#ifdef MODEM_SUPPORT if (Modem) { - rio_dprintk (RIO_DEBUG_TTY, "Modem - test for carrier\n"); + rio_dprintk(RIO_DEBUG_TTY, "Modem - test for carrier\n"); /* - ** ACTION - ** insert test for carrier here. -- ??? - ** I already see that test here. What's the deal? -- REW - */ - if ((PortP->gs.tty->termios->c_cflag & CLOCAL) || (PortP->ModemState & MSVR1_CD)) - { - rio_dprintk (RIO_DEBUG_TTY, "open(%d) Modem carr on\n", SysPort); + ** ACTION + ** insert test for carrier here. -- ??? + ** I already see that test here. What's the deal? -- REW + */ + if ((PortP->gs.tty->termios->c_cflag & CLOCAL) || (PortP->ModemState & MSVR1_CD)) { + rio_dprintk(RIO_DEBUG_TTY, "open(%d) Modem carr on\n", SysPort); /* - tp->tm.c_state |= CARR_ON; - wakeup((caddr_t) &tp->tm.c_canq); - */ + tp->tm.c_state |= CARR_ON; + wakeup((caddr_t) &tp->tm.c_canq); + */ PortP->State |= RIO_CARR_ON; - wake_up_interruptible (&PortP->gs.open_wait); - } - else /* no carrier - wait for DCD */ - { - /* - while (!(PortP->gs.tty->termios->c_state & CARR_ON) && - !(filp->f_flags & O_NONBLOCK) && !p->RIOHalted ) - */ - while (!(PortP->State & RIO_CARR_ON) && - !(filp->f_flags & O_NONBLOCK) && !p->RIOHalted ) { - - rio_dprintk (RIO_DEBUG_TTY, "open(%d) sleeping for carr on\n",SysPort); + wake_up_interruptible(&PortP->gs.open_wait); + } else { /* no carrier - wait for DCD */ + + /* + while (!(PortP->gs.tty->termios->c_state & CARR_ON) && + !(filp->f_flags & O_NONBLOCK) && !p->RIOHalted ) + */ + while (!(PortP->State & RIO_CARR_ON) && !(filp->f_flags & O_NONBLOCK) && !p->RIOHalted) { + + rio_dprintk(RIO_DEBUG_TTY, "open(%d) sleeping for carr on\n", SysPort); /* - PortP->gs.tty->termios->c_state |= WOPEN; - */ + PortP->gs.tty->termios->c_state |= WOPEN; + */ PortP->State |= RIO_WOPEN; rio_spin_unlock_irqrestore(&PortP->portSem, flags); - if (RIODelay (PortP, HUNDRED_MS) == RIO_FAIL) + if (RIODelay(PortP, HUNDRED_MS) == RIO_FAIL) #if 0 - if ( sleep((caddr_t)&tp->tm.c_canqo, TTIPRI|PCATCH)) + if (sleep((caddr_t) & tp->tm.c_canqo, TTIPRI | PCATCH)) #endif - { - /* - ** ACTION: verify that this is a good thing - ** to do here. -- ??? - ** I think it's OK. -- REW - */ - rio_dprintk (RIO_DEBUG_TTY, "open(%d) sleeping for carr broken by signal\n", - SysPort); - RIOPreemptiveCmd( p, PortP, FCLOSE ); - /* - tp->tm.c_state &= ~WOPEN; - */ - PortP->State &= ~RIO_WOPEN; - rio_spin_unlock_irqrestore(&PortP->portSem, flags); - func_exit (); - return -EINTR; - } + { + /* + ** ACTION: verify that this is a good thing + ** to do here. -- ??? + ** I think it's OK. -- REW + */ + rio_dprintk(RIO_DEBUG_TTY, "open(%d) sleeping for carr broken by signal\n", SysPort); + RIOPreemptiveCmd(p, PortP, FCLOSE); + /* + tp->tm.c_state &= ~WOPEN; + */ + PortP->State &= ~RIO_WOPEN; + rio_spin_unlock_irqrestore(&PortP->portSem, flags); + func_exit(); + return -EINTR; + } } PortP->State &= ~RIO_WOPEN; } - if ( p->RIOHalted ) + if (p->RIOHalted) goto bombout; - rio_dprintk (RIO_DEBUG_TTY, "Setting RIO_MOPEN\n"); + rio_dprintk(RIO_DEBUG_TTY, "Setting RIO_MOPEN\n"); PortP->State |= RIO_MOPEN; - } - else + } else #endif { /* - ** ACTION - ** Direct line open - force carrier (will probably mean - ** that sleeping Modem line fubar) - */ + ** ACTION + ** Direct line open - force carrier (will probably mean + ** that sleeping Modem line fubar) + */ PortP->State |= RIO_LOPEN; } - if ( p->RIOHalted ) { + if (p->RIOHalted) { goto bombout; } - rio_dprintk (RIO_DEBUG_TTY, "high level open done\n"); + rio_dprintk(RIO_DEBUG_TTY, "high level open done\n"); #ifdef STATS PortP->Stat.OpenCnt++; #endif /* - ** Count opens for port statistics reporting - */ + ** Count opens for port statistics reporting + */ if (PortP->statsGather) PortP->opens++; rio_spin_unlock_irqrestore(&PortP->portSem, flags); - rio_dprintk (RIO_DEBUG_TTY, "Returning from open\n"); - func_exit (); + rio_dprintk(RIO_DEBUG_TTY, "Returning from open\n"); + func_exit(); return 0; } @@ -516,36 +502,35 @@ bombout: ** The operating system thinks that this is last close for the device. ** As there are two interfaces to the port (Modem and tty), we need to ** check that both are closed before we close the device. -*/ -int -riotclose(void *ptr) +*/ +int riotclose(void *ptr) { #if 0 register uint SysPort = dev; - struct ttystatics *tp; /* pointer to our ttystruct */ + struct ttystatics *tp; /* pointer to our ttystruct */ #endif struct Port *PortP = ptr; /* pointer to the port structure */ int deleted = 0; - int try = -1; /* Disable the timeouts by setting them to -1 */ - int repeat_this = -1; /* Congrats to those having 15 years of - uptime! (You get to break the driver.) */ + int try = -1; /* Disable the timeouts by setting them to -1 */ + int repeat_this = -1; /* Congrats to those having 15 years of + uptime! (You get to break the driver.) */ unsigned long end_time; - struct tty_struct * tty; + struct tty_struct *tty; unsigned long flags; int Modem; int rv = 0; - - rio_dprintk (RIO_DEBUG_TTY, "port close SysPort %d\n",PortP->PortNum); + + rio_dprintk(RIO_DEBUG_TTY, "port close SysPort %d\n", PortP->PortNum); /* PortP = p->RIOPortp[SysPort]; */ - rio_dprintk (RIO_DEBUG_TTY, "Port is at address 0x%x\n",(int)PortP); - /* tp = PortP->TtyP;*/ /* Get tty */ + rio_dprintk(RIO_DEBUG_TTY, "Port is at address 0x%x\n", (int) PortP); + /* tp = PortP->TtyP; *//* Get tty */ tty = PortP->gs.tty; - rio_dprintk (RIO_DEBUG_TTY, "TTY is at address 0x%x\n",(int)tty); + rio_dprintk(RIO_DEBUG_TTY, "TTY is at address 0x%x\n", (int) tty); - if (PortP->gs.closing_wait) + if (PortP->gs.closing_wait) end_time = jiffies + PortP->gs.closing_wait; - else + else end_time = jiffies + MAX_SCHEDULE_TIMEOUT; Modem = rio_ismodem(tty); @@ -553,48 +538,48 @@ riotclose(void *ptr) /* What F.CKING cache? Even then, a higly idle multiprocessor, system with large caches this won't work . Better find out when this doesn't work asap, and fix the cause. -- REW */ - - RIODelay(PortP, HUNDRED_MS*10); /* To flush the cache */ + + RIODelay(PortP, HUNDRED_MS * 10); /* To flush the cache */ #endif rio_spin_lock_irqsave(&PortP->portSem, flags); /* - ** Setting this flag will make any process trying to open - ** this port block until we are complete closing it. - */ + ** Setting this flag will make any process trying to open + ** this port block until we are complete closing it. + */ PortP->State |= RIO_CLOSING; - if ( (PortP->State & RIO_DELETED) ) { - rio_dprintk (RIO_DEBUG_TTY, "Close on deleted RTA\n"); + if ((PortP->State & RIO_DELETED)) { + rio_dprintk(RIO_DEBUG_TTY, "Close on deleted RTA\n"); deleted = 1; } - - if ( p->RIOHalted ) { - RIOClearUp( PortP ); + + if (p->RIOHalted) { + RIOClearUp(PortP); rv = -EIO; goto close_end; } - rio_dprintk (RIO_DEBUG_TTY, "Clear bits\n"); + rio_dprintk(RIO_DEBUG_TTY, "Clear bits\n"); /* - ** clear the open bits for this device - */ + ** clear the open bits for this device + */ PortP->State &= (Modem ? ~RIO_MOPEN : ~RIO_LOPEN); PortP->State &= ~RIO_CARR_ON; PortP->ModemState &= ~MSVR1_CD; /* - ** If the device was open as both a Modem and a tty line - ** then we need to wimp out here, as the port has not really - ** been finally closed (gee, whizz!) The test here uses the - ** bit for the OTHER mode of operation, to see if THAT is - ** still active! - */ - if ( (PortP->State & (RIO_LOPEN|RIO_MOPEN)) ) { + ** If the device was open as both a Modem and a tty line + ** then we need to wimp out here, as the port has not really + ** been finally closed (gee, whizz!) The test here uses the + ** bit for the OTHER mode of operation, to see if THAT is + ** still active! + */ + if ((PortP->State & (RIO_LOPEN | RIO_MOPEN))) { /* - ** The port is still open for the other task - - ** return, pretending that we are still active. - */ - rio_dprintk (RIO_DEBUG_TTY, "Channel %d still open !\n",PortP->PortNum); + ** The port is still open for the other task - + ** return, pretending that we are still active. + */ + rio_dprintk(RIO_DEBUG_TTY, "Channel %d still open !\n", PortP->PortNum); PortP->State &= ~RIO_CLOSING; if (PortP->firstOpen) PortP->firstOpen--; @@ -602,48 +587,47 @@ riotclose(void *ptr) return -EIO; } - rio_dprintk (RIO_DEBUG_TTY, "Closing down - everything must go!\n"); + rio_dprintk(RIO_DEBUG_TTY, "Closing down - everything must go!\n"); PortP->State &= ~RIO_DYNOROD; /* - ** This is where we wait for the port - ** to drain down before closing. Bye-bye.... - ** (We never meant to do this) - */ - rio_dprintk (RIO_DEBUG_TTY, "Timeout 1 starts\n"); + ** This is where we wait for the port + ** to drain down before closing. Bye-bye.... + ** (We never meant to do this) + */ + rio_dprintk(RIO_DEBUG_TTY, "Timeout 1 starts\n"); if (!deleted) - while ( (PortP->InUse != NOT_INUSE) && !p->RIOHalted && - (PortP->TxBufferIn != PortP->TxBufferOut) ) { - cprintf("Need to flush the ttyport\n"); - if (repeat_this -- <= 0) { - rv = -EINTR; - rio_dprintk (RIO_DEBUG_TTY, "Waiting for not idle closed broken by signal\n"); - RIOPreemptiveCmd(p, PortP, FCLOSE); - goto close_end; - } - rio_dprintk (RIO_DEBUG_TTY, "Calling timeout to flush in closing\n"); - rio_spin_unlock_irqrestore(&PortP->portSem, flags); - if (RIODelay_ni(PortP, HUNDRED_MS*10) == RIO_FAIL) { - rio_dprintk (RIO_DEBUG_TTY, "RTA EINTR in delay \n"); - rv = -EINTR; + while ((PortP->InUse != NOT_INUSE) && !p->RIOHalted && (PortP->TxBufferIn != PortP->TxBufferOut)) { + cprintf("Need to flush the ttyport\n"); + if (repeat_this-- <= 0) { + rv = -EINTR; + rio_dprintk(RIO_DEBUG_TTY, "Waiting for not idle closed broken by signal\n"); + RIOPreemptiveCmd(p, PortP, FCLOSE); + goto close_end; + } + rio_dprintk(RIO_DEBUG_TTY, "Calling timeout to flush in closing\n"); + rio_spin_unlock_irqrestore(&PortP->portSem, flags); + if (RIODelay_ni(PortP, HUNDRED_MS * 10) == RIO_FAIL) { + rio_dprintk(RIO_DEBUG_TTY, "RTA EINTR in delay \n"); + rv = -EINTR; + rio_spin_lock_irqsave(&PortP->portSem, flags); + goto close_end; + } rio_spin_lock_irqsave(&PortP->portSem, flags); - goto close_end; } - rio_spin_lock_irqsave(&PortP->portSem, flags); - } PortP->TxBufferIn = PortP->TxBufferOut = 0; repeat_this = 0xff; PortP->InUse = 0; - if ( (PortP->State & (RIO_LOPEN|RIO_MOPEN)) ) { + if ((PortP->State & (RIO_LOPEN | RIO_MOPEN))) { /* - ** The port has been re-opened for the other task - - ** return, pretending that we are still active. - */ - rio_dprintk (RIO_DEBUG_TTY, "Channel %d re-open!\n", PortP->PortNum); + ** The port has been re-opened for the other task - + ** return, pretending that we are still active. + */ + rio_dprintk(RIO_DEBUG_TTY, "Channel %d re-open!\n", PortP->PortNum); PortP->State &= ~RIO_CLOSING; rio_spin_unlock_irqrestore(&PortP->portSem, flags); if (PortP->firstOpen) @@ -651,8 +635,8 @@ riotclose(void *ptr) return -EIO; } - if ( p->RIOHalted ) { - RIOClearUp( PortP ); + if (p->RIOHalted) { + RIOClearUp(PortP); goto close_end; } @@ -665,57 +649,56 @@ riotclose(void *ptr) } if (!deleted) - while (try && (PortP->PortState & PORT_ISOPEN)) { - try--; - if (time_after (jiffies, end_time)) { - rio_dprintk (RIO_DEBUG_TTY, "Run out of tries - force the bugger shut!\n" ); - RIOPreemptiveCmd(p, PortP,FCLOSE); - break; - } - rio_dprintk (RIO_DEBUG_TTY, "Close: PortState:ISOPEN is %d\n", - PortP->PortState & PORT_ISOPEN); + while (try && (PortP->PortState & PORT_ISOPEN)) { + try--; + if (time_after(jiffies, end_time)) { + rio_dprintk(RIO_DEBUG_TTY, "Run out of tries - force the bugger shut!\n"); + RIOPreemptiveCmd(p, PortP, FCLOSE); + break; + } + rio_dprintk(RIO_DEBUG_TTY, "Close: PortState:ISOPEN is %d\n", PortP->PortState & PORT_ISOPEN); - if ( p->RIOHalted ) { - RIOClearUp( PortP ); - goto close_end; - } - if (RIODelay(PortP, HUNDRED_MS) == RIO_FAIL) { - rio_dprintk (RIO_DEBUG_TTY, "RTA EINTR in delay \n"); - RIOPreemptiveCmd(p, PortP,FCLOSE); - break; + if (p->RIOHalted) { + RIOClearUp(PortP); + goto close_end; + } + if (RIODelay(PortP, HUNDRED_MS) == RIO_FAIL) { + rio_dprintk(RIO_DEBUG_TTY, "RTA EINTR in delay \n"); + RIOPreemptiveCmd(p, PortP, FCLOSE); + break; + } } - } rio_spin_lock_irqsave(&PortP->portSem, flags); - rio_dprintk (RIO_DEBUG_TTY, "Close: try was %d on completion\n", try ); - + rio_dprintk(RIO_DEBUG_TTY, "Close: try was %d on completion\n", try); + /* RIOPreemptiveCmd(p, PortP, FCLOSE); */ /* ** 15.10.1998 ARG - ESIL 0761 part fix ** RIO has it's own CTSFLOW and RTSFLOW flags in 'Config' in the port structure,** we need to make sure that the flags are clear when the port is opened. */ - PortP->Config &= ~(RIO_CTSFLOW|RIO_RTSFLOW); + PortP->Config &= ~(RIO_CTSFLOW | RIO_RTSFLOW); #ifdef STATS PortP->Stat.CloseCnt++; #endif /* - ** Count opens for port statistics reporting - */ + ** Count opens for port statistics reporting + */ if (PortP->statsGather) PortP->closes++; -close_end: + close_end: /* XXX: Why would a "DELETED" flag be reset here? I'd have thought that a "deleted" flag means that the port was permanently gone, but here we can make it reappear by it being in close during the "deletion". - */ - PortP->State &= ~(RIO_CLOSING|RIO_DELETED); + */ + PortP->State &= ~(RIO_CLOSING | RIO_DELETED); if (PortP->firstOpen) PortP->firstOpen--; rio_spin_unlock_irqrestore(&PortP->portSem, flags); - rio_dprintk (RIO_DEBUG_TTY, "Return from close\n"); + rio_dprintk(RIO_DEBUG_TTY, "Return from close\n"); return rv; } @@ -728,52 +711,50 @@ close_end: ** COOK_MEDIUM if the card can do all the processing necessary. */ #if 0 -static int -RIOCookMode(struct ttystatics *tp) +static int RIOCookMode(struct ttystatics *tp) { /* - ** We can't handle tm.c_mstate != 0 on SCO - ** We can't handle mapping - ** We can't handle non-ttwrite line disc. - ** We can't handle lflag XCASE - ** We can handle oflag OPOST & (OCRNL, ONLCR, TAB3) - */ + ** We can't handle tm.c_mstate != 0 on SCO + ** We can't handle mapping + ** We can't handle non-ttwrite line disc. + ** We can't handle lflag XCASE + ** We can handle oflag OPOST & (OCRNL, ONLCR, TAB3) + */ #ifdef CHECK - CheckTtyP( tp ); + CheckTtyP(tp); #endif if (!(tp->tm.c_oflag & OPOST)) /* No post processing */ return COOK_RAW; /* Raw mode o/p */ - if ( tp->tm.c_lflag & XCASE ) + if (tp->tm.c_lflag & XCASE) return COOK_WELL; /* Use line disc */ - if (tp->tm.c_oflag & ~(OPOST | ONLCR | OCRNL | TAB3 ) ) + if (tp->tm.c_oflag & ~(OPOST | ONLCR | OCRNL | TAB3)) return COOK_WELL; /* Use line disc for strange modes */ - if ( tp->tm.c_oflag == OPOST ) /* If only OPOST is set, do RAW */ + if (tp->tm.c_oflag == OPOST) /* If only OPOST is set, do RAW */ return COOK_RAW; /* - ** So, we need to output process! - */ + ** So, we need to output process! + */ return COOK_MEDIUM; } #endif -static void -RIOClearUp(PortP) +static void RIOClearUp(PortP) struct Port *PortP; { - rio_dprintk (RIO_DEBUG_TTY, "RIOHalted set\n"); - PortP->Config = 0; /* Direct semaphore */ + rio_dprintk(RIO_DEBUG_TTY, "RIOHalted set\n"); + PortP->Config = 0; /* Direct semaphore */ PortP->PortState = 0; PortP->firstOpen = 0; PortP->FlushCmdBodge = 0; PortP->ModemState = PortP->CookMode = 0; PortP->Mapped = 0; PortP->WflushFlag = 0; - PortP->MagicFlags = 0; + PortP->MagicFlags = 0; PortP->RxDataStart = 0; PortP->TxBufferIn = 0; PortP->TxBufferOut = 0; @@ -788,33 +769,31 @@ struct Port *PortP; ** Other values of len aren't allowed, and will cause ** a panic. */ -int RIOShortCommand(struct rio_info *p, struct Port *PortP, - int command, int len, int arg) +int RIOShortCommand(struct rio_info *p, struct Port *PortP, int command, int len, int arg) { PKT *PacketP; - int retries = 20; /* at 10 per second -> 2 seconds */ + int retries = 20; /* at 10 per second -> 2 seconds */ unsigned long flags; - rio_dprintk (RIO_DEBUG_TTY, "entering shortcommand.\n"); + rio_dprintk(RIO_DEBUG_TTY, "entering shortcommand.\n"); #ifdef CHECK - CheckPortP( PortP ); - if ( len < 1 || len > 2 ) - cprintf(("STUPID LENGTH %d\n",len)); + CheckPortP(PortP); + if (len < 1 || len > 2) + cprintf(("STUPID LENGTH %d\n", len)); #endif - if ( PortP->State & RIO_DELETED ) { - rio_dprintk (RIO_DEBUG_TTY, "Short command to deleted RTA ignored\n"); + if (PortP->State & RIO_DELETED) { + rio_dprintk(RIO_DEBUG_TTY, "Short command to deleted RTA ignored\n"); return RIO_FAIL; } rio_spin_lock_irqsave(&PortP->portSem, flags); /* - ** If the port is in use for pre-emptive command, then wait for it to - ** be free again. - */ - while ( (PortP->InUse != NOT_INUSE) && !p->RIOHalted ) { - rio_dprintk (RIO_DEBUG_TTY, "Waiting for not in use (%d)\n", - retries); + ** If the port is in use for pre-emptive command, then wait for it to + ** be free again. + */ + while ((PortP->InUse != NOT_INUSE) && !p->RIOHalted) { + rio_dprintk(RIO_DEBUG_TTY, "Waiting for not in use (%d)\n", retries); rio_spin_unlock_irqrestore(&PortP->portSem, flags); if (retries-- <= 0) { return RIO_FAIL; @@ -824,47 +803,47 @@ int RIOShortCommand(struct rio_info *p, struct Port *PortP, } rio_spin_lock_irqsave(&PortP->portSem, flags); } - if ( PortP->State & RIO_DELETED ) { - rio_dprintk (RIO_DEBUG_TTY, "Short command to deleted RTA ignored\n"); + if (PortP->State & RIO_DELETED) { + rio_dprintk(RIO_DEBUG_TTY, "Short command to deleted RTA ignored\n"); rio_spin_unlock_irqrestore(&PortP->portSem, flags); return RIO_FAIL; } - while ( !can_add_transmit(&PacketP,PortP) && !p->RIOHalted ) { - rio_dprintk (RIO_DEBUG_TTY, "Waiting to add short command to queue (%d)\n", retries); + while (!can_add_transmit(&PacketP, PortP) && !p->RIOHalted) { + rio_dprintk(RIO_DEBUG_TTY, "Waiting to add short command to queue (%d)\n", retries); rio_spin_unlock_irqrestore(&PortP->portSem, flags); if (retries-- <= 0) { - rio_dprintk (RIO_DEBUG_TTY, "out of tries. Failing\n"); + rio_dprintk(RIO_DEBUG_TTY, "out of tries. Failing\n"); return RIO_FAIL; } - if ( RIODelay_ni(PortP, HUNDRED_MS)==RIO_FAIL ) { + if (RIODelay_ni(PortP, HUNDRED_MS) == RIO_FAIL) { return RIO_FAIL; } rio_spin_lock_irqsave(&PortP->portSem, flags); } - if ( p->RIOHalted ) { + if (p->RIOHalted) { rio_spin_unlock_irqrestore(&PortP->portSem, flags); return RIO_FAIL; } /* - ** set the command byte and the argument byte - */ - WBYTE(PacketP->data[0] , command); + ** set the command byte and the argument byte + */ + WBYTE(PacketP->data[0], command); - if ( len==2 ) - WBYTE(PacketP->data[1] , arg); + if (len == 2) + WBYTE(PacketP->data[1], arg); /* - ** set the length of the packet and set the command bit. - */ - WBYTE(PacketP->len , PKT_CMD_BIT | len); + ** set the length of the packet and set the command bit. + */ + WBYTE(PacketP->len, PKT_CMD_BIT | len); add_transmit(PortP); /* - ** Count characters transmitted for port statistics reporting - */ + ** Count characters transmitted for port statistics reporting + */ if (PortP->statsGather) PortP->txchars += len; @@ -878,28 +857,26 @@ int RIOShortCommand(struct rio_info *p, struct Port *PortP, ** This is an ioctl interface. This is the twentieth century. You know what ** its all about. */ -int -riotioctl(struct rio_info *p, struct tty_struct *tty, int cmd, caddr_t arg) +int riotioctl(struct rio_info *p, struct tty_struct *tty, int cmd, caddr_t arg) { - register struct Port *PortP; - register struct ttystatics *tp; - int current; - int ParamSemIncremented = 0; - int old_oflag, old_cflag, old_iflag, changed, oldcook; - int i; - unsigned char sio_regs[5]; /* Here be magic */ - short vpix_cflag; - short divisor; - int baud; - uint SysPort = rio_minor(tty); - int Modem = rio_ismodem(tty); - int ioctl_processed; - - rio_dprintk (RIO_DEBUG_TTY, "port ioctl SysPort %d command 0x%x argument 0x%x %s\n", - SysPort, cmd, arg, Modem?"Modem":"tty") ; - - if ( SysPort >= RIO_PORTS ) { - rio_dprintk (RIO_DEBUG_TTY, "Bad port number %d\n", SysPort); + register struct Port *PortP; + register struct ttystatics *tp; + int current; + int ParamSemIncremented = 0; + int old_oflag, old_cflag, old_iflag, changed, oldcook; + int i; + unsigned char sio_regs[5]; /* Here be magic */ + short vpix_cflag; + short divisor; + int baud; + uint SysPort = rio_minor(tty); + int Modem = rio_ismodem(tty); + int ioctl_processed; + + rio_dprintk(RIO_DEBUG_TTY, "port ioctl SysPort %d command 0x%x argument 0x%x %s\n", SysPort, cmd, arg, Modem ? "Modem" : "tty"); + + if (SysPort >= RIO_PORTS) { + rio_dprintk(RIO_DEBUG_TTY, "Bad port number %d\n", SysPort); return -ENXIO; } @@ -912,205 +889,195 @@ riotioctl(struct rio_info *p, struct tty_struct *tty, int cmd, caddr_t arg) PortP->Stat.IoctlCnt++; #endif - if ( PortP->State & RIO_DELETED ) { + if (PortP->State & RIO_DELETED) { rio_spin_unlock_irqrestore(&PortP->portSem, flags); return -EIO; } - if ( p->RIOHalted ) { - RIOClearUp( PortP ); + if (p->RIOHalted) { + RIOClearUp(PortP); rio_spin_unlock_irqrestore(&PortP->portSem, flags); return -EIO; } /* - ** Count ioctls for port statistics reporting - */ + ** Count ioctls for port statistics reporting + */ if (PortP->statsGather) PortP->ioctls++; /* - ** Specialix RIO Ioctl calls - */ + ** Specialix RIO Ioctl calls + */ switch (cmd) { - case TCRIOTRIAD: - if ( arg ) - PortP->State |= RIO_TRIAD_MODE; - else - PortP->State &= ~RIO_TRIAD_MODE; - /* - ** Normally, when istrip is set on a port, a config is - ** sent to the RTA instructing the CD1400 to do the - ** stripping. In TRIAD mode, the interrupt receive routine - ** must do the stripping instead, since it has to detect - ** an 8 bit function key sequence. If istrip is set with - ** TRIAD mode on(off), and 8 bit data is being read by - ** the port, the user then turns TRIAD mode off(on), the RTA - ** must be reconfigured (not) to do the stripping. - ** Hence we call RIOParam here. - */ - rio_spin_unlock_irqrestore(&PortP->portSem, flags); - RIOParam(PortP,CONFIG,Modem,OK_TO_SLEEP); - return 0; + case TCRIOTRIAD: + if (arg) + PortP->State |= RIO_TRIAD_MODE; + else + PortP->State &= ~RIO_TRIAD_MODE; + /* + ** Normally, when istrip is set on a port, a config is + ** sent to the RTA instructing the CD1400 to do the + ** stripping. In TRIAD mode, the interrupt receive routine + ** must do the stripping instead, since it has to detect + ** an 8 bit function key sequence. If istrip is set with + ** TRIAD mode on(off), and 8 bit data is being read by + ** the port, the user then turns TRIAD mode off(on), the RTA + ** must be reconfigured (not) to do the stripping. + ** Hence we call RIOParam here. + */ + rio_spin_unlock_irqrestore(&PortP->portSem, flags); + RIOParam(PortP, CONFIG, Modem, OK_TO_SLEEP); + return 0; - case TCRIOTSTATE: - rio_dprintk (RIO_DEBUG_TTY, "tbusy/tstop monitoring %sabled\n", - arg ? "en" : "dis"); - /* MonitorTstate = 0 ;*/ - rio_spin_unlock_irqrestore(&PortP->portSem, flags); - RIOParam(PortP, CONFIG, Modem, OK_TO_SLEEP); - return 0; + case TCRIOTSTATE: + rio_dprintk(RIO_DEBUG_TTY, "tbusy/tstop monitoring %sabled\n", arg ? "en" : "dis"); + /* MonitorTstate = 0 ; */ + rio_spin_unlock_irqrestore(&PortP->portSem, flags); + RIOParam(PortP, CONFIG, Modem, OK_TO_SLEEP); + return 0; - case TCRIOSTATE: /* current state of Modem input pins */ - rio_dprintk (RIO_DEBUG_TTY, "TCRIOSTATE\n"); - if (RIOPreemptiveCmd(p, PortP, MGET) == RIO_FAIL) - rio_dprintk (RIO_DEBUG_TTY, "TCRIOSTATE command failed\n"); - PortP->State |= RIO_BUSY; - current = PortP->ModemState; - if ( copyout((caddr_t)¤t, (int)arg, - sizeof(current))==COPYFAIL ) { - rio_dprintk (RIO_DEBUG_TTY, "Copyout failed\n"); - rio_spin_unlock_irqrestore(&PortP->portSem, flags); - pseterr(EFAULT); - } + case TCRIOSTATE: /* current state of Modem input pins */ + rio_dprintk(RIO_DEBUG_TTY, "TCRIOSTATE\n"); + if (RIOPreemptiveCmd(p, PortP, MGET) == RIO_FAIL) + rio_dprintk(RIO_DEBUG_TTY, "TCRIOSTATE command failed\n"); + PortP->State |= RIO_BUSY; + current = PortP->ModemState; + if (copyout((caddr_t) & current, (int) arg, sizeof(current)) == COPYFAIL) { + rio_dprintk(RIO_DEBUG_TTY, "Copyout failed\n"); rio_spin_unlock_irqrestore(&PortP->portSem, flags); - return 0; + pseterr(EFAULT); + } + rio_spin_unlock_irqrestore(&PortP->portSem, flags); + return 0; - case TCRIOMBIS: /* Set modem lines */ - case TCRIOMBIC: /* Clear modem lines */ - rio_dprintk (RIO_DEBUG_TTY, "TCRIOMBIS/TCRIOMBIC\n"); - if (cmd == TCRIOMBIS) { - uint state; - state = (uint)arg; - PortP->ModemState |= (ushort)state; - PortP->ModemLines = (ulong) arg; - if (RIOPreemptiveCmd(p, PortP, MBIS) == RIO_FAIL) - rio_dprintk (RIO_DEBUG_TTY, - "TCRIOMBIS command failed\n"); - } - else { - uint state; - - state = (uint)arg; - PortP->ModemState &= ~(ushort)state; - PortP->ModemLines = (ulong) arg; - if (RIOPreemptiveCmd(p, PortP, MBIC) == RIO_FAIL) - rio_dprintk (RIO_DEBUG_TTY, "TCRIOMBIC command failed\n"); - } - PortP->State |= RIO_BUSY; - rio_spin_unlock_irqrestore(&PortP->portSem, flags); - return 0; + case TCRIOMBIS: /* Set modem lines */ + case TCRIOMBIC: /* Clear modem lines */ + rio_dprintk(RIO_DEBUG_TTY, "TCRIOMBIS/TCRIOMBIC\n"); + if (cmd == TCRIOMBIS) { + uint state; + state = (uint) arg; + PortP->ModemState |= (ushort) state; + PortP->ModemLines = (ulong) arg; + if (RIOPreemptiveCmd(p, PortP, MBIS) == RIO_FAIL) + rio_dprintk(RIO_DEBUG_TTY, "TCRIOMBIS command failed\n"); + } else { + uint state; - case TCRIOXPON: /* set Xprint ON string */ - rio_dprintk (RIO_DEBUG_TTY, "TCRIOXPON\n"); - if ( copyin((int)arg, (caddr_t)PortP->Xprint.XpOn, - MAX_XP_CTRL_LEN)==COPYFAIL ) { - rio_dprintk (RIO_DEBUG_TTY, "Copyin failed\n"); - PortP->Xprint.XpOn[0] = '\0'; - rio_spin_unlock_irqrestore(&PortP->portSem, flags); - pseterr(EFAULT); - } - PortP->Xprint.XpOn[MAX_XP_CTRL_LEN-1] = '\0'; - PortP->Xprint.XpLen = strlen(PortP->Xprint.XpOn)+ - strlen(PortP->Xprint.XpOff); - rio_spin_unlock_irqrestore(&PortP->portSem, flags); - return 0; + state = (uint) arg; + PortP->ModemState &= ~(ushort) state; + PortP->ModemLines = (ulong) arg; + if (RIOPreemptiveCmd(p, PortP, MBIC) == RIO_FAIL) + rio_dprintk(RIO_DEBUG_TTY, "TCRIOMBIC command failed\n"); + } + PortP->State |= RIO_BUSY; + rio_spin_unlock_irqrestore(&PortP->portSem, flags); + return 0; - case TCRIOXPOFF: /* set Xprint OFF string */ - rio_dprintk (RIO_DEBUG_TTY, "TCRIOXPOFF\n"); - if ( copyin( (int)arg, (caddr_t)PortP->Xprint.XpOff, - MAX_XP_CTRL_LEN)==COPYFAIL ) { - rio_dprintk (RIO_DEBUG_TTY, "Copyin failed\n"); - PortP->Xprint.XpOff[0] = '\0'; - rio_spin_unlock_irqrestore(&PortP->portSem, flags); - pseterr(EFAULT); - } - PortP->Xprint.XpOff[MAX_XP_CTRL_LEN-1] = '\0'; - PortP->Xprint.XpLen = strlen(PortP->Xprint.XpOn)+ - strlen(PortP->Xprint.XpOff); + case TCRIOXPON: /* set Xprint ON string */ + rio_dprintk(RIO_DEBUG_TTY, "TCRIOXPON\n"); + if (copyin((int) arg, (caddr_t) PortP->Xprint.XpOn, MAX_XP_CTRL_LEN) == COPYFAIL) { + rio_dprintk(RIO_DEBUG_TTY, "Copyin failed\n"); + PortP->Xprint.XpOn[0] = '\0'; rio_spin_unlock_irqrestore(&PortP->portSem, flags); - return 0; + pseterr(EFAULT); + } + PortP->Xprint.XpOn[MAX_XP_CTRL_LEN - 1] = '\0'; + PortP->Xprint.XpLen = strlen(PortP->Xprint.XpOn) + strlen(PortP->Xprint.XpOff); + rio_spin_unlock_irqrestore(&PortP->portSem, flags); + return 0; - case TCRIOXPCPS: /* set Xprint CPS string */ - rio_dprintk (RIO_DEBUG_TTY, "TCRIOXPCPS\n"); - if ( (uint)arg > p->RIOConf.MaxXpCps || - (uint)arg < p->RIOConf.MinXpCps ) { - rio_dprintk (RIO_DEBUG_TTY, "%d CPS out of range\n",arg); - rio_spin_unlock_irqrestore(&PortP->portSem, flags); - pseterr(EINVAL); - return 0; - } - PortP->Xprint.XpCps = (uint)arg; + case TCRIOXPOFF: /* set Xprint OFF string */ + rio_dprintk(RIO_DEBUG_TTY, "TCRIOXPOFF\n"); + if (copyin((int) arg, (caddr_t) PortP->Xprint.XpOff, MAX_XP_CTRL_LEN) == COPYFAIL) { + rio_dprintk(RIO_DEBUG_TTY, "Copyin failed\n"); + PortP->Xprint.XpOff[0] = '\0'; rio_spin_unlock_irqrestore(&PortP->portSem, flags); - return 0; + pseterr(EFAULT); + } + PortP->Xprint.XpOff[MAX_XP_CTRL_LEN - 1] = '\0'; + PortP->Xprint.XpLen = strlen(PortP->Xprint.XpOn) + strlen(PortP->Xprint.XpOff); + rio_spin_unlock_irqrestore(&PortP->portSem, flags); + return 0; - case TCRIOXPRINT: - rio_dprintk (RIO_DEBUG_TTY, "TCRIOXPRINT\n"); - if ( copyout((caddr_t)&PortP->Xprint, (int)arg, - sizeof(struct Xprint))==COPYFAIL ) { - rio_spin_unlock_irqrestore(&PortP->portSem, flags); - pseterr(EFAULT); - } + case TCRIOXPCPS: /* set Xprint CPS string */ + rio_dprintk(RIO_DEBUG_TTY, "TCRIOXPCPS\n"); + if ((uint) arg > p->RIOConf.MaxXpCps || (uint) arg < p->RIOConf.MinXpCps) { + rio_dprintk(RIO_DEBUG_TTY, "%d CPS out of range\n", arg); rio_spin_unlock_irqrestore(&PortP->portSem, flags); + pseterr(EINVAL); return 0; + } + PortP->Xprint.XpCps = (uint) arg; + rio_spin_unlock_irqrestore(&PortP->portSem, flags); + return 0; - case TCRIOIXANYON: - rio_dprintk (RIO_DEBUG_TTY, "TCRIOIXANYON\n"); - PortP->Config |= RIO_IXANY; + case TCRIOXPRINT: + rio_dprintk(RIO_DEBUG_TTY, "TCRIOXPRINT\n"); + if (copyout((caddr_t) & PortP->Xprint, (int) arg, sizeof(struct Xprint)) == COPYFAIL) { rio_spin_unlock_irqrestore(&PortP->portSem, flags); - return 0; + pseterr(EFAULT); + } + rio_spin_unlock_irqrestore(&PortP->portSem, flags); + return 0; - case TCRIOIXANYOFF: - rio_dprintk (RIO_DEBUG_TTY, "TCRIOIXANYOFF\n"); - PortP->Config &= ~RIO_IXANY; - rio_spin_unlock_irqrestore(&PortP->portSem, flags); - return 0; + case TCRIOIXANYON: + rio_dprintk(RIO_DEBUG_TTY, "TCRIOIXANYON\n"); + PortP->Config |= RIO_IXANY; + rio_spin_unlock_irqrestore(&PortP->portSem, flags); + return 0; - case TCRIOIXONON: - rio_dprintk (RIO_DEBUG_TTY, "TCRIOIXONON\n"); - PortP->Config |= RIO_IXON; - rio_spin_unlock_irqrestore(&PortP->portSem, flags); - return 0; + case TCRIOIXANYOFF: + rio_dprintk(RIO_DEBUG_TTY, "TCRIOIXANYOFF\n"); + PortP->Config &= ~RIO_IXANY; + rio_spin_unlock_irqrestore(&PortP->portSem, flags); + return 0; - case TCRIOIXONOFF: - rio_dprintk (RIO_DEBUG_TTY, "TCRIOIXONOFF\n"); - PortP->Config &= ~RIO_IXON; - rio_spin_unlock_irqrestore(&PortP->portSem, flags); - return 0; + case TCRIOIXONON: + rio_dprintk(RIO_DEBUG_TTY, "TCRIOIXONON\n"); + PortP->Config |= RIO_IXON; + rio_spin_unlock_irqrestore(&PortP->portSem, flags); + return 0; + + case TCRIOIXONOFF: + rio_dprintk(RIO_DEBUG_TTY, "TCRIOIXONOFF\n"); + PortP->Config &= ~RIO_IXON; + rio_spin_unlock_irqrestore(&PortP->portSem, flags); + return 0; /* ** 15.10.1998 ARG - ESIL 0761 part fix ** Added support for CTS and RTS flow control ioctls : */ - case TCRIOCTSFLOWEN: - rio_dprintk (RIO_DEBUG_TTY, "TCRIOCTSFLOWEN\n"); - PortP->Config |= RIO_CTSFLOW; - rio_spin_unlock_irqrestore(&PortP->portSem, flags); - RIOParam(PortP,CONFIG,Modem,OK_TO_SLEEP); - return 0; + case TCRIOCTSFLOWEN: + rio_dprintk(RIO_DEBUG_TTY, "TCRIOCTSFLOWEN\n"); + PortP->Config |= RIO_CTSFLOW; + rio_spin_unlock_irqrestore(&PortP->portSem, flags); + RIOParam(PortP, CONFIG, Modem, OK_TO_SLEEP); + return 0; - case TCRIOCTSFLOWDIS: - rio_dprintk (RIO_DEBUG_TTY, "TCRIOCTSFLOWDIS\n"); - PortP->Config &= ~RIO_CTSFLOW; - rio_spin_unlock_irqrestore(&PortP->portSem, flags); - RIOParam(PortP,CONFIG,Modem,OK_TO_SLEEP); - return 0; + case TCRIOCTSFLOWDIS: + rio_dprintk(RIO_DEBUG_TTY, "TCRIOCTSFLOWDIS\n"); + PortP->Config &= ~RIO_CTSFLOW; + rio_spin_unlock_irqrestore(&PortP->portSem, flags); + RIOParam(PortP, CONFIG, Modem, OK_TO_SLEEP); + return 0; - case TCRIORTSFLOWEN: - rio_dprintk (RIO_DEBUG_TTY, "TCRIORTSFLOWEN\n"); - PortP->Config |= RIO_RTSFLOW; - rio_spin_unlock_irqrestore(&PortP->portSem, flags); - RIOParam(PortP,CONFIG,Modem,OK_TO_SLEEP); - return 0; + case TCRIORTSFLOWEN: + rio_dprintk(RIO_DEBUG_TTY, "TCRIORTSFLOWEN\n"); + PortP->Config |= RIO_RTSFLOW; + rio_spin_unlock_irqrestore(&PortP->portSem, flags); + RIOParam(PortP, CONFIG, Modem, OK_TO_SLEEP); + return 0; - case TCRIORTSFLOWDIS: - rio_dprintk (RIO_DEBUG_TTY, "TCRIORTSFLOWDIS\n"); - PortP->Config &= ~RIO_RTSFLOW; - rio_spin_unlock_irqrestore(&PortP->portSem, flags); - RIOParam(PortP,CONFIG,Modem,OK_TO_SLEEP); - return 0; + case TCRIORTSFLOWDIS: + rio_dprintk(RIO_DEBUG_TTY, "TCRIORTSFLOWDIS\n"); + PortP->Config &= ~RIO_RTSFLOW; + rio_spin_unlock_irqrestore(&PortP->portSem, flags); + RIOParam(PortP, CONFIG, Modem, OK_TO_SLEEP); + return 0; /* end ESIL 0761 part fix */ @@ -1119,35 +1086,35 @@ riotioctl(struct rio_info *p, struct tty_struct *tty, int cmd, caddr_t arg) /* Lynx IOCTLS */ switch (cmd) { - case TIOCSETP: - case TIOCSETN: - case OTIOCSETP: - case OTIOCSETN: - ioctl_processed++; - ttyseth(PortP, tp, (struct old_sgttyb *)arg); - break; - case TCSETA: - case TCSETAW: - case TCSETAF: - ioctl_processed++; - rio_dprintk (RIO_DEBUG_TTY, "NON POSIX ioctl\n"); - ttyseth_pv(PortP, tp, (struct termios *)arg, 0); - break; - case TCSETAP: /* posix tcsetattr() */ - case TCSETAWP: /* posix tcsetattr() */ - case TCSETAFP: /* posix tcsetattr() */ - rio_dprintk (RIO_DEBUG_TTY, "NON POSIX SYSV ioctl\n"); - ttyseth_pv(PortP, tp, (struct termios *)arg, 1); - ioctl_processed++; - break; + case TIOCSETP: + case TIOCSETN: + case OTIOCSETP: + case OTIOCSETN: + ioctl_processed++; + ttyseth(PortP, tp, (struct old_sgttyb *) arg); + break; + case TCSETA: + case TCSETAW: + case TCSETAF: + ioctl_processed++; + rio_dprintk(RIO_DEBUG_TTY, "NON POSIX ioctl\n"); + ttyseth_pv(PortP, tp, (struct termios *) arg, 0); + break; + case TCSETAP: /* posix tcsetattr() */ + case TCSETAWP: /* posix tcsetattr() */ + case TCSETAFP: /* posix tcsetattr() */ + rio_dprintk(RIO_DEBUG_TTY, "NON POSIX SYSV ioctl\n"); + ttyseth_pv(PortP, tp, (struct termios *) arg, 1); + ioctl_processed++; + break; } /* - ** If its any of the commands that require the port to be in the - ** non-busy state wait until all output has drained - */ + ** If its any of the commands that require the port to be in the + ** non-busy state wait until all output has drained + */ if (!ioctl_processed) - switch(cmd) { + switch (cmd) { case TCSETAW: case TCSETAF: case TCSETA: @@ -1171,29 +1138,29 @@ riotioctl(struct rio_info *p, struct tty_struct *tty, int cmd, caddr_t arg) #endif case TIOCSETD: case TIOCSETN: - rio_dprintk (RIO_DEBUG_TTY, "wait for non-BUSY, semaphore set\n"); + rio_dprintk(RIO_DEBUG_TTY, "wait for non-BUSY, semaphore set\n"); /* - ** Wait for drain here, at least as far as the double buffer - ** being empty. - */ + ** Wait for drain here, at least as far as the double buffer + ** being empty. + */ /* XXX Does the above comment mean that this has still to be implemented? -- REW */ /* XXX Is the locking OK together with locking - in txenable? (Deadlock?) -- REW */ - - RIOTxEnable((char *)PortP); + in txenable? (Deadlock?) -- REW */ + + RIOTxEnable((char *) PortP); break; default: break; - } + } old_cflag = tp->tm.c_cflag; old_iflag = tp->tm.c_iflag; old_oflag = tp->tm.c_oflag; oldcook = PortP->CookMode; - if ( p->RIOHalted ) { - RIOClearUp( PortP ); + if (p->RIOHalted) { + RIOClearUp(PortP); rio_spin_unlock_irqrestore(&PortP->portSem, flags); pseterr(EIO); return 0; @@ -1202,10 +1169,10 @@ riotioctl(struct rio_info *p, struct tty_struct *tty, int cmd, caddr_t arg) PortP->FlushCmdBodge = 0; /* - ** If the port is locked, and it is reconfigured, we want - ** to restore the state of the tty structure so the change is NOT - ** made. - */ + ** If the port is locked, and it is reconfigured, we want + ** to restore the state of the tty structure so the change is NOT + ** made. + */ if (PortP->Lock) { tp->tm.c_iflag = PortP->StoredTty.iflag; tp->tm.c_oflag = PortP->StoredTty.oflag; @@ -1214,13 +1181,12 @@ riotioctl(struct rio_info *p, struct tty_struct *tty, int cmd, caddr_t arg) tp->tm.c_line = PortP->StoredTty.line; for (i = 0; i < NCC + 1; i++) tp->tm.c_cc[i] = PortP->StoredTty.cc[i]; - } - else { + } else { /* - ** If the port is set to store the parameters, and it is - ** reconfigured, we want to save the current tty struct so it - ** may be restored on the next open. - */ + ** If the port is set to store the parameters, and it is + ** reconfigured, we want to save the current tty struct so it + ** may be restored on the next open. + */ if (PortP->Store) { PortP->StoredTty.iflag = tp->tm.c_iflag; PortP->StoredTty.oflag = tp->tm.c_oflag; @@ -1232,44 +1198,41 @@ riotioctl(struct rio_info *p, struct tty_struct *tty, int cmd, caddr_t arg) } } - changed = (tp->tm.c_cflag != old_cflag) || - (tp->tm.c_iflag != old_iflag) || - (tp->tm.c_oflag != old_oflag); + changed = (tp->tm.c_cflag != old_cflag) || (tp->tm.c_iflag != old_iflag) || (tp->tm.c_oflag != old_oflag); PortP->CookMode = RIOCookMode(tp); /* Set new cooking mode */ - rio_dprintk (RIO_DEBUG_TTY, "RIOIoctl changed %d newcook %d oldcook %d\n", - changed,PortP->CookMode,oldcook); + rio_dprintk(RIO_DEBUG_TTY, "RIOIoctl changed %d newcook %d oldcook %d\n", changed, PortP->CookMode, oldcook); #ifdef MODEM_SUPPORT /* - ** kludge to force CARR_ON if CLOCAL set - */ - if ((tp->tm.c_cflag & CLOCAL) || (PortP->ModemState & MSVR1_CD)) { + ** kludge to force CARR_ON if CLOCAL set + */ + if ((tp->tm.c_cflag & CLOCAL) || (PortP->ModemState & MSVR1_CD)) { tp->tm.c_state |= CARR_ON; - wakeup ((caddr_t)&tp->tm.c_canq); + wakeup((caddr_t) & tp->tm.c_canq); } #endif - if ( p->RIOHalted ) { - RIOClearUp( PortP ); + if (p->RIOHalted) { + RIOClearUp(PortP); rio_spin_unlock_irqrestore(&PortP->portSem, flags); pseterr(EIO); return 0; } /* - ** Re-configure if modes or cooking have changed - */ + ** Re-configure if modes or cooking have changed + */ if (changed || oldcook != PortP->CookMode || (ioctl_processed)) { rio_spin_unlock_irqrestore(&PortP->portSem, flags); - rio_dprintk (RIO_DEBUG_TTY, "Ioctl changing the PORT settings\n"); - RIOParam(PortP,CONFIG,Modem,OK_TO_SLEEP); + rio_dprintk(RIO_DEBUG_TTY, "Ioctl changing the PORT settings\n"); + RIOParam(PortP, CONFIG, Modem, OK_TO_SLEEP); rio_spin_lock_irqsave(&PortP->portSem, flags); } if (p->RIOHalted) { rio_spin_unlock_irqrestore(&PortP->portSem, flags); - RIOClearUp( PortP ); + RIOClearUp(PortP); pseterr(EIO); return 0; } @@ -1280,36 +1243,32 @@ riotioctl(struct rio_info *p, struct tty_struct *tty, int cmd, caddr_t arg) /* ttyseth -- set hardware dependent tty settings */ -void -ttyseth(PortP, s, sg) -struct Port * PortP; -struct ttystatics * s; +void ttyseth(PortP, s, sg) +struct Port *PortP; +struct ttystatics *s; struct old_sgttyb *sg; { - struct old_sgttyb * tsg; + struct old_sgttyb *tsg; struct termios *tp = &s->tm; tsg = &s->sg; - if (sg->sg_flags & (EVENP|ODDP)) { + if (sg->sg_flags & (EVENP | ODDP)) { tp->c_cflag &= PARENB; if (sg->sg_flags & EVENP) { if (sg->sg_flags & ODDP) { tp->c_cflag &= V_CS7; tp->c_cflag &= ~PARENB; - } - else { + } else { tp->c_cflag &= V_CS7; tp->c_cflag &= PARENB; tp->c_cflag &= PARODD; } - } - else if (sg->sg_flags & ODDP) { + } else if (sg->sg_flags & ODDP) { tp->c_cflag &= V_CS7; tp->c_cflag &= PARENB; tp->c_cflag &= PARODD; - } - else { + } else { tp->c_cflag &= V_CS7; tp->c_cflag &= PARENB; } @@ -1320,16 +1279,16 @@ struct old_sgttyb *sg; * I will have to use separate sets of flags to store them in the * Port structure. */ - if ( !sg->sg_ospeed ) + if (!sg->sg_ospeed) sg->sg_ospeed = sg->sg_ispeed; else sg->sg_ispeed = sg->sg_ospeed; - if (sg->sg_ispeed > V_EXTB ) + if (sg->sg_ispeed > V_EXTB) sg->sg_ispeed = V_EXTB; if (sg->sg_ispeed < V_B0) sg->sg_ispeed = V_B0; *tsg = *sg; - tp->c_cflag = (tp->c_cflag & ~V_CBAUD) | conv_bv[(int)sg->sg_ispeed]; + tp->c_cflag = (tp->c_cflag & ~V_CBAUD) | conv_bv[(int) sg->sg_ispeed]; } /* @@ -1338,36 +1297,33 @@ struct old_sgttyb *sg; sysv = 0 => (POSIX): struct termios *sg sysv != 0 => (System V): struct termio *sg */ -static void -ttyseth_pv(PortP, s, sg, sysv) +static void ttyseth_pv(PortP, s, sg, sysv) struct Port *PortP; struct ttystatics *s; struct termios *sg; int sysv; { - int speed; - unsigned char csize; - unsigned char cread; - unsigned int lcr_flags; - int ps; - - if (sysv) { - /* sg points to a System V termio structure */ - csize = ((struct termio *)sg)->c_cflag & CSIZE; - cread = ((struct termio *)sg)->c_cflag & CREAD; - speed = conv_vb[((struct termio *)sg)->c_cflag & V_CBAUD]; - } - else { - /* sg points to a POSIX termios structure */ - csize = sg->c_cflag & CSIZE; - cread = sg->c_cflag & CREAD; - speed = conv_vb[sg->c_cflag & V_CBAUD]; - } - if (s->sg.sg_ispeed != speed || s->sg.sg_ospeed != speed) { - s->sg.sg_ispeed = speed; - s->sg.sg_ospeed = speed; - s->tm.c_cflag = (s->tm.c_cflag & ~V_CBAUD) | - conv_bv[(int)s->sg.sg_ispeed]; - } + int speed; + unsigned char csize; + unsigned char cread; + unsigned int lcr_flags; + int ps; + + if (sysv) { + /* sg points to a System V termio structure */ + csize = ((struct termio *) sg)->c_cflag & CSIZE; + cread = ((struct termio *) sg)->c_cflag & CREAD; + speed = conv_vb[((struct termio *) sg)->c_cflag & V_CBAUD]; + } else { + /* sg points to a POSIX termios structure */ + csize = sg->c_cflag & CSIZE; + cread = sg->c_cflag & CREAD; + speed = conv_vb[sg->c_cflag & V_CBAUD]; + } + if (s->sg.sg_ispeed != speed || s->sg.sg_ospeed != speed) { + s->sg.sg_ispeed = speed; + s->sg.sg_ospeed = speed; + s->tm.c_cflag = (s->tm.c_cflag & ~V_CBAUD) | conv_bv[(int) s->sg.sg_ispeed]; + } } #endif diff --git a/drivers/char/rio/riotypes.h b/drivers/char/rio/riotypes.h index 1c7c42c638f0..9b67e2468bec 100644 --- a/drivers/char/rio/riotypes.h +++ b/drivers/char/rio/riotypes.h @@ -89,47 +89,46 @@ typedef RIO_POINTER u_short_ptr; typedef RIO_POINTER ushort_ptr; #endif -#else /* not INKERNEL */ -typedef unsigned char BYTE; -typedef unsigned short WORD; -typedef unsigned long DWORD; -typedef short NUMBER; -typedef short *NUMBER_ptr; -typedef unsigned short *WORD_ptr; -typedef unsigned char *BYTE_ptr; -typedef unsigned char uchar ; -typedef unsigned short ushort ; -typedef unsigned int uint ; -typedef unsigned long ulong ; -typedef unsigned char u_char ; -typedef unsigned short u_short ; -typedef unsigned int u_int ; -typedef unsigned long u_long ; -typedef unsigned short ERROR ; -typedef unsigned long ID ; -typedef char *char_ptr; -typedef Channel *Channel_ptr; +#else /* not INKERNEL */ +typedef unsigned char BYTE; +typedef unsigned short WORD; +typedef unsigned long DWORD; +typedef short NUMBER; +typedef short *NUMBER_ptr; +typedef unsigned short *WORD_ptr; +typedef unsigned char *BYTE_ptr; +typedef unsigned char uchar; +typedef unsigned short ushort; +typedef unsigned int uint; +typedef unsigned long ulong; +typedef unsigned char u_char; +typedef unsigned short u_short; +typedef unsigned int u_int; +typedef unsigned long u_long; +typedef unsigned short ERROR; +typedef unsigned long ID; +typedef char *char_ptr; +typedef Channel *Channel_ptr; typedef struct FREE_LIST *FREE_LIST_ptr; typedef struct FREE_LIST **FREE_LIST_ptr_ptr; -typedef struct LPB *LPB_ptr; -typedef struct Process *Process_ptr; -typedef struct PHB *PHB_ptr; -typedef struct PKT *PKT_ptr; -typedef struct PKT **PKT_ptr_ptr; -typedef struct Q_BUF *Q_BUF_ptr; -typedef struct Q_BUF **Q_BUF_ptr_ptr; +typedef struct LPB *LPB_ptr; +typedef struct Process *Process_ptr; +typedef struct PHB *PHB_ptr; +typedef struct PKT *PKT_ptr; +typedef struct PKT **PKT_ptr_ptr; +typedef struct Q_BUF *Q_BUF_ptr; +typedef struct Q_BUF **Q_BUF_ptr_ptr; typedef struct ROUTE_STR *ROUTE_STR_ptr; -typedef struct RUP *RUP_ptr; -typedef short *short_ptr; -typedef u_short *u_short_ptr; -typedef ushort *ushort_ptr; -typedef struct PKT PKT; -typedef struct LPB LPB; -typedef struct RUP RUP; +typedef struct RUP *RUP_ptr; +typedef short *short_ptr; +typedef u_short *u_short_ptr; +typedef ushort *ushort_ptr; +typedef struct PKT PKT; +typedef struct LPB LPB; +typedef struct RUP RUP; #endif -#endif /* __riotypes__ */ +#endif /* __riotypes__ */ /*********** end of file ***********/ - diff --git a/drivers/char/rio/riowinif.h b/drivers/char/rio/riowinif.h index 18a4f147edc2..f802d7593b80 100644 --- a/drivers/char/rio/riowinif.h +++ b/drivers/char/rio/riowinif.h @@ -40,7 +40,7 @@ */ -#ifndef _riowinif_h /* If RIOWINDIF.H not already defined */ +#ifndef _riowinif_h /* If RIOWINDIF.H not already defined */ #define _riowinif_h 1 /***************************************************************************** @@ -60,42 +60,41 @@ /* The PARM_MAP structure defines global values relating to the Host Card / RTA and is the main structure from which all other structures are referenced. */ -typedef struct _PARM_MAP -{ - _u16 phb_ptr; /* 0x00 Pointer to the PHB array */ - _u16 phb_num_ptr; /* 0x02 Ptr to Number of PHB's */ - _u16 free_list; /* 0x04 Free List pointer */ - _u16 free_list_end; /* 0x06 Free List End pointer */ - _u16 q_free_list_ptr; /* 0x08 Ptr to Q_BUF variable */ - _u16 unit_id_ptr; /* 0x0A Unit Id */ - _u16 link_str_ptr; /* 0x0C Link Structure Array */ - _u16 bootloader_1; /* 0x0E 1st Stage Boot Loader */ - _u16 bootloader_2; /* 0x10 2nd Stage Boot Loader */ - _u16 port_route_map_ptr; /* 0x12 Port Route Map */ - _u16 route_ptr; /* 0x14 Route Map */ - _u16 map_present; /* 0x16 Route Map present */ - _u16 pkt_num; /* 0x18 Total number of packets */ - _u16 q_num; /* 0x1A Total number of Q packets */ - _u16 buffers_per_port; /* 0x1C Number of buffers per port */ - _u16 heap_size; /* 0x1E Initial size of heap */ - _u16 heap_left; /* 0x20 Current Heap left */ - _u16 error; /* 0x22 Error code */ - _u16 tx_max; /* 0x24 Max number of tx pkts per phb */ - _u16 rx_max; /* 0x26 Max number of rx pkts per phb */ - _u16 rx_limit; /* 0x28 For high / low watermarks */ - _u16 links; /* 0x2A Links to use */ - _u16 timer; /* 0x2C Interrupts per second */ - _u16 rups; /* 0x2E Pointer to the RUPs */ - _u16 max_phb; /* 0x30 Mostly for debugging */ - _u16 living; /* 0x32 Just increments!! */ - _u16 init_done; /* 0x34 Initialisation over */ - _u16 booting_link; /* 0x36 */ - _u16 idle_count; /* 0x38 Idle time counter */ - _u16 busy_count; /* 0x3A Busy counter */ - _u16 idle_control; /* 0x3C Control Idle Process */ - _u16 tx_intr; /* 0x3E TX interrupt pending */ - _u16 rx_intr; /* 0x40 RX interrupt pending */ - _u16 rup_intr; /* 0x42 RUP interrupt pending */ +typedef struct _PARM_MAP { + _u16 phb_ptr; /* 0x00 Pointer to the PHB array */ + _u16 phb_num_ptr; /* 0x02 Ptr to Number of PHB's */ + _u16 free_list; /* 0x04 Free List pointer */ + _u16 free_list_end; /* 0x06 Free List End pointer */ + _u16 q_free_list_ptr; /* 0x08 Ptr to Q_BUF variable */ + _u16 unit_id_ptr; /* 0x0A Unit Id */ + _u16 link_str_ptr; /* 0x0C Link Structure Array */ + _u16 bootloader_1; /* 0x0E 1st Stage Boot Loader */ + _u16 bootloader_2; /* 0x10 2nd Stage Boot Loader */ + _u16 port_route_map_ptr; /* 0x12 Port Route Map */ + _u16 route_ptr; /* 0x14 Route Map */ + _u16 map_present; /* 0x16 Route Map present */ + _u16 pkt_num; /* 0x18 Total number of packets */ + _u16 q_num; /* 0x1A Total number of Q packets */ + _u16 buffers_per_port; /* 0x1C Number of buffers per port */ + _u16 heap_size; /* 0x1E Initial size of heap */ + _u16 heap_left; /* 0x20 Current Heap left */ + _u16 error; /* 0x22 Error code */ + _u16 tx_max; /* 0x24 Max number of tx pkts per phb */ + _u16 rx_max; /* 0x26 Max number of rx pkts per phb */ + _u16 rx_limit; /* 0x28 For high / low watermarks */ + _u16 links; /* 0x2A Links to use */ + _u16 timer; /* 0x2C Interrupts per second */ + _u16 rups; /* 0x2E Pointer to the RUPs */ + _u16 max_phb; /* 0x30 Mostly for debugging */ + _u16 living; /* 0x32 Just increments!! */ + _u16 init_done; /* 0x34 Initialisation over */ + _u16 booting_link; /* 0x36 */ + _u16 idle_count; /* 0x38 Idle time counter */ + _u16 busy_count; /* 0x3A Busy counter */ + _u16 idle_control; /* 0x3C Control Idle Process */ + _u16 tx_intr; /* 0x3E TX interrupt pending */ + _u16 rx_intr; /* 0x40 RX interrupt pending */ + _u16 rup_intr; /* 0x42 RUP interrupt pending */ } PARM_MAP; @@ -184,45 +183,44 @@ typedef struct _PARM_MAP attached to the system and there is normally an array of MAX_RUPS (=16) structures in a host card, defined by PARM_MAP->rup. */ -typedef struct _RUP -{ - _u16 txpkt; /* 0x00 Outgoing packet */ - _u16 rxpkt; /* 0x02 ncoming packet */ - _u16 link; /* 0x04 Which link to send packet down ? */ - _u8 rup_dest_unit[2]; /* 0x06 Destination Unit */ - _u16 handshake; /* 0x08 Handshaking */ - _u16 timeout; /* 0x0A Timeout */ - _u16 status; /* 0x0C Status */ - _u16 txcontrol; /* 0x0E Transmit control */ - _u16 rxcontrol; /* 0x10 Receive control */ +typedef struct _RUP { + _u16 txpkt; /* 0x00 Outgoing packet */ + _u16 rxpkt; /* 0x02 ncoming packet */ + _u16 link; /* 0x04 Which link to send packet down ? */ + _u8 rup_dest_unit[2]; /* 0x06 Destination Unit */ + _u16 handshake; /* 0x08 Handshaking */ + _u16 timeout; /* 0x0A Timeout */ + _u16 status; /* 0x0C Status */ + _u16 txcontrol; /* 0x0E Transmit control */ + _u16 rxcontrol; /* 0x10 Receive control */ } RUP; /* Same thing again, but defined as offsets... */ -#define RUP_txpkt 0x00 /* 0x00 Outgoing packet */ -#define RUP_rxpkt 0x02 /* 0x02 Incoming packet */ -#define RUP_link 0x04 /* 0x04 Which link to send packet down ? */ -#define RUP_rup_dest_unit 0x06 /* 0x06 Destination Unit */ -#define RUP_handshake 0x08 /* 0x08 Handshaking */ -#define RUP_timeout 0x0A /* 0x0A Timeout */ -#define RUP_status 0x0C /* 0x0C Status */ -#define RUP_txcontrol 0x0E /* 0x0E Transmit control */ -#define RUP_rxcontrol 0x10 /* 0x10 Receive control */ -#define sizeof_RUP 0x12 /* structure size = 0x12 */ +#define RUP_txpkt 0x00 /* 0x00 Outgoing packet */ +#define RUP_rxpkt 0x02 /* 0x02 Incoming packet */ +#define RUP_link 0x04 /* 0x04 Which link to send packet down ? */ +#define RUP_rup_dest_unit 0x06 /* 0x06 Destination Unit */ +#define RUP_handshake 0x08 /* 0x08 Handshaking */ +#define RUP_timeout 0x0A /* 0x0A Timeout */ +#define RUP_status 0x0C /* 0x0C Status */ +#define RUP_txcontrol 0x0E /* 0x0E Transmit control */ +#define RUP_rxcontrol 0x10 /* 0x10 Receive control */ +#define sizeof_RUP 0x12 /* structure size = 0x12 */ #define MAX_RUP 16 /* RUP.txcontrol definitions... */ -#define TX_RUP_INACTIVE 0 /* Nothing to transmit */ -#define TX_PACKET_READY 1 /* Transmit packet ready */ -#define TX_LOCK_RUP 2 /* Transmit side locked */ +#define TX_RUP_INACTIVE 0 /* Nothing to transmit */ +#define TX_PACKET_READY 1 /* Transmit packet ready */ +#define TX_LOCK_RUP 2 /* Transmit side locked */ /* RUP.txcontrol definitions... */ -#define RX_RUP_INACTIVE 0 /* Nothing received */ -#define RX_PACKET_READY 1 /* Packet received */ +#define RX_RUP_INACTIVE 0 /* Nothing received */ +#define RX_PACKET_READY 1 /* Packet received */ -#define RUP_NO_OWNER 0xFF /* RUP not owned by any process */ +#define RUP_NO_OWNER 0xFF /* RUP not owned by any process */ /***************************************************************************** ********************************** *********************************** @@ -234,52 +232,51 @@ typedef struct _RUP to the system and there is normally an array of MAX_PHBS (=128) structures in a host card, defined by PARM_MAP->phb_ptr and PARM_MAP->phb_num_ptr. */ -typedef struct _PHB -{ - _u16 source; /* 0x00 Location of the PHB in the host card */ - _u16 handshake; /* 0x02 Used to manage receive packet flow control */ - _u16 status; /* 0x04 Internal port transmit/receive status */ - _u16 timeout; /* 0x06 Time period to wait for an ACK */ - _u16 link; /* 0x08 The host link associated with the PHB */ - _u16 destination; /* 0x0A Location of the remote port on the network */ - - _u16 tx_start; /* 0x0C first entry in the packet array for transmit packets */ - _u16 tx_end; /* 0x0E last entry in the packet array for transmit packets */ - _u16 tx_add; /* 0x10 position in the packet array for new transmit packets */ - _u16 tx_remove; /* 0x12 current position in the packet pointer array */ - - _u16 rx_start; /* 0x14 first entry in the packet array for receive packets */ - _u16 rx_end; /* 0x16 last entry in the packet array for receive packets */ - _u16 rx_add; /* 0x18 position in the packet array for new receive packets */ - _u16 rx_remove; /* 0x1A current position in the packet pointer array */ +typedef struct _PHB { + _u16 source; /* 0x00 Location of the PHB in the host card */ + _u16 handshake; /* 0x02 Used to manage receive packet flow control */ + _u16 status; /* 0x04 Internal port transmit/receive status */ + _u16 timeout; /* 0x06 Time period to wait for an ACK */ + _u16 link; /* 0x08 The host link associated with the PHB */ + _u16 destination; /* 0x0A Location of the remote port on the network */ + + _u16 tx_start; /* 0x0C first entry in the packet array for transmit packets */ + _u16 tx_end; /* 0x0E last entry in the packet array for transmit packets */ + _u16 tx_add; /* 0x10 position in the packet array for new transmit packets */ + _u16 tx_remove; /* 0x12 current position in the packet pointer array */ + + _u16 rx_start; /* 0x14 first entry in the packet array for receive packets */ + _u16 rx_end; /* 0x16 last entry in the packet array for receive packets */ + _u16 rx_add; /* 0x18 position in the packet array for new receive packets */ + _u16 rx_remove; /* 0x1A current position in the packet pointer array */ } PHB; /* Same thing again, but defined as offsets... */ -#define PHB_source 0x00 /* 0x00 Location of the PHB in the host card */ -#define PHB_handshake 0x02 /* 0x02 Used to manage receive packet flow control */ -#define PHB_status 0x04 /* 0x04 Internal port transmit/receive status */ -#define PHB_timeout 0x06 /* 0x06 Time period to wait for an ACK */ -#define PHB_link 0x08 /* 0x08 The host link associated with the PHB */ -#define PHB_destination 0x0A /* 0x0A Location of the remote port on the network */ -#define PHB_tx_start 0x0C /* 0x0C first entry in the packet array for transmit packets */ -#define PHB_tx_end 0x0E /* 0x0E last entry in the packet array for transmit packets */ -#define PHB_tx_add 0x10 /* 0x10 position in the packet array for new transmit packets */ -#define PHB_tx_remove 0x12 /* 0x12 current position in the packet pointer array */ -#define PHB_rx_start 0x14 /* 0x14 first entry in the packet array for receive packets */ -#define PHB_rx_end 0x16 /* 0x16 last entry in the packet array for receive packets */ -#define PHB_rx_add 0x18 /* 0x18 position in the packet array for new receive packets */ -#define PHB_rx_remove 0x1A /* 0x1A current position in the packet pointer array */ -#define sizeof_PHB 0x1C /* structure size = 0x1C */ +#define PHB_source 0x00 /* 0x00 Location of the PHB in the host card */ +#define PHB_handshake 0x02 /* 0x02 Used to manage receive packet flow control */ +#define PHB_status 0x04 /* 0x04 Internal port transmit/receive status */ +#define PHB_timeout 0x06 /* 0x06 Time period to wait for an ACK */ +#define PHB_link 0x08 /* 0x08 The host link associated with the PHB */ +#define PHB_destination 0x0A /* 0x0A Location of the remote port on the network */ +#define PHB_tx_start 0x0C /* 0x0C first entry in the packet array for transmit packets */ +#define PHB_tx_end 0x0E /* 0x0E last entry in the packet array for transmit packets */ +#define PHB_tx_add 0x10 /* 0x10 position in the packet array for new transmit packets */ +#define PHB_tx_remove 0x12 /* 0x12 current position in the packet pointer array */ +#define PHB_rx_start 0x14 /* 0x14 first entry in the packet array for receive packets */ +#define PHB_rx_end 0x16 /* 0x16 last entry in the packet array for receive packets */ +#define PHB_rx_add 0x18 /* 0x18 position in the packet array for new receive packets */ +#define PHB_rx_remove 0x1A /* 0x1A current position in the packet pointer array */ +#define sizeof_PHB 0x1C /* structure size = 0x1C */ /* PHB.handshake definitions... */ -#define PHB_HANDSHAKE_SET 0x0001 /* Set by LRT */ -#define PHB_HANDSHAKE_RESET 0x0002 /* Set by ISR / driver */ +#define PHB_HANDSHAKE_SET 0x0001 /* Set by LRT */ +#define PHB_HANDSHAKE_RESET 0x0002 /* Set by ISR / driver */ #define PHB_HANDSHAKE_FLAGS (PHB_HANDSHAKE_RESET|PHB_HANDSHAKE_SET) /* Reset by ltt */ -#define MAX_PHB 128 /* range 0-127 */ +#define MAX_PHB 128 /* range 0-127 */ /***************************************************************************** ********************************** *********************************** @@ -291,86 +288,85 @@ typedef struct _PHB and there is normally an array of MAX_LINKS (=4) structures in a host card, defined by PARM_MAP->link_str_ptr. */ -typedef struct _LPB -{ - _u16 link_number; /* 0x00 Link Number */ - _u16 in_ch; /* 0x02 Link In Channel */ - _u16 out_ch; /* 0x04 Link Out Channel */ - _u8 attached_serial[4]; /* 0x06 Attached serial number */ - _u8 attached_host_serial[4];/* 0x0A Serial number of Host who booted other end */ - _u16 descheduled; /* 0x0E Currently Descheduled */ - _u16 state; /* 0x10 Current state */ - _u16 send_poll; /* 0x12 Send a Poll Packet */ - _u16 ltt_p; /* 0x14 Process Descriptor */ - _u16 lrt_p; /* 0x16 Process Descriptor */ - _u16 lrt_status; /* 0x18 Current lrt status */ - _u16 ltt_status; /* 0x1A Current ltt status */ - _u16 timeout; /* 0x1C Timeout value */ - _u16 topology; /* 0x1E Topology bits */ - _u16 mon_ltt; /* 0x20 */ - _u16 mon_lrt; /* 0x22 */ - _u16 num_pkts; /* 0x24 */ - _u16 add_packet_list; /* 0x26 Add packets to here */ - _u16 remove_packet_list; /* 0x28 Send packets from here */ - - _u16 lrt_fail_chan; /* 0x2A Lrt's failure channel */ - _u16 ltt_fail_chan; /* 0x2C Ltt's failure channel */ - - RUP rup; /* 0x2E RUP structure for HOST to driver comms */ - RUP link_rup; /* 0x40 RUP for the link (POLL, topology etc.) */ - _u16 attached_link; /* 0x52 Number of attached link */ - _u16 csum_errors; /* 0x54 csum errors */ - _u16 num_disconnects; /* 0x56 number of disconnects */ - _u16 num_sync_rcvd; /* 0x58 # sync's received */ - _u16 num_sync_rqst; /* 0x5A # sync requests */ - _u16 num_tx; /* 0x5C Num pkts sent */ - _u16 num_rx; /* 0x5E Num pkts received */ - _u16 module_attached; /* 0x60 Module tpyes of attached */ - _u16 led_timeout; /* 0x62 LED timeout */ - _u16 first_port; /* 0x64 First port to service */ - _u16 last_port; /* 0x66 Last port to service */ +typedef struct _LPB { + _u16 link_number; /* 0x00 Link Number */ + _u16 in_ch; /* 0x02 Link In Channel */ + _u16 out_ch; /* 0x04 Link Out Channel */ + _u8 attached_serial[4]; /* 0x06 Attached serial number */ + _u8 attached_host_serial[4]; /* 0x0A Serial number of Host who booted other end */ + _u16 descheduled; /* 0x0E Currently Descheduled */ + _u16 state; /* 0x10 Current state */ + _u16 send_poll; /* 0x12 Send a Poll Packet */ + _u16 ltt_p; /* 0x14 Process Descriptor */ + _u16 lrt_p; /* 0x16 Process Descriptor */ + _u16 lrt_status; /* 0x18 Current lrt status */ + _u16 ltt_status; /* 0x1A Current ltt status */ + _u16 timeout; /* 0x1C Timeout value */ + _u16 topology; /* 0x1E Topology bits */ + _u16 mon_ltt; /* 0x20 */ + _u16 mon_lrt; /* 0x22 */ + _u16 num_pkts; /* 0x24 */ + _u16 add_packet_list; /* 0x26 Add packets to here */ + _u16 remove_packet_list; /* 0x28 Send packets from here */ + + _u16 lrt_fail_chan; /* 0x2A Lrt's failure channel */ + _u16 ltt_fail_chan; /* 0x2C Ltt's failure channel */ + + RUP rup; /* 0x2E RUP structure for HOST to driver comms */ + RUP link_rup; /* 0x40 RUP for the link (POLL, topology etc.) */ + _u16 attached_link; /* 0x52 Number of attached link */ + _u16 csum_errors; /* 0x54 csum errors */ + _u16 num_disconnects; /* 0x56 number of disconnects */ + _u16 num_sync_rcvd; /* 0x58 # sync's received */ + _u16 num_sync_rqst; /* 0x5A # sync requests */ + _u16 num_tx; /* 0x5C Num pkts sent */ + _u16 num_rx; /* 0x5E Num pkts received */ + _u16 module_attached; /* 0x60 Module tpyes of attached */ + _u16 led_timeout; /* 0x62 LED timeout */ + _u16 first_port; /* 0x64 First port to service */ + _u16 last_port; /* 0x66 Last port to service */ } LPB; /* Same thing again, but defined as offsets... */ -#define LPB_link_number 0x00 /* 0x00 Link Number */ -#define LPB_in_ch 0x02 /* 0x02 Link In Channel */ -#define LPB_out_ch 0x04 /* 0x04 Link Out Channel */ -#define LPB_attached_serial 0x06 /* 0x06 Attached serial number */ -#define LPB_attached_host_serial 0x0A /* 0x0A Serial number of Host who booted other end */ -#define LPB_descheduled 0x0E /* 0x0E Currently Descheduled */ -#define LPB_state 0x10 /* 0x10 Current state */ -#define LPB_send_poll 0x12 /* 0x12 Send a Poll Packet */ -#define LPB_ltt_p 0x14 /* 0x14 Process Descriptor */ -#define LPB_lrt_p 0x16 /* 0x16 Process Descriptor */ -#define LPB_lrt_status 0x18 /* 0x18 Current lrt status */ -#define LPB_ltt_status 0x1A /* 0x1A Current ltt status */ -#define LPB_timeout 0x1C /* 0x1C Timeout value */ -#define LPB_topology 0x1E /* 0x1E Topology bits */ -#define LPB_mon_ltt 0x20 /* 0x20 */ -#define LPB_mon_lrt 0x22 /* 0x22 */ -#define LPB_num_pkts 0x24 /* 0x24 */ -#define LPB_add_packet_list 0x26 /* 0x26 Add packets to here */ -#define LPB_remove_packet_list 0x28 /* 0x28 Send packets from here */ -#define LPB_lrt_fail_chan 0x2A /* 0x2A Lrt's failure channel */ -#define LPB_ltt_fail_chan 0x2C /* 0x2C Ltt's failure channel */ -#define LPB_rup 0x2E /* 0x2E RUP structure for HOST to driver comms */ -#define LPB_link_rup 0x40 /* 0x40 RUP for the link (POLL, topology etc.) */ -#define LPB_attached_link 0x52 /* 0x52 Number of attached link */ -#define LPB_csum_errors 0x54 /* 0x54 csum errors */ -#define LPB_num_disconnects 0x56 /* 0x56 number of disconnects */ -#define LPB_num_sync_rcvd 0x58 /* 0x58 # sync's received */ -#define LPB_num_sync_rqst 0x5A /* 0x5A # sync requests */ -#define LPB_num_tx 0x5C /* 0x5C Num pkts sent */ -#define LPB_num_rx 0x5E /* 0x5E Num pkts received */ -#define LPB_module_attached 0x60 /* 0x60 Module tpyes of attached */ -#define LPB_led_timeout 0x62 /* 0x62 LED timeout */ -#define LPB_first_port 0x64 /* 0x64 First port to service */ -#define LPB_last_port 0x66 /* 0x66 Last port to service */ -#define sizeof_LPB 0x68 /* structure size = 0x68 */ - -#define LINKS_PER_UNIT 4 /* number of links from a host */ +#define LPB_link_number 0x00 /* 0x00 Link Number */ +#define LPB_in_ch 0x02 /* 0x02 Link In Channel */ +#define LPB_out_ch 0x04 /* 0x04 Link Out Channel */ +#define LPB_attached_serial 0x06 /* 0x06 Attached serial number */ +#define LPB_attached_host_serial 0x0A /* 0x0A Serial number of Host who booted other end */ +#define LPB_descheduled 0x0E /* 0x0E Currently Descheduled */ +#define LPB_state 0x10 /* 0x10 Current state */ +#define LPB_send_poll 0x12 /* 0x12 Send a Poll Packet */ +#define LPB_ltt_p 0x14 /* 0x14 Process Descriptor */ +#define LPB_lrt_p 0x16 /* 0x16 Process Descriptor */ +#define LPB_lrt_status 0x18 /* 0x18 Current lrt status */ +#define LPB_ltt_status 0x1A /* 0x1A Current ltt status */ +#define LPB_timeout 0x1C /* 0x1C Timeout value */ +#define LPB_topology 0x1E /* 0x1E Topology bits */ +#define LPB_mon_ltt 0x20 /* 0x20 */ +#define LPB_mon_lrt 0x22 /* 0x22 */ +#define LPB_num_pkts 0x24 /* 0x24 */ +#define LPB_add_packet_list 0x26 /* 0x26 Add packets to here */ +#define LPB_remove_packet_list 0x28 /* 0x28 Send packets from here */ +#define LPB_lrt_fail_chan 0x2A /* 0x2A Lrt's failure channel */ +#define LPB_ltt_fail_chan 0x2C /* 0x2C Ltt's failure channel */ +#define LPB_rup 0x2E /* 0x2E RUP structure for HOST to driver comms */ +#define LPB_link_rup 0x40 /* 0x40 RUP for the link (POLL, topology etc.) */ +#define LPB_attached_link 0x52 /* 0x52 Number of attached link */ +#define LPB_csum_errors 0x54 /* 0x54 csum errors */ +#define LPB_num_disconnects 0x56 /* 0x56 number of disconnects */ +#define LPB_num_sync_rcvd 0x58 /* 0x58 # sync's received */ +#define LPB_num_sync_rqst 0x5A /* 0x5A # sync requests */ +#define LPB_num_tx 0x5C /* 0x5C Num pkts sent */ +#define LPB_num_rx 0x5E /* 0x5E Num pkts received */ +#define LPB_module_attached 0x60 /* 0x60 Module tpyes of attached */ +#define LPB_led_timeout 0x62 /* 0x62 LED timeout */ +#define LPB_first_port 0x64 /* 0x64 First port to service */ +#define LPB_last_port 0x66 /* 0x66 Last port to service */ +#define sizeof_LPB 0x68 /* structure size = 0x68 */ + +#define LINKS_PER_UNIT 4 /* number of links from a host */ /***************************************************************************** ******************************** ******************************* @@ -380,17 +376,16 @@ typedef struct _LPB /* Used to overlay packet headers when allocating/freeing packets from the free list */ -typedef struct _FREE_LIST -{ - _u16 next; /* 0x00 offset of next list item */ - _u16 prev; /* 0x02 offset of previous list item */ +typedef struct _FREE_LIST { + _u16 next; /* 0x00 offset of next list item */ + _u16 prev; /* 0x02 offset of previous list item */ } FREE_LIST; /* Same thing again, but defined as offsets... */ -#define FL_next 0x00 /* 0x00 offset of next list item */ -#define FL_prev 0x02 /* 0x02 offset of previous list item */ +#define FL_next 0x00 /* 0x00 offset of next list item */ +#define FL_prev 0x02 /* 0x02 offset of previous list item */ /***************************************************************************** ********************************** *********************************** @@ -401,32 +396,31 @@ typedef struct _FREE_LIST /* The PKT is the main unit of communication between Host Cards and RTAs across the RIO network. */ -#define PKT_MAX_DATA_LEN 72 /* Size of packet data */ +#define PKT_MAX_DATA_LEN 72 /* Size of packet data */ -typedef struct _PKT -{ - _u8 dest_unit; /* 0x00 Destination Unit Id */ - _u8 dest_port; /* 0x01 Destination Port */ - _u8 src_unit; /* 0x02 Source Unit Id */ - _u8 src_port; /* 0x03 Source Port */ - _u8 len; /* 0x04 Length (in bytes) of data field */ - _u8 control; /* 0x05 */ - _u8 data[PKT_MAX_DATA_LEN]; /* 0x06 Actual data */ - _u16 csum; /* 0x4E C-SUM */ +typedef struct _PKT { + _u8 dest_unit; /* 0x00 Destination Unit Id */ + _u8 dest_port; /* 0x01 Destination Port */ + _u8 src_unit; /* 0x02 Source Unit Id */ + _u8 src_port; /* 0x03 Source Port */ + _u8 len; /* 0x04 Length (in bytes) of data field */ + _u8 control; /* 0x05 */ + _u8 data[PKT_MAX_DATA_LEN]; /* 0x06 Actual data */ + _u16 csum; /* 0x4E C-SUM */ } PKT; /* Same thing again, but defined as offsets... */ -#define PKT_dest_unit 0x00 /* 0x00 Destination Unit Id */ -#define PKT_dest_port 0x01 /* 0x01 Destination Port */ -#define PKT_src_unit 0x02 /* 0x02 Source Unit Id */ -#define PKT_src_port 0x03 /* 0x03 Source Port */ -#define PKT_len 0x04 /* 0x04 Length (in bytes) of data field */ -#define PKT_control 0x05 /* 0x05 */ -#define PKT_data 0x06 /* 0x06 Actual data */ -#define PKT_csum 0x4E /* 0x4E C-SUM */ -#define sizeof_PKT 0x50 /* structure size = 0x50 */ +#define PKT_dest_unit 0x00 /* 0x00 Destination Unit Id */ +#define PKT_dest_port 0x01 /* 0x01 Destination Port */ +#define PKT_src_unit 0x02 /* 0x02 Source Unit Id */ +#define PKT_src_port 0x03 /* 0x03 Source Port */ +#define PKT_len 0x04 /* 0x04 Length (in bytes) of data field */ +#define PKT_control 0x05 /* 0x05 */ +#define PKT_data 0x06 /* 0x06 Actual data */ +#define PKT_csum 0x4E /* 0x4E C-SUM */ +#define sizeof_PKT 0x50 /* structure size = 0x50 */ /* PKT.len definitions... */ #define PKT_CMD_BIT 0x80 @@ -449,38 +443,38 @@ typedef struct _PKT /* The following definitions and structures define the control packets sent between the driver and RIO Ports, RTAs and Host Cards. */ -#define PRE_EMPTIVE 0x80 /* Pre-emptive command (sent via port's RUP) */ +#define PRE_EMPTIVE 0x80 /* Pre-emptive command (sent via port's RUP) */ /* "in-band" and "pre-emptive" port commands... */ -#define OPEN 0x00 /* Driver->RIO Open a port */ -#define CONFIG 0x01 /* Driver->RIO Configure a port */ -#define MOPEN 0x02 /* Driver->RIO Modem open (wait for DCD) */ -#define CLOSE 0x03 /* Driver->RIO Close a port */ +#define OPEN 0x00 /* Driver->RIO Open a port */ +#define CONFIG 0x01 /* Driver->RIO Configure a port */ +#define MOPEN 0x02 /* Driver->RIO Modem open (wait for DCD) */ +#define CLOSE 0x03 /* Driver->RIO Close a port */ #define WFLUSH (0x04|PRE_EMPTIVE) /* Driver->RIO Write flush */ #define RFLUSH (0x05|PRE_EMPTIVE) /* Driver->RIO Read flush */ #define RESUME (0x06|PRE_EMPTIVE) /* Driver->RIO Behave as if XON received */ -#define SBREAK 0x07 /* Driver->RIO Start break */ -#define EBREAK 0x08 /* Driver->RIO End break */ +#define SBREAK 0x07 /* Driver->RIO Start break */ +#define EBREAK 0x08 /* Driver->RIO End break */ #define SUSPEND (0x09|PRE_EMPTIVE) /* Driver->RIO Behave as if XOFF received */ #define FCLOSE (0x0A|PRE_EMPTIVE) /* Driver->RIO Force close */ -#define XPRINT 0x0B /* Driver->RIO Xprint packet */ +#define XPRINT 0x0B /* Driver->RIO Xprint packet */ #define MBIS (0x0C|PRE_EMPTIVE) /* Driver->RIO Set modem lines */ #define MBIC (0x0D|PRE_EMPTIVE) /* Driver->RIO Clear modem lines */ #define MSET (0x0E|PRE_EMPTIVE) /* Driver->RIO Set modem lines */ -#define PCLOSE 0x0F /* Driver->RIO Pseudo close */ +#define PCLOSE 0x0F /* Driver->RIO Pseudo close */ #define MGET (0x10|PRE_EMPTIVE) /* Driver->RIO Force update of modem status */ #define MEMDUMP (0x11|PRE_EMPTIVE) /* Driver->RIO DEBUG request for RTA memory */ #define READ_REGISTER (0x12|PRE_EMPTIVE) /* Driver->RIO DEBUG read CD1400 register */ /* Remote Unit Port (RUP) packet definitions... (specified in PKT.dest_unit and PKT.src_unit) */ -#define SYNC_RUP 0xFF /* Download internal */ -#define COMMAND_RUP 0xFE /* Command ack/status */ -#define ERROR_RUP 0xFD /* Download internal */ -#define POLL_RUP 0xFC /* Download internal */ -#define BOOT_RUP 0xFB /* Used to boot RTAs */ -#define ROUTE_RUP 0xFA /* Used to specify routing/topology */ -#define STATUS_RUP 0xF9 /* Not used */ -#define POWER_RUP 0xF8 /* Download internal */ +#define SYNC_RUP 0xFF /* Download internal */ +#define COMMAND_RUP 0xFE /* Command ack/status */ +#define ERROR_RUP 0xFD /* Download internal */ +#define POLL_RUP 0xFC /* Download internal */ +#define BOOT_RUP 0xFB /* Used to boot RTAs */ +#define ROUTE_RUP 0xFA /* Used to specify routing/topology */ +#define STATUS_RUP 0xF9 /* Not used */ +#define POWER_RUP 0xF8 /* Download internal */ /* COMMAND_RUP definitions... */ #define COMPLETE (0x20|PRE_EMPTIVE) /* RIO->Driver Command complete */ @@ -488,24 +482,24 @@ typedef struct _PKT #define MODEM_STATUS (0x22|PRE_EMPTIVE) /* RIO->Driver Modem status change */ /* BOOT_RUP definitions... */ -#define BOOT_REQUEST 0x00 /* RIO->Driver Request for boot */ -#define BOOT_ABORT 0x01 /* Driver->RIO Abort a boot */ -#define BOOT_SEQUENCE 0x02 /* Driver->RIO Packet with firmware details */ -#define BOOT_COMPLETED 0x03 /* RIO->Driver Boot completed */ -#define IFOAD 0x2F /* Driver->RIO Shutdown/Reboot RTA (Fall Over And Die) */ -#define IDENTIFY 0x30 /* Driver->RIO Identify RTA */ -#define ZOMBIE 0x31 /* Driver->RIO Shutdown/Flash LEDs */ -#define UFOAD 0x32 /* Driver->RIO Shutdown/Reboot neighbouring RTA */ -#define IWAIT 0x33 /* Driver->RIO Pause booting process */ +#define BOOT_REQUEST 0x00 /* RIO->Driver Request for boot */ +#define BOOT_ABORT 0x01 /* Driver->RIO Abort a boot */ +#define BOOT_SEQUENCE 0x02 /* Driver->RIO Packet with firmware details */ +#define BOOT_COMPLETED 0x03 /* RIO->Driver Boot completed */ +#define IFOAD 0x2F /* Driver->RIO Shutdown/Reboot RTA (Fall Over And Die) */ +#define IDENTIFY 0x30 /* Driver->RIO Identify RTA */ +#define ZOMBIE 0x31 /* Driver->RIO Shutdown/Flash LEDs */ +#define UFOAD 0x32 /* Driver->RIO Shutdown/Reboot neighbouring RTA */ +#define IWAIT 0x33 /* Driver->RIO Pause booting process */ /* ROUTE_RUP definitions... */ -#define ROUTE_REQUEST 0x00 /* RIO->Driver Request an ID */ -#define ROUTE_FOAD 0x01 /* Driver->RIO Shutdown/reboot RTA */ -#define ROUTE_ALREADY 0x02 /* Driver->RIO Not used */ -#define ROUTE_USED 0x03 /* Driver->RIO Not used */ -#define ROUTE_ALLOCATE 0x04 /* Driver->RIO Allocate RTA RUP numbers */ -#define ROUTE_REQ_TOP 0x05 /* Driver->RIO Not used */ -#define ROUTE_TOPOLOGY 0x06 /* RIO->Driver Route/Topology status */ +#define ROUTE_REQUEST 0x00 /* RIO->Driver Request an ID */ +#define ROUTE_FOAD 0x01 /* Driver->RIO Shutdown/reboot RTA */ +#define ROUTE_ALREADY 0x02 /* Driver->RIO Not used */ +#define ROUTE_USED 0x03 /* Driver->RIO Not used */ +#define ROUTE_ALLOCATE 0x04 /* Driver->RIO Allocate RTA RUP numbers */ +#define ROUTE_REQ_TOP 0x05 /* Driver->RIO Not used */ +#define ROUTE_TOPOLOGY 0x06 /* RIO->Driver Route/Topology status */ /***************************************************************************** ********************************** ********************************** @@ -518,89 +512,89 @@ typedef struct _PKT Sent to open a port. Structure of configuration info used with OPEN, CONFIG and MOPEN packets... */ -#define PKT_Cmd (PKT_Data+0) /* Command code */ -#define PKT_Cor1 (PKT_Data+1) /* Channel Option Register 1 */ -#define PKT_Cor2 (PKT_Data+2) /* Channel Option Register 2 */ -#define PKT_Cor4 (PKT_Data+3) /* Channel Option Register 4 */ -#define PKT_Cor5 (PKT_Data+4) /* Channel Option Register 5 */ -#define PKT_TxXon (PKT_Data+5) /* Transmit XON character */ -#define PKT_TxXoff (PKT_Data+6) /* Transmit XOFF character */ -#define PKT_RxXon (PKT_Data+7) /* Receive XON character */ -#define PKT_RxXoff (PKT_Data+8) /* Receive XOFF character */ -#define PKT_Lnext (PKT_Data+9) /* Lnext character */ -#define PKT_TxBaud (PKT_Data+10) /* Transmit baud rate */ -#define PKT_RxBaud (PKT_Data+11) /* Receive baud rate */ +#define PKT_Cmd (PKT_Data+0) /* Command code */ +#define PKT_Cor1 (PKT_Data+1) /* Channel Option Register 1 */ +#define PKT_Cor2 (PKT_Data+2) /* Channel Option Register 2 */ +#define PKT_Cor4 (PKT_Data+3) /* Channel Option Register 4 */ +#define PKT_Cor5 (PKT_Data+4) /* Channel Option Register 5 */ +#define PKT_TxXon (PKT_Data+5) /* Transmit XON character */ +#define PKT_TxXoff (PKT_Data+6) /* Transmit XOFF character */ +#define PKT_RxXon (PKT_Data+7) /* Receive XON character */ +#define PKT_RxXoff (PKT_Data+8) /* Receive XOFF character */ +#define PKT_Lnext (PKT_Data+9) /* Lnext character */ +#define PKT_TxBaud (PKT_Data+10) /* Transmit baud rate */ +#define PKT_RxBaud (PKT_Data+11) /* Receive baud rate */ /* COR1 definitions... */ -#define COR1_PARITY 0xE0 /* Parity mask */ -#define COR1_NONE 0x00 /* No parity */ -#define COR1_SPACE 0x20 /* Space parity */ -#define COR1_EVEN 0x40 /* Even parity */ -#define COR1_MARK 0xA0 /* Mark parity */ -#define COR1_ODD 0xC0 /* Odd parity */ - -#define COR1_STOPBITS 0x0C /* Stop bits mask */ -#define COR1_STOP1 0x00 /* 1 stop bit */ -#define COR1_STOP1_5 0x04 /* 1.5 stop bits */ -#define COR1_STOP2 0x08 /* 2 stop bits */ - -#define COR1_DATABITS 0x03 /* Data bits mask */ -#define COR1_DATA5 0x00 /* 5 data bits */ -#define COR1_DATA6 0x01 /* 6 data bits */ -#define COR1_DATA7 0x02 /* 7 data bits */ -#define COR1_DATA8 0x03 /* 8 data bits */ +#define COR1_PARITY 0xE0 /* Parity mask */ +#define COR1_NONE 0x00 /* No parity */ +#define COR1_SPACE 0x20 /* Space parity */ +#define COR1_EVEN 0x40 /* Even parity */ +#define COR1_MARK 0xA0 /* Mark parity */ +#define COR1_ODD 0xC0 /* Odd parity */ + +#define COR1_STOPBITS 0x0C /* Stop bits mask */ +#define COR1_STOP1 0x00 /* 1 stop bit */ +#define COR1_STOP1_5 0x04 /* 1.5 stop bits */ +#define COR1_STOP2 0x08 /* 2 stop bits */ + +#define COR1_DATABITS 0x03 /* Data bits mask */ +#define COR1_DATA5 0x00 /* 5 data bits */ +#define COR1_DATA6 0x01 /* 6 data bits */ +#define COR1_DATA7 0x02 /* 7 data bits */ +#define COR1_DATA8 0x03 /* 8 data bits */ /* COR2 definitions... */ -#define COR2_XON_TXFLOW 0x40 /* XON/XOFF Transmit Flow */ -#define COR2_XANY_TXFLOW 0xC0 /* XON/XANY Transmit Flow */ -#define COR2_HUPCL 0x20 /* Hang Up On Close */ -#define COR2_DSR_TXFLOW 0x08 /* DSR Transmit Flow Control */ -#define COR2_RTS_RXFLOW 0x04 /* RTS Receive Flow Control */ -#define COR2_CTS_TXFLOW 0x02 /* CTS Transmit Flow Control */ -#define COR2_XON_RXFLOW 0x01 /* XON/XOFF Receive Flow */ +#define COR2_XON_TXFLOW 0x40 /* XON/XOFF Transmit Flow */ +#define COR2_XANY_TXFLOW 0xC0 /* XON/XANY Transmit Flow */ +#define COR2_HUPCL 0x20 /* Hang Up On Close */ +#define COR2_DSR_TXFLOW 0x08 /* DSR Transmit Flow Control */ +#define COR2_RTS_RXFLOW 0x04 /* RTS Receive Flow Control */ +#define COR2_CTS_TXFLOW 0x02 /* CTS Transmit Flow Control */ +#define COR2_XON_RXFLOW 0x01 /* XON/XOFF Receive Flow */ /* COR4 definition... */ -#define COR4_IGNCR 0x80 /* Discard received CR */ -#define COR4_ICRNL 0x40 /* Map received CR -> NL */ -#define COR4_INLCR 0x20 /* Map received NL -> CR */ -#define COR4_IGNBRK 0x10 /* Ignore Received Break */ -#define COR4_NBRKINT 0x08 /* No interrupt on rx Break */ -#define COR4_IGNPAR 0x04 /* ignore rx parity error chars */ -#define COR4_PARMRK 0x02 /* Mark rx parity error chars */ -#define COR4_RAISEMOD 0x01 /* Raise modem lines on !0 baud */ +#define COR4_IGNCR 0x80 /* Discard received CR */ +#define COR4_ICRNL 0x40 /* Map received CR -> NL */ +#define COR4_INLCR 0x20 /* Map received NL -> CR */ +#define COR4_IGNBRK 0x10 /* Ignore Received Break */ +#define COR4_NBRKINT 0x08 /* No interrupt on rx Break */ +#define COR4_IGNPAR 0x04 /* ignore rx parity error chars */ +#define COR4_PARMRK 0x02 /* Mark rx parity error chars */ +#define COR4_RAISEMOD 0x01 /* Raise modem lines on !0 baud */ /* COR5 definitions... */ -#define COR5_ISTRIP 0x80 /* Strip input chars to 7 bits */ -#define COR5_LNE 0x40 /* Enable LNEXT processing */ -#define COR5_CMOE 0x20 /* Match good & error characters */ -#define COR5_TAB3 0x10 /* TAB3 mode */ -#define COR5_TSTATE_ON 0x08 /* Enable tbusy/tstop monitoring */ -#define COR5_TSTATE_OFF 0x04 /* Disable tbusy/tstop monitoring */ -#define COR5_ONLCR 0x02 /* NL -> CR NL on output */ -#define COR5_OCRNL 0x01 /* CR -> NL on output */ +#define COR5_ISTRIP 0x80 /* Strip input chars to 7 bits */ +#define COR5_LNE 0x40 /* Enable LNEXT processing */ +#define COR5_CMOE 0x20 /* Match good & error characters */ +#define COR5_TAB3 0x10 /* TAB3 mode */ +#define COR5_TSTATE_ON 0x08 /* Enable tbusy/tstop monitoring */ +#define COR5_TSTATE_OFF 0x04 /* Disable tbusy/tstop monitoring */ +#define COR5_ONLCR 0x02 /* NL -> CR NL on output */ +#define COR5_OCRNL 0x01 /* CR -> NL on output */ /* 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 */ +#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 */ /***************************************************************************** ********************************* ********************************* @@ -636,7 +630,7 @@ typedef struct _PKT No parameters. */ #if 0 -#define PKT_Cmd (PKT_Data+0) /* Command code */ +#define PKT_Cmd (PKT_Data+0) /* Command code */ #endif /***************************************************************************** ********************************* ********************************* @@ -653,9 +647,9 @@ typedef struct _PKT write flushing previously started by a pre-emptive WFLUSH packet. (in-band) */ #if 0 -#define PKT_Cmd (PKT_Data+0) /* Command code */ +#define PKT_Cmd (PKT_Data+0) /* Command code */ #endif -#define PKT_PhbNum (PKT_Data+1) /* Port number wrt RTA */ +#define PKT_PhbNum (PKT_Data+1) /* Port number wrt RTA */ /***************************************************************************** ********************************* ********************************* @@ -669,8 +663,8 @@ typedef struct _PKT packets of a port. */ #if 0 -#define PKT_Cmd (PKT_Data+0) /* Command code */ -#define PKT_PhbNum (PKT_Data+1) /* Port number wrt RTA */ +#define PKT_Cmd (PKT_Data+0) /* Command code */ +#define PKT_PhbNum (PKT_Data+1) /* Port number wrt RTA */ #endif /***************************************************************************** @@ -685,8 +679,8 @@ typedef struct _PKT transmission of data if blocked by XOFF. (as if XON had been received) */ #if 0 -#define PKT_Cmd (PKT_Data+0) /* Command code */ -#define PKT_PhbNum (PKT_Data+1) /* Port number wrt RTA */ +#define PKT_Cmd (PKT_Data+0) /* Command code */ +#define PKT_PhbNum (PKT_Data+1) /* Port number wrt RTA */ #endif /***************************************************************************** @@ -707,9 +701,9 @@ typedef struct _PKT specified number of mS. */ #if 0 -#define PKT_Cmd (PKT_Data+0) /* Command code */ +#define PKT_Cmd (PKT_Data+0) /* Command code */ #endif -#define PKT_BreakDelay (PKT_Data+1) /* Break delay in mS */ +#define PKT_BreakDelay (PKT_Data+1) /* Break delay in mS */ /***************************************************************************** ********************************* ********************************* @@ -736,8 +730,8 @@ typedef struct _PKT transmission of data. (as if XOFF had been received) */ #if 0 -#define PKT_Cmd (PKT_Data+0) /* Command code */ -#define PKT_PhbNum (PKT_Data+1) /* Port number wrt RTA */ +#define PKT_Cmd (PKT_Data+0) /* Command code */ +#define PKT_PhbNum (PKT_Data+1) /* Port number wrt RTA */ #endif /***************************************************************************** @@ -753,8 +747,8 @@ typedef struct _PKT modem signals if the COR5_HUPCL (Hang Up On Close) flag is set. */ #if 0 -#define PKT_Cmd (PKT_Data+0) /* Command code */ -#define PKT_PhbNum (PKT_Data+1) /* Port number wrt RTA */ +#define PKT_Cmd (PKT_Data+0) /* Command code */ +#define PKT_PhbNum (PKT_Data+1) /* Port number wrt RTA */ #endif /***************************************************************************** @@ -774,8 +768,8 @@ typedef struct _PKT - Transparent Print Stop Sequence. */ #if 0 -#define PKT_Cmd (PKT_Data+0) /* Command code */ -#define PKT_PhbNum (PKT_Data+1) /* Port number wrt RTA */ +#define PKT_Cmd (PKT_Data+0) /* Command code */ +#define PKT_PhbNum (PKT_Data+1) /* Port number wrt RTA */ #endif /***************************************************************************** @@ -789,14 +783,14 @@ typedef struct _PKT MBIS is sent pre-emptively from the driver to set a port's modem signals. */ #if 0 -#define PKT_Cmd (PKT_Data+0) /* Command code */ -#define PKT_PhbNum (PKT_Data+1) /* Port number wrt RTA */ +#define PKT_Cmd (PKT_Data+0) /* Command code */ +#define PKT_PhbNum (PKT_Data+1) /* Port number wrt RTA */ #endif -#define PKT_ModemSet (PKT_Data+4) /* Modem set signals mask */ +#define PKT_ModemSet (PKT_Data+4) /* Modem set signals mask */ /* ModemSet definitions... */ -#define MBIS_RTS 0x01 /* RTS modem signal */ -#define MBIS_DTR 0x02 /* DTR modem signal */ +#define MBIS_RTS 0x01 /* RTS modem signal */ +#define MBIS_DTR 0x02 /* DTR modem signal */ /***************************************************************************** ********************************** ********************************** @@ -808,16 +802,16 @@ typedef struct _PKT MBIC is sent pre-emptively from the driver to clear a port's modem signals. */ -#if 0 -#define PKT_Cmd (PKT_Data+0) /* Command code */ -#define PKT_PhbNum (PKT_Data+1) /* Port number wrt RTA */ +#if 0 +#define PKT_Cmd (PKT_Data+0) /* Command code */ +#define PKT_PhbNum (PKT_Data+1) /* Port number wrt RTA */ #endif -#define PKT_ModemClear (PKT_Data+4) /* Modem clear signals mask */ +#define PKT_ModemClear (PKT_Data+4) /* Modem clear signals mask */ /* ModemClear definitions... */ -#define MBIC_RTS 0x01 /* RTS modem signal */ -#define MBIC_DTR 0x02 /* DTR modem signal */ +#define MBIC_RTS 0x01 /* RTS modem signal */ +#define MBIC_DTR 0x02 /* DTR modem signal */ /***************************************************************************** ********************************** ********************************** @@ -829,15 +823,15 @@ typedef struct _PKT MSET is sent pre-emptively from the driver to set/clear a port's modem signals. */ #if 0 -#define PKT_Cmd (PKT_Data+0) /* Command code */ -#define PKT_PhbNum (PKT_Data+1) /* Port number wrt RTA */ +#define PKT_Cmd (PKT_Data+0) /* Command code */ +#define PKT_PhbNum (PKT_Data+1) /* Port number wrt RTA */ #endif -#define PKT_ModemSet (PKT_Data+4) /* Modem set signals mask */ +#define PKT_ModemSet (PKT_Data+4) /* Modem set signals mask */ /* ModemSet definitions... */ -#define MSET_RTS 0x01 /* RTS modem signal */ -#define MSET_DTR 0x02 /* DTR modem signal */ +#define MSET_RTS 0x01 /* RTS modem signal */ +#define MSET_DTR 0x02 /* DTR modem signal */ /***************************************************************************** ********************************* ********************************* @@ -853,7 +847,7 @@ typedef struct _PKT port's transmit / receive and modem signals will be left enabled and the port marked internally as Pseudo Closed. */ -#define PKT_Cmd (PKT_Data+0) /* Command code */ +#define PKT_Cmd (PKT_Data+0) /* Command code */ /***************************************************************************** ********************************** ********************************** @@ -865,8 +859,8 @@ typedef struct _PKT MGET is sent pre-emptively from the driver to request the port's current modem signals. */ -#define PKT_Cmd (PKT_Data+0) /* Command code */ -#define PKT_PhbNum (PKT_Data+1) /* Port number wrt RTA */ +#define PKT_Cmd (PKT_Data+0) /* Command code */ +#define PKT_PhbNum (PKT_Data+1) /* Port number wrt RTA */ /***************************************************************************** ********************************* ******************************** @@ -880,11 +874,11 @@ typedef struct _PKT of the specified port's RTA address space. */ #if 0 -#define PKT_Cmd (PKT_Data+0) /* Command code */ +#define PKT_Cmd (PKT_Data+0) /* Command code */ #endif -#define PKT_PhbNum (PKT_Data+1) /* Port number wrt RTA */ -#define PKT_SubCmd (PKT_Data+5) /* Sub Command */ -#define PKT_Address (PKT_Data+6) /* Requested address */ +#define PKT_PhbNum (PKT_Data+1) /* Port number wrt RTA */ +#define PKT_SubCmd (PKT_Data+5) /* Sub Command */ +#define PKT_Address (PKT_Data+6) /* Requested address */ /***************************************************************************** ****************************** ***************************** @@ -898,11 +892,11 @@ typedef struct _PKT of the CD1400 register specified in address. */ #if 0 -#define PKT_Cmd (PKT_Data+0) /* Command code */ +#define PKT_Cmd (PKT_Data+0) /* Command code */ #endif -#define PKT_PhbNum (PKT_Data+1) /* Port number wrt RTA */ -#define PKT_SubCmd (PKT_Data+5) /* Sub Command */ -#define PKT_Address (PKT_Data+6) /* Requested address */ +#define PKT_PhbNum (PKT_Data+1) /* Port number wrt RTA */ +#define PKT_SubCmd (PKT_Data+5) /* Sub Command */ +#define PKT_Address (PKT_Data+6) /* Requested address */ /***************************************************************************** ************************ ************************** @@ -916,33 +910,33 @@ typedef struct _PKT packets, except MEMDUMP and READ_REGISTER. */ #if 0 -#define PKT_Cmd (PKT_Data+0) /* Command code */ +#define PKT_Cmd (PKT_Data+0) /* Command code */ #endif -#define PKT_PhbNum (PKT_Data+1) /* Port number wrt RTA */ -#define PKT_Cmd2 (PKT_Data+2) /* Command code copy */ -#define PKT_ModemStatus (PKT_Data+3) /* Modem signal status */ -#define PKT_PortStatus (PKT_Data+4) /* Port signal status */ -#define PKT_SubCmd (PKT_Data+5) /* Sub Command */ +#define PKT_PhbNum (PKT_Data+1) /* Port number wrt RTA */ +#define PKT_Cmd2 (PKT_Data+2) /* Command code copy */ +#define PKT_ModemStatus (PKT_Data+3) /* Modem signal status */ +#define PKT_PortStatus (PKT_Data+4) /* Port signal status */ +#define PKT_SubCmd (PKT_Data+5) /* Sub Command */ /* ModemStatus definitions... */ -#define MODEM_DSR 0x80 /* Data Set Ready modem state */ -#define MODEM_CTS 0x40 /* Clear To Send modem state */ -#define MODEM_RI 0x20 /* Ring Indicate modem state */ -#define MODEM_CD 0x10 /* Carrier Detect modem state */ -#define MODEM_TSTOP 0x08 /* Transmit Stopped state */ -#define MODEM_TEMPTY 0x04 /* Transmit Empty state */ -#define MODEM_DTR 0x02 /* DTR modem output state */ -#define MODEM_RTS 0x01 /* RTS modem output state */ +#define MODEM_DSR 0x80 /* Data Set Ready modem state */ +#define MODEM_CTS 0x40 /* Clear To Send modem state */ +#define MODEM_RI 0x20 /* Ring Indicate modem state */ +#define MODEM_CD 0x10 /* Carrier Detect modem state */ +#define MODEM_TSTOP 0x08 /* Transmit Stopped state */ +#define MODEM_TEMPTY 0x04 /* Transmit Empty state */ +#define MODEM_DTR 0x02 /* DTR modem output state */ +#define MODEM_RTS 0x01 /* RTS modem output state */ /* PortStatus definitions... */ -#define PORT_ISOPEN 0x01 /* Port open ? */ -#define PORT_HUPCL 0x02 /* Hangup on close? */ -#define PORT_MOPENPEND 0x04 /* Modem open pending */ -#define PORT_ISPARALLEL 0x08 /* Parallel port */ -#define PORT_BREAK 0x10 /* Port on break */ -#define PORT_STATUSPEND 0020 /* Status packet pending */ -#define PORT_BREAKPEND 0x40 /* Break packet pending */ -#define PORT_MODEMPEND 0x80 /* Modem status packet pending */ +#define PORT_ISOPEN 0x01 /* Port open ? */ +#define PORT_HUPCL 0x02 /* Hangup on close? */ +#define PORT_MOPENPEND 0x04 /* Modem open pending */ +#define PORT_ISPARALLEL 0x08 /* Parallel port */ +#define PORT_BREAK 0x10 /* Port on break */ +#define PORT_STATUSPEND 0020 /* Status packet pending */ +#define PORT_BREAKPEND 0x40 /* Break packet pending */ +#define PORT_MODEMPEND 0x80 /* Modem status packet pending */ /***************************************************************************** ************************ ************************** @@ -956,35 +950,35 @@ typedef struct _PKT packets, except MEMDUMP and READ_REGISTER. */ #if 0 -#define PKT_Cmd (PKT_Data+0) /* Command code */ -#define PKT_PhbNum (PKT_Data+1) /* Port number wrt RTA */ -#define PKT_Cmd2 (PKT_Data+2) /* Command code copy */ +#define PKT_Cmd (PKT_Data+0) /* Command code */ +#define PKT_PhbNum (PKT_Data+1) /* Port number wrt RTA */ +#define PKT_Cmd2 (PKT_Data+2) /* Command code copy */ #endif -#define PKT_ModemStatus (PKT_Data+3) /* Modem signal status */ -#define PKT_PortStatus (PKT_Data+4) /* Port signal status */ +#define PKT_ModemStatus (PKT_Data+3) /* Modem signal status */ +#define PKT_PortStatus (PKT_Data+4) /* Port signal status */ #if 0 -#define PKT_SubCmd (PKT_Data+5) /* Sub Command */ +#define PKT_SubCmd (PKT_Data+5) /* Sub Command */ #endif /* ModemStatus definitions... */ -#define MODEM_DSR 0x80 /* Data Set Ready modem state */ -#define MODEM_CTS 0x40 /* Clear To Send modem state */ -#define MODEM_RI 0x20 /* Ring Indicate modem state */ -#define MODEM_CD 0x10 /* Carrier Detect modem state */ -#define MODEM_TSTOP 0x08 /* Transmit Stopped state */ -#define MODEM_TEMPTY 0x04 /* Transmit Empty state */ -#define MODEM_DTR 0x02 /* DTR modem output state */ -#define MODEM_RTS 0x01 /* RTS modem output state */ +#define MODEM_DSR 0x80 /* Data Set Ready modem state */ +#define MODEM_CTS 0x40 /* Clear To Send modem state */ +#define MODEM_RI 0x20 /* Ring Indicate modem state */ +#define MODEM_CD 0x10 /* Carrier Detect modem state */ +#define MODEM_TSTOP 0x08 /* Transmit Stopped state */ +#define MODEM_TEMPTY 0x04 /* Transmit Empty state */ +#define MODEM_DTR 0x02 /* DTR modem output state */ +#define MODEM_RTS 0x01 /* RTS modem output state */ /* PortStatus definitions... */ -#define PORT_ISOPEN 0x01 /* Port open ? */ -#define PORT_HUPCL 0x02 /* Hangup on close? */ -#define PORT_MOPENPEND 0x04 /* Modem open pending */ -#define PORT_ISPARALLEL 0x08 /* Parallel port */ -#define PORT_BREAK 0x10 /* Port on break */ -#define PORT_STATUSPEND 0020 /* Status packet pending */ -#define PORT_BREAKPEND 0x40 /* Break packet pending */ -#define PORT_MODEMPEND 0x80 /* Modem status packet pending */ +#define PORT_ISOPEN 0x01 /* Port open ? */ +#define PORT_HUPCL 0x02 /* Hangup on close? */ +#define PORT_MOPENPEND 0x04 /* Modem open pending */ +#define PORT_ISPARALLEL 0x08 /* Parallel port */ +#define PORT_BREAK 0x10 /* Port on break */ +#define PORT_STATUSPEND 0020 /* Status packet pending */ +#define PORT_BREAKPEND 0x40 /* Break packet pending */ +#define PORT_MODEMPEND 0x80 /* Modem status packet pending */ /***************************************************************************** ******************** ******************** @@ -998,15 +992,15 @@ typedef struct _PKT port I/O control command packet. */ #if 0 -#define PKT_Cmd (PKT_Data+0) /* Command code */ -#define PKT_PhbNum (PKT_Data+1) /* Port number wrt RTA */ -#define PKT_Cmd2 (PKT_Data+2) /* Command code copy */ -#define PKT_ModemStatus (PKT_Data+3) /* Modem signal status */ -#define PKT_PortStatus (PKT_Data+4) /* Port signal status */ -#define PKT_SubCmd (PKT_Data+5) /* Sub Command */ -#define PKT_Address (PKT_Data+6) /* Requested address */ +#define PKT_Cmd (PKT_Data+0) /* Command code */ +#define PKT_PhbNum (PKT_Data+1) /* Port number wrt RTA */ +#define PKT_Cmd2 (PKT_Data+2) /* Command code copy */ +#define PKT_ModemStatus (PKT_Data+3) /* Modem signal status */ +#define PKT_PortStatus (PKT_Data+4) /* Port signal status */ +#define PKT_SubCmd (PKT_Data+5) /* Sub Command */ +#define PKT_Address (PKT_Data+6) /* Requested address */ #endif -#define PKT_Dump (PKT_Data+8) /* 32bytes of requested dump data */ +#define PKT_Dump (PKT_Data+8) /* 32bytes of requested dump data */ /***************************************************************************** ***************** ***************** @@ -1020,14 +1014,14 @@ typedef struct _PKT READ_REGISTER port I/O control command packet. */ #if 0 -#define PKT_Cmd (PKT_Data+0) /*Command code */ -#define PKT_PhbNum (PKT_Data+1) /*Port number wrt RTA */ -#define PKT_Cmd2 (PKT_Data+2) /* Command code copy */ +#define PKT_Cmd (PKT_Data+0) /*Command code */ +#define PKT_PhbNum (PKT_Data+1) /*Port number wrt RTA */ +#define PKT_Cmd2 (PKT_Data+2) /* Command code copy */ #endif -#define PKT_RegisterValue (PKT_Data+3) /* Modem signal status */ +#define PKT_RegisterValue (PKT_Data+3) /* Modem signal status */ #if 0 -#define PKT_PortStatus (PKT_Data+4) /* Port signal status */ -#define PKT_SubCmd (PKT_Data+5) /* Sub Command */ +#define PKT_PortStatus (PKT_Data+4) /* Port signal status */ +#define PKT_SubCmd (PKT_Data+5) /* Sub Command */ #endif /***************************************************************************** @@ -1041,9 +1035,9 @@ typedef struct _PKT COMMAND_RUP - BREAK_RECEIVED packets are sent when the port detects a receive BREAK signal. */ #if 0 -#define PKT_Cmd (PKT_Data+0) /* Command code */ -#define PKT_PhbNum (PKT_Data+1) /* Port number wrt RTA */ -#define PKT_Cmd2 (PKT_Data+2) /* Command code copy */ +#define PKT_Cmd (PKT_Data+0) /* Command code */ +#define PKT_PhbNum (PKT_Data+1) /* Port number wrt RTA */ +#define PKT_Cmd2 (PKT_Data+2) /* Command code copy */ #endif /***************************************************************************** @@ -1059,10 +1053,10 @@ typedef struct _PKT */ #if 0 -#define PKT_Cmd (PKT_Data+0) /* Command code */ -#define PKT_PhbNum (PKT_Data+1) /* Port number wrt RTA */ -#define PKT_Cmd2 (PKT_Data+2) /* Command code copy */ -#define PKT_ModemStatus (PKT_Data+3) /* Modem signal status */ +#define PKT_Cmd (PKT_Data+0) /* Command code */ +#define PKT_PhbNum (PKT_Data+1) /* Port number wrt RTA */ +#define PKT_Cmd2 (PKT_Data+2) /* Command code copy */ +#define PKT_ModemStatus (PKT_Data+3) /* Modem signal status */ #endif /***************************************************************************** @@ -1077,7 +1071,7 @@ typedef struct _PKT firmware code to load onto attached RTAs. */ #if 0 -#define PKT_Cmd (PKT_Data+0) /* Command code */ +#define PKT_Cmd (PKT_Data+0) /* Command code */ #endif /***************************************************************************** @@ -1092,12 +1086,12 @@ typedef struct _PKT to a BOOT_RUP - BOOT_REQUEST packet. */ #if 0 -#define PKT_Cmd (PKT_Data+0) /* Command code */ +#define PKT_Cmd (PKT_Data+0) /* Command code */ #endif -#define PKT_NumPackets (PKT_Data+2) /* Packets required to load firmware */ -#define PKT_LoadBase (PKT_Data+4) /* RTA firmware load address */ -#define PKT_CodeSize (PKT_Data+6) /* Size of firmware in bytes */ -#define PKT_CmdString (PKT_Data+8) /* Command string */ +#define PKT_NumPackets (PKT_Data+2) /* Packets required to load firmware */ +#define PKT_LoadBase (PKT_Data+4) /* RTA firmware load address */ +#define PKT_CodeSize (PKT_Data+6) /* Size of firmware in bytes */ +#define PKT_CmdString (PKT_Data+8) /* Command string */ /***************************************************************************** ************************ *********************** @@ -1111,10 +1105,10 @@ typedef struct _PKT RTA firmware has completed. */ #if 0 -#define PKT_Cmd (PKT_Data+0) /* Command code */ +#define PKT_Cmd (PKT_Data+0) /* Command code */ #endif -#define PKT_LinkNumber (PKT_Data+1) /* Link number RTA booted on */ -#define PKT_SerialNumber (PKT_Data+2) /* 4 byte serial number */ +#define PKT_LinkNumber (PKT_Data+1) /* Link number RTA booted on */ +#define PKT_SerialNumber (PKT_Data+2) /* 4 byte serial number */ /***************************************************************************** ************************ *********************** @@ -1127,7 +1121,7 @@ typedef struct _PKT BOOT_RUP packet without the PKT_CMD_BIT set in the PKT->len field is sent from RIO to the Driver as a request for a firmware boot packet. */ -#define PKT_SequenceNumber (PKT_Data+0) /* Packet sequence number */ +#define PKT_SequenceNumber (PKT_Data+0) /* Packet sequence number */ /***************************************************************************** *********************** *********************** @@ -1141,9 +1135,9 @@ typedef struct _PKT packet with the 70 bytes of the requested sequence. */ #if 0 -#define PKT_SequenceNumber (PKT_Data+0) /* Packet sequence number */ +#define PKT_SequenceNumber (PKT_Data+0) /* Packet sequence number */ #endif -#define PKT_FirmwarePacket (PKT_Data+2) /* Firmware packet */ +#define PKT_FirmwarePacket (PKT_Data+2) /* Firmware packet */ /***************************************************************************** **************************** **************************** @@ -1157,10 +1151,10 @@ typedef struct _PKT RTA to shut down and reboot. */ #if 0 -#define PKT_Cmd (PKT_Data+0) /* Command code */ +#define PKT_Cmd (PKT_Data+0) /* Command code */ #endif -#define PKT_IfoadId1 (PKT_Data+2) /* IFOAD Id 1 */ -#define PKT_IfoadId2 (PKT_Data+3) /* IFOAD Id 2 */ +#define PKT_IfoadId1 (PKT_Data+2) /* IFOAD Id 1 */ +#define PKT_IfoadId2 (PKT_Data+3) /* IFOAD Id 2 */ #define IFOADID1 0xAD #define IFOADID2 0xF0 @@ -1177,9 +1171,9 @@ typedef struct _PKT RTA to flash its LEDs for a period of time. */ #if 0 -#define PKT_Cmd (PKT_Data+0) /* Command code */ +#define PKT_Cmd (PKT_Data+0) /* Command code */ #endif -#define PKT_IdentifyId (PKT_Data+2) /* defines pattern to flash */ +#define PKT_IdentifyId (PKT_Data+2) /* defines pattern to flash */ /***************************************************************************** **************************** *************************** @@ -1193,10 +1187,10 @@ typedef struct _PKT RTA to shut down and flash it's LEDs. */ #if 0 -#define PKT_Cmd (PKT_Data+0) /* Command code */ +#define PKT_Cmd (PKT_Data+0) /* Command code */ #endif -#define PKT_ZombieId1 (PKT_Data+2) /* ZOMBIE Id 1 */ -#define PKT_ZombieId2 (PKT_Data+3) /* ZOMBIE Id 2 */ +#define PKT_ZombieId1 (PKT_Data+2) /* ZOMBIE Id 1 */ +#define PKT_ZombieId2 (PKT_Data+3) /* ZOMBIE Id 2 */ #define ZOMBIEID1 0x52 #define ZOMBIEID2 0x21 @@ -1213,11 +1207,11 @@ typedef struct _PKT to ask it's neighbouring RTA to shut down and reboot. */ #if 0 -#define PKT_Cmd (PKT_Data+0) /* Command code */ -#define PKT_LinkNumber (PKT_Data+1) /* Link number of RTA to UFOAD */ +#define PKT_Cmd (PKT_Data+0) /* Command code */ +#define PKT_LinkNumber (PKT_Data+1) /* Link number of RTA to UFOAD */ #endif -#define PKT_UfoadId1 (PKT_Data+2) /* UFOAD Id 1 */ -#define PKT_UfoadId2 (PKT_Data+3) /* UFOAD Id 2 */ +#define PKT_UfoadId1 (PKT_Data+2) /* UFOAD Id 1 */ +#define PKT_UfoadId2 (PKT_Data+3) /* UFOAD Id 2 */ #define UFOADID1 0x1E #define UFOADID2 0x0D @@ -1234,11 +1228,11 @@ typedef struct _PKT to pause booting on the specified link for 30 seconds. */ #if 0 -#define PKT_Cmd (PKT_Data+0) /* Command code */ -#define PKT_LinkNumber (PKT_Data+1) /* Link number of RTA to UFOAD */ +#define PKT_Cmd (PKT_Data+0) /* Command code */ +#define PKT_LinkNumber (PKT_Data+1) /* Link number of RTA to UFOAD */ #endif -#define PKT_IwaitId1 (PKT_Data+2) /* IWAIT Id 1 */ -#define PKT_IwaitId2 (PKT_Data+3) /* IWAIT Id 2 */ +#define PKT_IwaitId1 (PKT_Data+2) /* IWAIT Id 1 */ +#define PKT_IwaitId2 (PKT_Data+3) /* IWAIT Id 2 */ #define IWAITID1 0xDE #define IWAITID2 0xB1 @@ -1255,20 +1249,20 @@ typedef struct _PKT RTA to a Driver to request an ID (RUP or unit number). */ #if 0 -#define PKT_Cmd (PKT_Data+0) /* Command code */ +#define PKT_Cmd (PKT_Data+0) /* Command code */ #endif -#define PKT_SerialNumber (PKT_Data+2) /* 4 byte serial number */ -#define PKT_ModuleTypes (PKT_Data+6) /* RTA Module types */ +#define PKT_SerialNumber (PKT_Data+2) /* 4 byte serial number */ +#define PKT_ModuleTypes (PKT_Data+6) /* RTA Module types */ /* ModuleTypes definitions... */ -#define MOD_BLANK 0x0F /* Blank plate attached */ -#define MOD_RS232DB25 0x00 /* RS232 DB25 connector */ -#define MOD_RS232RJ45 0x01 /* RS232 RJ45 connector */ -#define MOD_RS422DB25 0x02 /* RS422 DB25 connector */ -#define MOD_RS485DB25 0x03 /* RS485 DB25 connector */ -#define MOD_PARALLEL 0x04 /* Centronics parallel */ +#define MOD_BLANK 0x0F /* Blank plate attached */ +#define MOD_RS232DB25 0x00 /* RS232 DB25 connector */ +#define MOD_RS232RJ45 0x01 /* RS232 RJ45 connector */ +#define MOD_RS422DB25 0x02 /* RS422 DB25 connector */ +#define MOD_RS485DB25 0x03 /* RS485 DB25 connector */ +#define MOD_PARALLEL 0x04 /* Centronics parallel */ -#define MOD2 0x08 /* Set to indicate Rev2 module */ +#define MOD2 0x08 /* Set to indicate Rev2 module */ /***************************************************************************** ************************* ************************* @@ -1282,9 +1276,9 @@ typedef struct _PKT packet to cause the RTA to "Fall Over And Die"., i.e. shutdown and reboot. */ #if 0 -#define PKT_Cmd (PKT_Data+0) /* Command code */ +#define PKT_Cmd (PKT_Data+0) /* Command code */ #endif -#define PKT_RouteCmdString (PKT_Data+2) /* Command string */ +#define PKT_RouteCmdString (PKT_Data+2) /* Command string */ /***************************************************************************** *********************** *********************** @@ -1298,13 +1292,13 @@ typedef struct _PKT packet to allocate the RTA's Id number (RUP number 1..16) */ #if 0 -#define PKT_Cmd (PKT_Data+0) /* Command code */ +#define PKT_Cmd (PKT_Data+0) /* Command code */ #endif -#define PKT_IdNum (PKT_Data+1) /* RUP number for ports 1..8 */ +#define PKT_IdNum (PKT_Data+1) /* RUP number for ports 1..8 */ #if 0 -#define PKT_RouteCmdString (PKT_Data+2) /* Command string */ +#define PKT_RouteCmdString (PKT_Data+2) /* Command string */ #endif -#define PKT_IdNum2 (PKT_Data+0x17) /* RUP number for ports 9..16 */ +#define PKT_IdNum2 (PKT_Data+0x17) /* RUP number for ports 9..16 */ /***************************************************************************** *********************** *********************** @@ -1318,18 +1312,18 @@ typedef struct _PKT current link status. */ #if 0 -#define PKT_Cmd (PKT_Data+0) /* Command code */ +#define PKT_Cmd (PKT_Data+0) /* Command code */ #endif -#define PKT_Link1Rup (PKT_Data+2) /* Link 1 RUP number */ -#define PKT_Link1Link (PKT_Data+3) /* Link 1 link number */ -#define PKT_Link2Rup (PKT_Data+4) /* Link 2 RUP number */ -#define PKT_Link2Link (PKT_Data+5) /* Link 2 link number */ -#define PKT_Link3Rup (PKT_Data+6) /* Link 3 RUP number */ -#define PKT_Link3Link (PKT_Data+7) /* Link 3 link number */ -#define PKT_Link4Rup (PKT_Data+8) /* Link 4 RUP number */ -#define PKT_Link4Link (PKT_Data+9) /* Link 4 link number */ -#define PKT_RtaVpdProm (PKT_Data+10) /* 32 bytes of RTA VPD PROM Contents */ - -#endif /* _sxwinif_h */ +#define PKT_Link1Rup (PKT_Data+2) /* Link 1 RUP number */ +#define PKT_Link1Link (PKT_Data+3) /* Link 1 link number */ +#define PKT_Link2Rup (PKT_Data+4) /* Link 2 RUP number */ +#define PKT_Link2Link (PKT_Data+5) /* Link 2 link number */ +#define PKT_Link3Rup (PKT_Data+6) /* Link 3 RUP number */ +#define PKT_Link3Link (PKT_Data+7) /* Link 3 link number */ +#define PKT_Link4Rup (PKT_Data+8) /* Link 4 RUP number */ +#define PKT_Link4Link (PKT_Data+9) /* Link 4 link number */ +#define PKT_RtaVpdProm (PKT_Data+10) /* 32 bytes of RTA VPD PROM Contents */ + +#endif /* _sxwinif_h */ /* End of RIOWINIF.H */ diff --git a/drivers/char/rio/riscos.h b/drivers/char/rio/riscos.h index 7685cc1d9e7b..60d66d0056ae 100644 --- a/drivers/char/rio/riscos.h +++ b/drivers/char/rio/riscos.h @@ -60,4 +60,4 @@ static char *_riscos_h_sccs_ = "@(#)riscos.h 1.2"; #define RINDW(A) (*(ushort *)(A)) #define WINDW(A,V) (*(ushort *)(A)=(ushort)(V)) -#endif /* __rio_riscos_h__ */ +#endif /* __rio_riscos_h__ */ diff --git a/drivers/char/rio/rom.h b/drivers/char/rio/rom.h index ee79b8e5b972..58a7843625ff 100644 --- a/drivers/char/rio/rom.h +++ b/drivers/char/rio/rom.h @@ -39,19 +39,19 @@ #ifndef lint #ifdef SCCS -static char *_rio_rom_h_sccs = "@(#)rom.h 1.1" ; +static char *_rio_rom_h_sccs = "@(#)rom.h 1.1"; #endif #endif -typedef struct ROM ROM ; -struct ROM { - u_short slx ; - char pcb_letter_rev ; - char pcb_number_rev ; - char serial[4] ; - char year ; - char week ; - } ; +typedef struct ROM ROM; +struct ROM { + u_short slx; + char pcb_letter_rev; + char pcb_number_rev; + char serial[4]; + char year; + char week; +}; #endif @@ -60,5 +60,3 @@ struct ROM { #define ROM_LENGTH 0x20 /*********** end of file ***********/ - - diff --git a/drivers/char/rio/route.h b/drivers/char/rio/route.h index c42dbb971718..769744e575ab 100644 --- a/drivers/char/rio/route.h +++ b/drivers/char/rio/route.h @@ -44,26 +44,26 @@ #endif #define MAX_LINKS 4 -#define MAX_NODES 17 /* Maximum nodes in a subnet */ -#define NODE_BYTES ((MAX_NODES / 8) + 1) /* Number of bytes needed for - 1 bit per node */ -#define ROUTE_DATA_SIZE (NODE_BYTES + 2) /* Number of bytes for complete - info about cost etc. */ +#define MAX_NODES 17 /* Maximum nodes in a subnet */ +#define NODE_BYTES ((MAX_NODES / 8) + 1) /* Number of bytes needed for + 1 bit per node */ +#define ROUTE_DATA_SIZE (NODE_BYTES + 2) /* Number of bytes for complete + info about cost etc. */ #define ROUTES_PER_PACKET ((PKT_MAX_DATA_LEN -2)/ ROUTE_DATA_SIZE) - /* Number of nodes we can squeeze - into one packet */ + /* Number of nodes we can squeeze + into one packet */ #define MAX_TOPOLOGY_PACKETS (MAX_NODES / ROUTES_PER_PACKET + 1) /************************************************ * Define the types of command for the ROUTE RUP. ************************************************/ -#define ROUTE_REQUEST 0 /* Request an ID */ -#define ROUTE_FOAD 1 /* Kill the RTA */ -#define ROUTE_ALREADY 2 /* ID given already */ -#define ROUTE_USED 3 /* All ID's used */ -#define ROUTE_ALLOCATE 4 /* Here it is */ -#define ROUTE_REQ_TOP 5 /* I bet you didn't expect.... - the Topological Inquisition */ -#define ROUTE_TOPOLOGY 6 /* Topology request answered FD */ +#define ROUTE_REQUEST 0 /* Request an ID */ +#define ROUTE_FOAD 1 /* Kill the RTA */ +#define ROUTE_ALREADY 2 /* ID given already */ +#define ROUTE_USED 3 /* All ID's used */ +#define ROUTE_ALLOCATE 4 /* Here it is */ +#define ROUTE_REQ_TOP 5 /* I bet you didn't expect.... + the Topological Inquisition */ +#define ROUTE_TOPOLOGY 6 /* Topology request answered FD */ /******************************************************************* * Define the Route Map Structure * @@ -72,22 +72,22 @@ ******************************************************************/ typedef struct COST_ROUTE COST_ROUTE; struct COST_ROUTE { - unsigned char cost; /* Cost down this link */ - unsigned char route[NODE_BYTES]; /* Nodes thorough this route */ - } ; + unsigned char cost; /* Cost down this link */ + unsigned char route[NODE_BYTES]; /* Nodes thorough this route */ +}; -typedef struct ROUTE_STR ROUTE_STR ; -struct ROUTE_STR { - COST_ROUTE cost_route[MAX_LINKS]; - /* cost / route for this link */ - ushort favoured; /* favoured link */ - } ; +typedef struct ROUTE_STR ROUTE_STR; +struct ROUTE_STR { + COST_ROUTE cost_route[MAX_LINKS]; + /* cost / route for this link */ + ushort favoured; /* favoured link */ +}; -#define NO_LINK (short) 5 /* Link unattached */ -#define ROUTE_NO_ID (short) 100 /* No Id */ -#define ROUTE_DISCONNECT (ushort) 0xff /* Not connected */ -#define ROUTE_INTERCONNECT (ushort) 0x40 /* Sub-net interconnect */ +#define NO_LINK (short) 5 /* Link unattached */ +#define ROUTE_NO_ID (short) 100 /* No Id */ +#define ROUTE_DISCONNECT (ushort) 0xff /* Not connected */ +#define ROUTE_INTERCONNECT (ushort) 0x40 /* Sub-net interconnect */ #define SYNC_RUP (ushort) 255 @@ -99,10 +99,9 @@ struct ROUTE_STR { #define STATUS_RUP (ushort) 249 #define POWER_RUP (ushort) 248 -#define HIGHEST_RUP (ushort) 255 /* Set to Top one */ -#define LOWEST_RUP (ushort) 248 /* Set to bottom one */ +#define HIGHEST_RUP (ushort) 255 /* Set to Top one */ +#define LOWEST_RUP (ushort) 248 /* Set to bottom one */ #endif /*********** end of file ***********/ - diff --git a/drivers/char/rio/rtahw.h b/drivers/char/rio/rtahw.h index 06860118cbc5..e6c2cdfd3a1f 100644 --- a/drivers/char/rio/rtahw.h +++ b/drivers/char/rio/rtahw.h @@ -37,7 +37,7 @@ #ifndef lint #ifdef SCCS_LABELS -static char *_rio_rtahw_h_sccs = "@(#)rtahw.h 1.5" ; +static char *_rio_rtahw_h_sccs = "@(#)rtahw.h 1.5"; #endif #endif @@ -58,12 +58,12 @@ static char *_rio_rtahw_h_sccs = "@(#)rtahw.h 1.5" ; ** Define the different types of modules we can have */ enum module { - MOD_BLANK = 0x0f, /* Blank plate attached */ - MOD_RS232DB25 = 0x00, /* RS232 DB25 connector */ - MOD_RS232RJ45 = 0x01, /* RS232 RJ45 connector */ - MOD_RS422DB25 = 0x02, /* RS422 DB25 connector */ - MOD_RS485DB25 = 0x03, /* RS485 DB25 connector */ - MOD_PARALLEL = 0x04 /* Centronics parallel */ + MOD_BLANK = 0x0f, /* Blank plate attached */ + MOD_RS232DB25 = 0x00, /* RS232 DB25 connector */ + MOD_RS232RJ45 = 0x01, /* RS232 RJ45 connector */ + MOD_RS422DB25 = 0x02, /* RS422 DB25 connector */ + MOD_RS485DB25 = 0x03, /* RS485 DB25 connector */ + MOD_PARALLEL = 0x04 /* Centronics parallel */ }; #define TYPE_HOST 0 diff --git a/drivers/char/rio/rup.h b/drivers/char/rio/rup.h index b9d2bc03d14b..8d44fec91dd5 100644 --- a/drivers/char/rio/rup.h +++ b/drivers/char/rio/rup.h @@ -44,39 +44,38 @@ #endif #if defined( HOST ) || defined( INKERNEL ) -#define MAX_RUP ((short) 16) +#define MAX_RUP ((short) 16) #endif #ifdef RTA #define MAX_RUP ((short) 1) #endif -#define PKTS_PER_RUP ((short) 2) /* They are always used in pairs */ +#define PKTS_PER_RUP ((short) 2) /* They are always used in pairs */ /************************************************* * Define all the packet request stuff ************************************************/ -#define TX_RUP_INACTIVE 0 /* Nothing to transmit */ -#define TX_PACKET_READY 1 /* Transmit packet ready */ -#define TX_LOCK_RUP 2 /* Transmit side locked */ +#define TX_RUP_INACTIVE 0 /* Nothing to transmit */ +#define TX_PACKET_READY 1 /* Transmit packet ready */ +#define TX_LOCK_RUP 2 /* Transmit side locked */ -#define RX_RUP_INACTIVE 0 /* Nothing received */ -#define RX_PACKET_READY 1 /* Packet received */ +#define RX_RUP_INACTIVE 0 /* Nothing received */ +#define RX_PACKET_READY 1 /* Packet received */ -#define RUP_NO_OWNER 0xff /* RUP not owned by any process */ +#define RUP_NO_OWNER 0xff /* RUP not owned by any process */ struct RUP { - PKT_ptr txpkt; /* Outgoing packet */ - PKT_ptr rxpkt; /* Incoming packet */ - WORD link; /* Which link to send down? */ - BYTE rup_dest_unit[2]; /* Destination unit */ - WORD handshake; /* For handshaking */ - WORD timeout; /* Timeout */ - WORD status; /* Status */ - WORD txcontrol; /* Transmit control */ - WORD rxcontrol; /* Receive control */ - }; - + PKT_ptr txpkt; /* Outgoing packet */ + PKT_ptr rxpkt; /* Incoming packet */ + WORD link; /* Which link to send down? */ + BYTE rup_dest_unit[2]; /* Destination unit */ + WORD handshake; /* For handshaking */ + WORD timeout; /* Timeout */ + WORD status; /* Status */ + WORD txcontrol; /* Transmit control */ + WORD rxcontrol; /* Receive control */ +}; + #endif /*********** end of file ***********/ - diff --git a/drivers/char/rio/rupstat.h b/drivers/char/rio/rupstat.h index b4aafaff0d78..56d828c63d28 100644 --- a/drivers/char/rio/rupstat.h +++ b/drivers/char/rio/rupstat.h @@ -39,7 +39,7 @@ #ifndef lint #ifdef SCCS_LABELS -static char *_rio_rupstat_h_sccs = "@(#)rupstat.h 1.1" ; +static char *_rio_rupstat_h_sccs = "@(#)rupstat.h 1.1"; #endif #endif @@ -48,4 +48,3 @@ static char *_rio_rupstat_h_sccs = "@(#)rupstat.h 1.1" ; #define STATUS_TOPOLOGY 2 #endif - diff --git a/drivers/char/rio/sam.h b/drivers/char/rio/sam.h index c1accb8cb624..31494054b213 100644 --- a/drivers/char/rio/sam.h +++ b/drivers/char/rio/sam.h @@ -60,15 +60,12 @@ #define RX FALSE -typedef struct FREE_LIST FREE_LIST ; -struct FREE_LIST { - FREE_LIST_ptr next ; - FREE_LIST_ptr prev ; - } ; +typedef struct FREE_LIST FREE_LIST; +struct FREE_LIST { + FREE_LIST_ptr next; + FREE_LIST_ptr prev; +}; #endif /*********** end of file ***********/ - - - diff --git a/drivers/char/rio/selftest.h b/drivers/char/rio/selftest.h index deae48722a21..7a3dba352323 100644 --- a/drivers/char/rio/selftest.h +++ b/drivers/char/rio/selftest.h @@ -38,36 +38,36 @@ ** selftest on a booting RTA. */ typedef struct { - short magic; /* Identifies packet type */ - int test; /* Test number, see below */ - unsigned int result; /* Result value */ - unsigned int dataIn; - unsigned int dataOut; -}selftestStruct; + short magic; /* Identifies packet type */ + int test; /* Test number, see below */ + unsigned int result; /* Result value */ + unsigned int dataIn; + unsigned int dataOut; +} selftestStruct; /* ** The different tests are identified by the following data values. */ enum test { - TESTS_COMPLETE = 0x00, - MEMTEST_ADDR = 0x01, - MEMTEST_BIT = 0x02, - MEMTEST_FILL = 0x03, - MEMTEST_DATABUS = 0x04, - MEMTEST_ADDRBUS = 0x05, - CD1400_INIT = 0x10, - CD1400_LOOP = 0x11, - CD1400_INTERRUPT = 0x12 + TESTS_COMPLETE = 0x00, + MEMTEST_ADDR = 0x01, + MEMTEST_BIT = 0x02, + MEMTEST_FILL = 0x03, + MEMTEST_DATABUS = 0x04, + MEMTEST_ADDRBUS = 0x05, + CD1400_INIT = 0x10, + CD1400_LOOP = 0x11, + CD1400_INTERRUPT = 0x12 }; enum result { - E_PORT = 0x10, - E_TX = 0x11, - E_RX = 0x12, - E_EXCEPT = 0x13, - E_COMPARE = 0x14, - E_MODEM = 0x15, - E_TIMEOUT = 0x16, - E_INTERRUPT = 0x17 + E_PORT = 0x10, + E_TX = 0x11, + E_RX = 0x12, + E_EXCEPT = 0x13, + E_COMPARE = 0x14, + E_MODEM = 0x15, + E_TIMEOUT = 0x16, + E_INTERRUPT = 0x17 }; -#endif /* _selftests_h_ */ +#endif /* _selftests_h_ */ diff --git a/drivers/char/rio/space.h b/drivers/char/rio/space.h index 72398d342051..1f12690f9d1f 100644 --- a/drivers/char/rio/space.h +++ b/drivers/char/rio/space.h @@ -42,4 +42,4 @@ extern int rio_bases[]; extern int rio_limits[]; extern int rio_vects[]; -#endif /* __rio_space_h__ */ +#endif /* __rio_space_h__ */ diff --git a/drivers/char/rio/sysmap.h b/drivers/char/rio/sysmap.h index fdc731393576..e1c6f1160dff 100644 --- a/drivers/char/rio/sysmap.h +++ b/drivers/char/rio/sysmap.h @@ -37,27 +37,26 @@ #ifndef lint #ifdef SCCS_LABELS -static char *_rio_sysmap_h_sccs = "@(#)sysmap.h 1.1" ; +static char *_rio_sysmap_h_sccs = "@(#)sysmap.h 1.1"; #endif #endif -#define SYSTEM_MAP_LEN 64 /* Len of System Map array */ +#define SYSTEM_MAP_LEN 64 /* Len of System Map array */ -typedef struct SYS_MAP SYS_MAP ; -typedef struct SYS_MAP_LINK SYS_MAP_LINK ; +typedef struct SYS_MAP SYS_MAP; +typedef struct SYS_MAP_LINK SYS_MAP_LINK; struct SYS_MAP_LINK { - short id ; /* Unit Id */ - short link ; /* Id's Link */ - short been_here ; /* Used by map_gen */ - } ; + short id; /* Unit Id */ + short link; /* Id's Link */ + short been_here; /* Used by map_gen */ +}; struct SYS_MAP { - char serial_num[4] ; - SYS_MAP_LINK link[4] ; - } ; + char serial_num[4]; + SYS_MAP_LINK link[4]; +}; /*********** end of file ***********/ - diff --git a/drivers/char/rio/timeouts.h b/drivers/char/rio/timeouts.h index 11b31330c901..a8b5be3ca9bf 100644 --- a/drivers/char/rio/timeouts.h +++ b/drivers/char/rio/timeouts.h @@ -37,15 +37,14 @@ #ifndef lint #ifdef SCCS_LABELS -static char *_rio_defaults_h_sccs = "@(#)timeouts.h 1.3" ; +static char *_rio_defaults_h_sccs = "@(#)timeouts.h 1.3"; #endif #endif -#define MILLISECOND (int) (1000/64) /* 15.625 low ticks */ -#define SECOND (int) 15625 /* Low priority ticks */ +#define MILLISECOND (int) (1000/64) /* 15.625 low ticks */ +#define SECOND (int) 15625 /* Low priority ticks */ #define TX_TIMEOUT (int) (200 * MILLISECOND) /*********** end of file ***********/ - diff --git a/drivers/char/rio/top.h b/drivers/char/rio/top.h index 255c40d463a6..d15a11dc4f73 100644 --- a/drivers/char/rio/top.h +++ b/drivers/char/rio/top.h @@ -40,10 +40,9 @@ static char *_top_h_sccs_ = "@(#)top.h 1.2"; /* ** Topology information */ -struct Top -{ - uchar Unit; - uchar Link; +struct Top { + uchar Unit; + uchar Link; }; -#endif /* __rio_top_h__ */ +#endif /* __rio_top_h__ */ diff --git a/drivers/char/rio/typdef.h b/drivers/char/rio/typdef.h index 2cb9dd693fa1..185b889e1510 100644 --- a/drivers/char/rio/typdef.h +++ b/drivers/char/rio/typdef.h @@ -45,11 +45,11 @@ static char *_typdef_h_sccs_ = "@(#)typdef.h 1.2"; ** These types are ONLY to be used for refering to data structures ** on the RIO Host card! */ -typedef volatile unsigned char BYTE; -typedef volatile unsigned short WORD; -typedef volatile unsigned int DWORD; -typedef volatile unsigned short RIOP; -typedef volatile short NUMBER; +typedef volatile unsigned char BYTE; +typedef volatile unsigned short WORD; +typedef volatile unsigned int DWORD; +typedef volatile unsigned short RIOP; +typedef volatile short NUMBER; /* @@ -59,13 +59,13 @@ typedef volatile short NUMBER; ** are here only to make the source compile. */ /* typedef unsigned int uint; */ -typedef unsigned long ulong_t; -typedef unsigned short ushort_t; -typedef unsigned char uchar_t; -typedef unsigned char queue_t; -typedef unsigned char mblk_t; -typedef unsigned int paddr_t; -typedef unsigned char uchar; +typedef unsigned long ulong_t; +typedef unsigned short ushort_t; +typedef unsigned char uchar_t; +typedef unsigned char queue_t; +typedef unsigned char mblk_t; +typedef unsigned int paddr_t; +typedef unsigned char uchar; #define TPNULL ((ushort)(0x8000)) @@ -73,10 +73,10 @@ typedef unsigned char uchar; /* ** RIO structures defined in other include files. */ -typedef struct PKT PKT; -typedef struct LPB LPB; -typedef struct RUP RUP; -typedef struct Port Port; -typedef struct DpRam DpRam; +typedef struct PKT PKT; +typedef struct LPB LPB; +typedef struct RUP RUP; +typedef struct Port Port; +typedef struct DpRam DpRam; -#endif /* __rio_typdef_h__ */ +#endif /* __rio_typdef_h__ */ diff --git a/drivers/char/rio/unixrup.h b/drivers/char/rio/unixrup.h index eddf86278abc..a126c7cabac6 100644 --- a/drivers/char/rio/unixrup.h +++ b/drivers/char/rio/unixrup.h @@ -41,16 +41,15 @@ static char *_unixrup_h_sccs_ = "@(#)unixrup.h 1.2"; ** UnixRup data structure. This contains pointers to actual RUPs on the ** host card, and all the command/boot control stuff. */ -struct UnixRup -{ - struct CmdBlk *CmdsWaitingP; /* Commands waiting to be done */ - struct CmdBlk *CmdPendingP; /* The command currently being sent */ - struct RUP *RupP; /* the Rup to send it to */ - uint Id; /* Id number */ - uint BaseSysPort; /* SysPort of first tty on this RTA */ - uint ModTypes; /* Modules on this RTA */ - spinlock_t RupLock; /* Lock structure for MPX */ -/* struct lockb RupLock; */ /* Lock structure for MPX */ +struct UnixRup { + struct CmdBlk *CmdsWaitingP; /* Commands waiting to be done */ + struct CmdBlk *CmdPendingP; /* The command currently being sent */ + struct RUP *RupP; /* the Rup to send it to */ + uint Id; /* Id number */ + uint BaseSysPort; /* SysPort of first tty on this RTA */ + uint ModTypes; /* Modules on this RTA */ + spinlock_t RupLock; /* Lock structure for MPX */ + /* struct lockb RupLock; *//* Lock structure for MPX */ }; -#endif /* __rio_unixrup_h__ */ +#endif /* __rio_unixrup_h__ */ -- cgit v1.2.3 From f504fb59c7e356d00ac56933a4462a6ba74d0c1d Mon Sep 17 00:00:00 2001 From: Alan Cox Date: Mon, 16 Jan 2006 16:44:05 +0000 Subject: [PATCH] Remove brates.h from rio driver (unused file) Signed-off-by: Alan Cox Signed-off-by: Linus Torvalds --- drivers/char/rio/brates.h | 106 ---------------------------------------------- 1 file changed, 106 deletions(-) delete mode 100644 drivers/char/rio/brates.h (limited to 'drivers/char/rio') diff --git a/drivers/char/rio/brates.h b/drivers/char/rio/brates.h deleted file mode 100644 index dd686d58fd66..000000000000 --- a/drivers/char/rio/brates.h +++ /dev/null @@ -1,106 +0,0 @@ -/**************************************************************************** - ******* ******* - ******* BRATES.H ******* - ******* ******* - **************************************************************************** - - Author : Jeremy Rolls - Date : 1 Nov 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 _brates_h -#ifndef lint -/* static char * _brates_h_sccs = "@(#)brates.h 1.4"; */ -#endif -#define _brates_h 1 -/* List of baud rate defines. Most are borrowed from /usr/include/sys/termio.h -*/ -#ifndef INKERNEL - -#define B0 0x00 -#define B50 0x01 -#define B75 0x02 -#define B110 0x03 -#define B134 0x04 -#define B150 0x05 -#define B200 0x06 -#define B300 0x07 -#define B600 0x08 -#define B1200 0x09 -#define B1800 0x0a -#define B2400 0x0b -#define B4800 0x0c -#define B9600 0x0d -#define B19200 0x0e -#define B38400 0x0f - -#endif - -/* -** The following baudrates may or may not be defined -** on various UNIX systems. -** If they are not then we define them. -** If they are then we do not define them ;-) -** -** This is appalling that we use same definitions as UNIX -** for our own download code as there is no garuntee that -** B57600 will be defined as 0x11 by a UNIX system.... -** Arghhhhh!!!!!!!!!!!!!! -*/ -#if !defined(B56000) -#define B56000 0x10 -#endif - -#if !defined(B57600) -#define B57600 0x11 -#endif - -#if !defined(B64000) -#define B64000 0x12 -#endif - -#if !defined(B115200) -#define B115200 0x13 -#endif - - -#if !defined(B2000) -#define B2000 0x14 -#endif - - -#define MAX_RATE B2000 - -struct baud_rate { /* Tag for baud rates */ - /* short host_rate, *//* As passed by the driver */ - short divisor, /* The divisor */ - prescaler; /* The pre-scaler */ -}; - -#endif -- cgit v1.2.3 From e8a9858aa2af3d14a37eafc6182d3b12923be41c Mon Sep 17 00:00:00 2001 From: Alan Cox Date: Mon, 16 Jan 2006 16:45:18 +0000 Subject: [PATCH] Remove cmd.h from rio driver (unused file) Signed-off-by: Linus Torvalds --- drivers/char/rio/cmd.h | 83 -------------------------------------------------- 1 file changed, 83 deletions(-) delete mode 100644 drivers/char/rio/cmd.h (limited to 'drivers/char/rio') diff --git a/drivers/char/rio/cmd.h b/drivers/char/rio/cmd.h deleted file mode 100644 index 797b62400c91..000000000000 --- a/drivers/char/rio/cmd.h +++ /dev/null @@ -1,83 +0,0 @@ - - -/**************************************************************************** - ******* ******* - ******* C O M M A N D P A C K E T H E A D E R S - ******* ******* - **************************************************************************** - - Author : Ian Nandhra - 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 _cmd_h -#define _cmd_h - -#ifndef lint -#ifdef SCCS -static char *_rio_cmd_h_sccs = "@(#)cmd.h 1.1"; -#endif -#endif - - -#define PRE_EMPTIVE_CMD 0x80 -#define INLINE_CMD ~PRE_EMPTIVE_CMD - -#define CMD_IGNORE_PKT ( (ushort) 0) -#define CMD_STATUS_REQ ( (ushort) 1) -#define CMD_UNIT_STATUS_REQ ( (ushort) 2) /* Is this needed ??? */ -#define CMD_CONF_PORT ( (ushort) 3) -#define CMD_CONF_UNIT ( (ushort) 4) -#define CMD_ROUTE_MAP_REQ ( (ushort) 5) -#define CMD_FLUSH_TX ( (ushort) 6) -#define CMD_FLUSH_RX ( (ushort) 7) -#define CMD_PARTION_PORT ( (ushort) 8) -#define CMD_RESET_PORT ( (ushort) 0x0a) -#define CMD_BOOT_UNIT ( (ushort) 0x0b) -#define CMD_FOUND_UNIT ( (ushort) 0x0c) -#define CMD_ATTACHED_RTA_2 ( (ushort) 0x0d) -#define CMD_PROVIDE_BOOT ( (ushort) 0x0e) -#define CMD_CIRRUS ( (ushort) 0x0f) - -#define FORM_STATUS_PKT ( (ushort) 1 ) -#define FORM_POLL_PKT ( (ushort) 2 ) -#define FORM_LINK_STATUS_PKT ( (ushort) 3 ) - - -#define CMD_DATA_PORT ( (ushort) 1 ) -#define CMD_DATA ( (ushort) 2 ) - -#define CMD_TX_PART ( (ushort) 2 ) -#define CMD_RX_PART ( (ushort) 3 ) -#define CMD_RX_LIMIT ( (ushort) 4 ) - -#endif - -/*********** end of file ***********/ -- cgit v1.2.3 From 98da212f0d22cb6ef7fee96e62572c763194c77b Mon Sep 17 00:00:00 2001 From: Alan Cox Date: Mon, 16 Jan 2006 16:46:17 +0000 Subject: [PATCH] Remove chan.h from rio driver (unused file) Signed-off-by: Linus Torvalds --- drivers/char/rio/chan.h | 33 --------------------------------- 1 file changed, 33 deletions(-) delete mode 100644 drivers/char/rio/chan.h (limited to 'drivers/char/rio') diff --git a/drivers/char/rio/chan.h b/drivers/char/rio/chan.h deleted file mode 100644 index af14311f9b66..000000000000 --- a/drivers/char/rio/chan.h +++ /dev/null @@ -1,33 +0,0 @@ -/* - * - * (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. -*/ -#ifndef _chan_h -#define _chan_h - -#ifndef lint -#ifdef SCCS -static char *_rio_chan_h_sccs = "@(#)chan.h 1.1"; -#endif -#endif - -#define Link0 0 -#define Link1 1 -#define Link2 2 -#define Link3 3 - -#endif -- cgit v1.2.3 From 4198d8c3687418f245d7b351fd34702fb7fe0668 Mon Sep 17 00:00:00 2001 From: Alan Cox Date: Mon, 16 Jan 2006 16:47:14 +0000 Subject: [PATCH] Remove data.h from rio driver (unused file) Signed-off-by: Linus Torvalds --- drivers/char/rio/data.h | 40 ---------------------------------------- 1 file changed, 40 deletions(-) delete mode 100644 drivers/char/rio/data.h (limited to 'drivers/char/rio') diff --git a/drivers/char/rio/data.h b/drivers/char/rio/data.h deleted file mode 100644 index dabc2d1fa40f..000000000000 --- a/drivers/char/rio/data.h +++ /dev/null @@ -1,40 +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 : data.h -** SID : 1.2 -** Last Modified : 11/6/98 11:34:09 -** Retrieved : 11/6/98 11:34:21 -** -** ident @(#)data.h 1.2 -** -** ----------------------------------------------------------------------------- -*/ - -#ifndef __rio_datadex__ -#define __rio_datadex__ - -#ifndef lint -static char *_data_h_sccs_ = "@(#)data.h 1.2"; -#endif - -#endif -- cgit v1.2.3 From 0d233681274013a554194ce8e2fe8945cd49979f Mon Sep 17 00:00:00 2001 From: Alan Cox Date: Mon, 16 Jan 2006 16:48:12 +0000 Subject: [PATCH] Remove debug.h from rio.h (unused file) Signed-off-by: Linus Torvalds --- drivers/char/rio/debug.h | 39 --------------------------------------- 1 file changed, 39 deletions(-) delete mode 100644 drivers/char/rio/debug.h (limited to 'drivers/char/rio') diff --git a/drivers/char/rio/debug.h b/drivers/char/rio/debug.h deleted file mode 100644 index 6ae95c00db4a..000000000000 --- a/drivers/char/rio/debug.h +++ /dev/null @@ -1,39 +0,0 @@ -/* -** File: debug.h -** -** Author: David Dix -** -** Created: 12th March 1993 -** -** Last modified: 93/04/27 -** - * - * (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. -*/ - -#ifndef _debug_h_ -#define _debug_h_ - - -#if defined(DCIRRUS) -#define DBPACKET(pkt, opt, str, chn) debug_packet((pkt), (opt), (str), (chn)) -#else -#define DBPACKET(pkt, opt, str, c) -#endif /* DCIRRUS */ - - -#endif /* _debug_h_ */ -- cgit v1.2.3 From e67f76a6b1ab418b8232791d99ee728a395bd335 Mon Sep 17 00:00:00 2001 From: Alan Cox Date: Mon, 16 Jan 2006 16:49:15 +0000 Subject: [PATCH] Remove enable.h from rio driver (unused file) Signed-off-by: Alan Cox Signed-off-by: Linus Torvalds --- drivers/char/rio/eisa.h | 104 ------------------------------------------------ 1 file changed, 104 deletions(-) delete mode 100644 drivers/char/rio/eisa.h (limited to 'drivers/char/rio') diff --git a/drivers/char/rio/eisa.h b/drivers/char/rio/eisa.h deleted file mode 100644 index c2abaf0eab04..000000000000 --- a/drivers/char/rio/eisa.h +++ /dev/null @@ -1,104 +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 : eisa.h -** SID : 1.2 -** Last Modified : 11/6/98 11:34:10 -** Retrieved : 11/6/98 11:34:21 -** -** ident @(#)eisa.h 1.2 -** -** ----------------------------------------------------------------------------- -*/ - -#ifndef __rio_eisa_h__ -#define __rio_eisa_h__ - -#ifdef SCCS_LABELS -#ifndef lint -static char *_eisa_h_sccs_ = "@(#)eisa.h 1.2"; -#endif -#endif - -/* -** things to do with the EISA bus -*/ - -#define RIO_EISA_STRING_ADDRESS 0xfffd9 /* where EISA is stored */ - -#define RIO_MAX_EISA_SLOTS 16 /* how many EISA slots? */ - -#define RIO_EISA_IDENT 0x984D /* Specialix */ -#define RIO_EISA_PRODUCT_CODE 0x14 /* Code 14 */ -#define RIO_EISA_ENABLE_BIT 0x01 /* To enable card */ - -#define EISA_MEMORY_BASE_LO 0xC00 /* A16-A23 */ -#define EISA_MEMORY_BASE_HI 0xC01 /* A24-A31 */ -#define EISA_INTERRUPT_VEC 0xC02 /* see below */ -#define EISA_CONTROL_PORT 0xC02 /* see below */ -#define EISA_INTERRUPT_RESET 0xC03 /* read to clear IRQ */ - -#define EISA_PRODUCT_IDENT_LO 0xC80 /* where RIO_EISA_IDENT is */ -#define EISA_PRODUCT_IDENT_HI 0xC81 -#define EISA_PRODUCT_NUMBER 0xC82 /* where PROD_CODE is */ -#define EISA_REVISION_NUMBER 0xC83 /* revision (1dp) */ -#define EISA_ENABLE 0xC84 /* set LSB to enable card */ -#define EISA_UNIQUE_NUM_0 0xC88 /* vomit */ -#define EISA_UNIQUE_NUM_1 0xC8A -#define EISA_UNIQUE_NUM_2 0xC90 /* bit strangely arranged */ -#define EISA_UNIQUE_NUM_3 0xC92 -#define EISA_MANUF_YEAR 0xC98 /* when */ -#define EISA_MANUF_WEEK 0xC9A /* more when */ - -#define EISA_TP_BOOT_FROM_RAM 0x01 -#define EISA_TP_BOOT_FROM_LINK 0x00 -#define EISA_TP_FAST_LINKS 0x02 -#define EISA_TP_SLOW_LINKS 0x00 -#define EISA_TP_BUS_ENABLE 0x04 -#define EISA_TP_BUS_DISABLE 0x00 -#define EISA_TP_RUN 0x08 -#define EISA_TP_RESET 0x00 -#define EISA_POLLED 0x00 -#define EISA_IRQ_3 0x30 -#define EISA_IRQ_4 0x40 -#define EISA_IRQ_5 0x50 -#define EISA_IRQ_6 0x60 -#define EISA_IRQ_7 0x70 -#define EISA_IRQ_9 0x90 -#define EISA_IRQ_10 0xA0 -#define EISA_IRQ_11 0xB0 -#define EISA_IRQ_12 0xC0 -#define EISA_IRQ_14 0xE0 -#define EISA_IRQ_15 0xF0 - -#define EISA_INTERRUPT_MASK 0xF0 -#define EISA_CONTROL_MASK 0x0F - -#define RIO_EISA_DEFAULT_MODE EISA_TP_SLOW_LINKS - -#define RIOEisaToIvec(X) (uchar )((uchar)((X) & EISA_INTERRUPT_MASK)>>4) - -#define INBZ(z,x) inb(((z)<<12) | (x)) -#define OUTBZ(z,x,y) outb((((z)<<12) | (x)), y) - -#endif /* __rio_eisa_h__ */ -- cgit v1.2.3 From bed445d41e0ca4b09ffbb82274fb79fb444030e7 Mon Sep 17 00:00:00 2001 From: Alan Cox Date: Mon, 16 Jan 2006 16:50:07 +0000 Subject: [PATCH] Remove enable.h from rio (unused file) Signed-off-by: Linus Torvalds --- drivers/char/rio/enable.h | 48 ----------------------------------------------- 1 file changed, 48 deletions(-) delete mode 100644 drivers/char/rio/enable.h (limited to 'drivers/char/rio') diff --git a/drivers/char/rio/enable.h b/drivers/char/rio/enable.h deleted file mode 100644 index e06673fa48cf..000000000000 --- a/drivers/char/rio/enable.h +++ /dev/null @@ -1,48 +0,0 @@ -/**************************************************************************** - ******* ******* - ******* E N A B L E H E A D E R S - ******* ******* - **************************************************************************** - - Author : Ian Nandhra - 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 lint -#ifdef SCCS -static char *_rio_enable_h_sccs = "@(#)enable.h 1.1"; -#endif -#endif - - -#define ENABLE_LTT TRUE -#define ENABLE_LRT TRUE - - -/*********** end of file ***********/ -- cgit v1.2.3 From 85ae2f9cabbb029b0fce3fa8c641de7f0983e308 Mon Sep 17 00:00:00 2001 From: Alan Cox Date: Mon, 16 Jan 2006 16:51:37 +0000 Subject: [PATCH] Remove formpkt.h from rio (unused file) Signed-off-by: Linus Torvalds --- drivers/char/rio/formpkt.h | 153 --------------------------------------------- 1 file changed, 153 deletions(-) delete mode 100644 drivers/char/rio/formpkt.h (limited to 'drivers/char/rio') diff --git a/drivers/char/rio/formpkt.h b/drivers/char/rio/formpkt.h deleted file mode 100644 index 3c7c91ace3ee..000000000000 --- a/drivers/char/rio/formpkt.h +++ /dev/null @@ -1,153 +0,0 @@ - - -/**************************************************************************** - ******* ******* - ******* F O R M P A C K E T H E A D E R F I L E - ******* ******* - **************************************************************************** - - Author : Ian Nandhra - 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 _formpkt_h -#define _formpkt_h 1 - -#ifndef lint -#ifdef SCCS -static char *_rio_formpkt_h_sccs = "@(#)formpkt.h 1.1"; -#endif -#endif - -typedef struct FORM_BOOT_PKT_1 FORM_BOOT_PKT_1; -struct FORM_BOOT_PKT_1 { - ushort pkt_number; - ushort pkt_total; - ushort boot_top; -}; - -typedef struct FORM_BOOT_PKT_2 FORM_BOOT_PKT_2; -struct FORM_BOOT_PKT_2 { - ushort pkt_number; - char boot_data[10]; -}; - - -typedef struct FORM_ATTACH_RTA FORM_ATTACH_RTA; -struct FORM_ATTACH_RTA { - char cmd_code; - char booter_serial[4]; - char booter_link; - char bootee_serial[4]; - char bootee_link; -}; - - -typedef struct FORM_BOOT_ID FORM_BOOT_ID; -struct FORM_BOOT_ID { - char cmd_code; - char bootee_serial[4]; - char bootee_prod_id; - char bootee_link; -}; - - - -typedef struct FORM_ROUTE_1 FORM_ROUTE_1; -struct FORM_ROUTE_1 { - char cmd_code; - char pkt_number; - char total_in_sequence; - char unit_id; - char host_unit_id; -}; - -typedef struct FORM_ROUTE_2 FORM_ROUTE_2; -struct FORM_ROUTE_2 { - char cmd_code; - char pkt_number; - char total_in_sequence; - char route_data[9]; -}; - -typedef struct FORM_ROUTE_REQ FORM_ROUTE_REQ; -struct FORM_ROUTE_REQ { - char cmd_code; - char pkt_number; - char total_in_sequence; - char route_data[10]; -}; - - -typedef struct FORM_ERROR FORM_ERROR; -struct FORM_ERROR { - char cmd_code; - char error_code; - -}; - -typedef struct FORM_STATUS FORM_STATUS; -struct FORM_STATUS { - char cmd_code; - char status_code; - char last_packet_valid; - char tx_buffer; - char rx_buffer; - char port_status; - char phb_status; -}; - - -typedef struct FORM_LINK_STATUS FORM_LINK_STATUS; -struct FORM_LINK_STATUS { - char cmd_code; - char status_code; - char link_number; - ushort rx_errors; - ushort tx_errors; - ushort csum_errors; - ushort disconnects; -}; - - - -typedef struct FORM_PARTITION FORM_PARTITION; -struct FORM_PARTITION { - char cmd_code; - char status_code; - char port_number; - char tx_max; - char rx_max; - char rx_limit; -}; - - -#endif - -/*********** end of file ***********/ -- cgit v1.2.3 From b52a90dbe654c89bb9a50c90462a69931701428f Mon Sep 17 00:00:00 2001 From: Alan Cox Date: Mon, 16 Jan 2006 16:52:36 +0000 Subject: [PATCH] Remove hosthw.h from rio (unused file) Signed-off-by: Linus Torvalds --- drivers/char/rio/hosthw.h | 55 ----------------------------------------------- 1 file changed, 55 deletions(-) delete mode 100644 drivers/char/rio/hosthw.h (limited to 'drivers/char/rio') diff --git a/drivers/char/rio/hosthw.h b/drivers/char/rio/hosthw.h deleted file mode 100644 index 6281fe47f4e9..000000000000 --- a/drivers/char/rio/hosthw.h +++ /dev/null @@ -1,55 +0,0 @@ -/**************************************************************************** - ******* ******* - ******* H O S T H A R D W A R E - ******* ******* - **************************************************************************** - - 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 lint -#ifdef SCCS_LABELS -static char *_rio_hosthw_h_sccs = "@(#)hosthw.h 1.2"; -#endif -#endif - -#define SET_OTHER_INTERRUPT ( (volatile u_short *) 0x7c80 ) -#define SET_EISA_INTERRUPT ( (volatile u_short *) 0x7ef0 ) - -#define EISA_HOST 0x30 -#define AT_HOST 0xa0 -#define MCA_HOST 0xb0 -#define PCI_HOST 0xd0 - -#define PRODUCT_MASK 0xf0 - - -/*********** end of file ***********/ -- cgit v1.2.3 From 67abbfe7deccf4a800fb246f9cecd6b7836ab150 Mon Sep 17 00:00:00 2001 From: Alan Cox Date: Mon, 16 Jan 2006 16:53:38 +0000 Subject: [PATCH] Remove internal firmware building files from rio Signed-off-by: Linus Torvalds --- drivers/char/rio/lrt.h | 52 ---------------------------------------------- drivers/char/rio/ltt.h | 52 ---------------------------------------------- drivers/char/rio/lttwake.h | 50 -------------------------------------------- 3 files changed, 154 deletions(-) delete mode 100644 drivers/char/rio/lrt.h delete mode 100644 drivers/char/rio/ltt.h delete mode 100644 drivers/char/rio/lttwake.h (limited to 'drivers/char/rio') diff --git a/drivers/char/rio/lrt.h b/drivers/char/rio/lrt.h deleted file mode 100644 index b41764d7a22a..000000000000 --- a/drivers/char/rio/lrt.h +++ /dev/null @@ -1,52 +0,0 @@ -/**************************************************************************** - ******* ******* - ******* L R T - ******* ******* - **************************************************************************** - - 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 lint -#ifdef SCCS_LABELS -static char *_rio_lrt_h_sccs = "@(#)lrt.h 1.1"; -#endif -#endif - - -#ifdef DCIRRUS -#define LRT_STACK (unsigned short) 600 -#else -#define LRT_STACK (ushort) 200 -#endif - - - -/*********** end of file ***********/ diff --git a/drivers/char/rio/ltt.h b/drivers/char/rio/ltt.h deleted file mode 100644 index ab04004d4048..000000000000 --- a/drivers/char/rio/ltt.h +++ /dev/null @@ -1,52 +0,0 @@ -/**************************************************************************** - ******* ******* - ******* L T T - ******* ******* - **************************************************************************** - - 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 lint -#ifdef SCCS_LABELS -static char *_rio_ltt_h_sccs = "@(#)ltt.h 1.1"; -#endif -#endif - -#ifdef DCIRRUS -#define LTT_STACK (unsigned short) 600 -#else -#define LTT_STACK (ushort) 200 -#endif - - - - -/*********** end of file ***********/ diff --git a/drivers/char/rio/lttwake.h b/drivers/char/rio/lttwake.h deleted file mode 100644 index fdf0c1f250ab..000000000000 --- a/drivers/char/rio/lttwake.h +++ /dev/null @@ -1,50 +0,0 @@ - - - -/**************************************************************************** - ******* ******* - ******* L T T W A K E U P H E A D E R - ******* ******* - **************************************************************************** - - Author : Ian Nandhra - 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 lint -#ifdef SCCS_LABELS -static char *_rio_lttwake_h_sccs = "@(#)lttwake.h 1.1"; -#endif -#endif - -#define LTT_WAKEUP_STACK 500 -#define LTT_WAKEUP_INTERVAL (int) (500 * MILLISECOND) - - -/*********** end of file ***********/ -- cgit v1.2.3 From 125ca8fb5bbab8ff726bb538120b553f30cd136f Mon Sep 17 00:00:00 2001 From: Alan Cox Date: Mon, 16 Jan 2006 16:54:30 +0000 Subject: [PATCH] Remove mca.h from rio driver (unused file) Signed-off-by: Alan Cox Signed-off-by: Linus Torvalds --- drivers/char/rio/mca.h | 73 -------------------------------------------------- 1 file changed, 73 deletions(-) delete mode 100644 drivers/char/rio/mca.h (limited to 'drivers/char/rio') diff --git a/drivers/char/rio/mca.h b/drivers/char/rio/mca.h deleted file mode 100644 index d01e76be7a17..000000000000 --- a/drivers/char/rio/mca.h +++ /dev/null @@ -1,73 +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 : mca.h -** SID : 1.2 -** Last Modified : 11/6/98 11:34:11 -** Retrieved : 11/6/98 11:34:21 -** -** ident @(#)mca.h 1.2 -** -** ----------------------------------------------------------------------------- -*/ - -#ifndef __rio_mca_h__ -#define __rio_mca_h__ - -#ifdef SCCS_LABELS -static char *_mca_h_sccs_ = "@(#)mca.h 1.2"; -#endif - -/* -** Micro Channel stuff -*/ - -#define McaMaxSlots 8 -#define McaSlotSelect 0x96 -#define McaSlotEnable 0x08 -#define McaIdLow 0x100 -#define McaIdHigh 0x101 -#define McaIrqEnable 0x102 -#define McaMemory 0x103 -#define McaRIOId 0x6a5c -#define McaIrq9 0x00 -#define McaIrq3 0x02 -#define McaIrq4 0x04 -#define McaIrq7 0x06 -#define McaIrq10 0x08 -#define McaIrq11 0x0A -#define McaIrq12 0x0C -#define McaIrq15 0x0E -#define McaIrqMask 0x0E -#define McaCardEnable 0x01 -#define McaAddress(X) (((X)&0xFF)<<16) - -#define McaTpFastLinks 0x40 -#define McaTpSlowLinks 0x00 -#define McaTpBootFromRam 0x01 -#define McaTpBootFromLink 0x00 -#define McaTpBusEnable 0x02 -#define McaTpBusDisable 0x00 - -#define RIO_MCA_DEFAULT_MODE SLOW_LINKS - -#endif /* __rio_mca_h__ */ -- cgit v1.2.3 From 009c4cb8aa0a32548c5aaec5b7b49b307fb6bf6a Mon Sep 17 00:00:00 2001 From: Alan Cox Date: Mon, 16 Jan 2006 16:56:16 +0000 Subject: [PATCH] Remove mesg.h from rio driver (unused file) Signed-off-by: Alan Cox Signed-off-by: Linus Torvalds --- drivers/char/rio/mesg.h | 41 ----------------------------------------- 1 file changed, 41 deletions(-) delete mode 100644 drivers/char/rio/mesg.h (limited to 'drivers/char/rio') diff --git a/drivers/char/rio/mesg.h b/drivers/char/rio/mesg.h deleted file mode 100644 index dd9be586ec6f..000000000000 --- a/drivers/char/rio/mesg.h +++ /dev/null @@ -1,41 +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 : mesg.h -** SID : 1.2 -** Last Modified : 11/6/98 11:34:12 -** Retrieved : 11/6/98 11:34:21 -** -** ident @(#)mesg.h 1.2 -** -** ----------------------------------------------------------------------------- -*/ - -#ifndef __rio_mesg_h__ -#define __rio_mesg_h__ - -#ifdef SCCS_LABELS -static char *_mesg_h_sccs_ = "@(#)mesg.h 1.2"; -#endif - - -#endif /* __rio_mesg_h__ */ -- cgit v1.2.3 From 735f88c62ec8df5a3ec730c1bbf47907d76b6f75 Mon Sep 17 00:00:00 2001 From: Alan Cox Date: Mon, 16 Jan 2006 16:57:18 +0000 Subject: [PATCH] Remove poll.h from rio driver (unused file) Signed-off-by: Alan Cox Signed-off-by: Linus Torvalds --- drivers/char/rio/poll.h | 73 ------------------------------------------------- 1 file changed, 73 deletions(-) delete mode 100644 drivers/char/rio/poll.h (limited to 'drivers/char/rio') diff --git a/drivers/char/rio/poll.h b/drivers/char/rio/poll.h deleted file mode 100644 index 9616ee4c6cd5..000000000000 --- a/drivers/char/rio/poll.h +++ /dev/null @@ -1,73 +0,0 @@ -/**************************************************************************** - ******* ******* - ******* P O L L - ******* ******* - **************************************************************************** - - 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 _poll_h -#define _poll_h - -#ifndef lint -#ifdef SCCS_LABELS -static char *_rio_poll_h_sccs = "@(#)poll.h 1.2"; -#endif -#endif - - -#ifdef HOST -#define POLL_STACK 100 -#endif -#ifdef RTA -#define POLL_STACK 200 -#endif - -#define POLL_PERIOD (int) SECOND - -/* The various poll commands */ -#define POLL_POLL 0 /* We are connected and happy.. */ -#define POLL_INTRO 1 /* Introduction packet */ -#define POLL_TOPOLOGY 2 /* Topology update */ -#define POLL_ASSIGN 3 /* ID assign */ -#define POLL_FOAD 4 /* F*** Off And Die */ -#define POLL_LMD 5 /* Let Me Die */ -#define POLL_DYB 6 /* Die You Ba***** */ - -/* The way data fields are split up for POLL packets */ -#define POLL_HOST_SERIAL 2 /* Host who booted me */ -#define POLL_MY_SERIAL 6 /* My serial number */ -#define POLL_YOUR_ID 1 /* Your ID number */ -#define POLL_TOPOLOGY_FIELDS 2 /* Topology maps */ - -#endif - -/*********** end of file ***********/ -- cgit v1.2.3 From 0d336ceb1e35e12ec26936be421da99eeff0a3de Mon Sep 17 00:00:00 2001 From: Alan Cox Date: Mon, 16 Jan 2006 16:58:38 +0000 Subject: [PATCH] Remove proto.h from rio driver (unused file) Signed-off-by: Alan Cox Signed-off-by: Linus Torvalds --- drivers/char/rio/proto.h | 244 ----------------------------------------------- 1 file changed, 244 deletions(-) delete mode 100644 drivers/char/rio/proto.h (limited to 'drivers/char/rio') diff --git a/drivers/char/rio/proto.h b/drivers/char/rio/proto.h deleted file mode 100644 index f9a3376333e5..000000000000 --- a/drivers/char/rio/proto.h +++ /dev/null @@ -1,244 +0,0 @@ -/* - * - * (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. - */ -#ifndef _prototypes_h -#define _prototypes_h - - -/* -** boot.c -*/ -void init_boot(char *p, short stage); - -/* -** disconct.c -*/ -void kill_boot(LPB * link); -void disconnected(LPB * link); -short boot_3(LPB * link, PKT * pkt); -short send_3_pkt(LPB * link, PKT * pkt); - -/* -** error.c -*/ -void du_error(void); - -/* -** formpkt.c -*/ -ushort sum_it(PKT * pkt); -void form_rup_pkt(RUP * form_rup, PKT * pkt); -void form_poll_pkt(int type, LPB * link, int node); -void form_route_pkt(int type, PKT * pkt, LPB * link); - -/* -** idle.c -*/ -void idle(Process * idle_p); - -/* -** init.c -*/ -void general_init(void); -void mem_halt(int error); - -/* -** linkinit.c -*/ -void initlink(u_short number, LPB * link); -void runlink(LPB * link); - -/* -** list.c -*/ -PKT *get_free_start(void); -void put_free_start(PKT * pkt); - -#ifdef HOST -int can_remove_transmit(PKT ** pkt, PKT * pointer); -#endif - -#ifdef RTA -int spl7(void); -int spl0(void); -Q_BUF *get_free_q(void); -PKT *get_free_end(void); -int add_end(PKT * pkt, PHB * phb, int type); -unsigned short free_packets(PHB * phb, int type); -int can_remove_start(PKT ** pkt, PHB * phb, int type); -int can_add_start(PHB * phb, int type); -int can_add_end(PHB * phb, int type); -void put_free_end(PKT * pkt); -int remove_start(PKT ** pkt, PHB * phb, int type); -#endif - -/* -** Lrt.c -*/ -void lrt(Process * lrt_p, LPB * link); - -#ifdef RTA -void set_led_red(LPB * link); -#endif - -/* -** ltt.c -*/ -void ltt(Process * ltt_p, LPB * link, PHB * phb_ptr[]); -void send_poll(LPB * link); -void request_id(LPB * link); -void send_topology_update(LPB * link); -void send_topology(LPB * link); -void supply_id(LPB * link); - -#ifdef RTA -void redirect_queue(LPB * link, ushort flush); -int obtain_rup(int rup_number, PKT ** pkt_address, LPB * link); -#endif - -#ifdef TESTING_PERF -int consume_cpu(void); -#endif - -/* -** lttwake.c -*/ -#ifdef HOST -void ltt_wakeup(Process * ltt_wakeup_p); -#endif - -/* -** mapgen.c -*/ -void generate_id_map(short mapping, ROUTE_STR route[]); -void gen_map(int mapping, int looking_at, int come_from, ROUTE_STR route[], int link, int *ttl); -void adjust_ttl(int mapping, int looking_at, int come_from, ROUTE_STR route[], int link, int *ttl); -void init_sys_map(void); - -/* -** mmu.c -*/ -char *rio_malloc(unsigned int amount); -char *rio_calloc(unsigned int num, unsigned int size); -ERROR rio_mmu_init(uint total_mem); - -/* -** partn.c -*/ -void partition_tx(struct PHB *phb, u_short tx_size, u_short rx_size, u_short rx_limit); - -/* -** poll.c -*/ -void tx_poll(Process * tx_poll_p); - -/* -** process.c -*/ -int get_proc_space(Process ** pd, int **pws, int wssize); - -/* -** readrom.c -*/ -void read_serial_number(char *buf); - -/* -** rio.c -*/ -int main(void); - -/* -** route.c -*/ -void route_update(PKT * pkt, LPB * link); - -/* -** rtainit.c -*/ -#if defined(RTA) -void rta_init(ushort RtaType); -#endif /* defined(RTA) */ - -/* -** rupboot.c -*/ -void rup_boot(PKT * pkt, RUP * this_rup, LPB * link); - -#ifdef RTA -void kill_your_neighbour(int link_to_kill); -#endif - -/* -** rupcmd.c -*/ -void rup_command(PKT * pkt, struct RUP *this_rup, LPB * link); - -/* -** ruperr.c -*/ -void rup_error(PKT * pkt, RUP * this_rup, LPB * link); -void illegal_cmd(PKT * src_pkt); - -/* -** ruppoll.c -*/ -void rup_poll(PKT * pkt, RUP * this_rup, LPB * link); - -/* -** ruppower.c -*/ -void rup_power(PKT * pkt, RUP * this_rup, LPB * link); - -/* -** ruprm.c -*/ -void rup_route_map(PKT * pkt, RUP * this_rup, LPB * link); - -/* -** rupstat.c -*/ -void rup_status(PKT * pkt, RUP * this_rup, LPB * link); - -/* -** rupsync.c -*/ -void rup_sync(PKT * pkt); - -/* -** rxpkt.c -*/ -ERROR rx_pkt(PKT_ptr_ptr pkt_address, LPB * link); - -/* -** sendsts.c -*/ -void send_status(PKT * requesting_pkt, RUP * this_rup); - -/* -** serial.c -*/ -void assign_serial(char *ser_in, char *ser_out); -int cmp_serial(char *ser_1, char *ser_2); - -/* -** txpkt.c -*/ -ERROR tx_pkt(PKT * pkt, LPB * link); -short send_sync(LPB * link); - -#endif /* _prototypes_h */ -- cgit v1.2.3 From 8618751503b66f1c2b1f8e715ffc006fa91c2400 Mon Sep 17 00:00:00 2001 From: Alan Cox Date: Mon, 16 Jan 2006 16:59:40 +0000 Subject: [PATCH] Remove file riolocks.h from rio driver (unused file) Signed-off-by: Alan Cox Signed-off-by: Linus Torvalds --- drivers/char/rio/riolocks.h | 43 ------------------------------------------- 1 file changed, 43 deletions(-) delete mode 100644 drivers/char/rio/riolocks.h (limited to 'drivers/char/rio') diff --git a/drivers/char/rio/riolocks.h b/drivers/char/rio/riolocks.h deleted file mode 100644 index 0e0cdacebe0b..000000000000 --- a/drivers/char/rio/riolocks.h +++ /dev/null @@ -1,43 +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 : riolocks.h -** SID : 1.2 -** Last Modified : 11/6/98 11:34:13 -** Retrieved : 11/6/98 11:34:22 -** -** ident @(#)riolocks.h 1.2 -** -** ----------------------------------------------------------------------------- -*/ - -#ifndef __rio_riolocks_h__ -#define __rio_riolocks_h__ - -#ifdef SCCS_LABELS -static char *_riolocks_h_sccs_ = "@(#)riolocks.h 1.2"; -#endif - -#define LOCKB(lk) lockb(lk); -#define UNLOCKB(lk, oldspl) unlockb(lk, oldspl); - -#endif -- cgit v1.2.3 From 69da7f9a63679a8af67325c572a3bd1338c05df8 Mon Sep 17 00:00:00 2001 From: Alan Cox Date: Mon, 16 Jan 2006 17:01:41 +0000 Subject: [PATCH] Remove riotime.h from rio driver (unused file) Signed-off-by: Alan Cox Signed-off-by: Linus Torvalds --- drivers/char/rio/riotime.h | 63 ---------------------------------------------- 1 file changed, 63 deletions(-) delete mode 100644 drivers/char/rio/riotime.h (limited to 'drivers/char/rio') diff --git a/drivers/char/rio/riotime.h b/drivers/char/rio/riotime.h deleted file mode 100644 index 35e01cd103d0..000000000000 --- a/drivers/char/rio/riotime.h +++ /dev/null @@ -1,63 +0,0 @@ -/**************************************************************************** - ******* ******* - ******* T I M E - ******* ******* - **************************************************************************** - - Author : 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 _riotime_h -#define _riotime_h 1 - -#ifndef lint -#ifdef SCCS -static char *_rio_riotime_h_sccs = "@(#)riotime.h 1.1"; -#endif -#endif - -#define TWO_POWER_FIFTEEN (ushort)32768 -#define RioTime() riotime -#define RioTimeAfter(time1,time2) ((ushort)time1 - (ushort)time2) < TWO_POWER_FIFTEEN -#define RioTimePlus(time1,time2) ((ushort)time1 + (ushort)time2) - -/************************************** - * Convert a RIO tick (1/10th second) - * into transputer low priority ticks - *************************************/ -#define RioTimeToLow(time) (time*(100000 / 64)) -#define RioLowToTime(time) ((time*64)/100000) - -#define RIOTENTHSECOND (ushort)1 -#define RIOSECOND (ushort)(RIOTENTHSECOND * 10) -#endif - -/*********** end of file ***********/ -- cgit v1.2.3 From a09be029bbf8ceded3d9dd9715df70f1f8297b80 Mon Sep 17 00:00:00 2001 From: Alan Cox Date: Mon, 16 Jan 2006 17:02:43 +0000 Subject: [PATCH] Remove file riowinif.h from rio driver (unused file) Signed-off-by: Alan Cox Signed-off-by: Linus Torvalds --- drivers/char/rio/riowinif.h | 1329 ------------------------------------------- 1 file changed, 1329 deletions(-) delete mode 100644 drivers/char/rio/riowinif.h (limited to 'drivers/char/rio') diff --git a/drivers/char/rio/riowinif.h b/drivers/char/rio/riowinif.h deleted file mode 100644 index f802d7593b80..000000000000 --- a/drivers/char/rio/riowinif.h +++ /dev/null @@ -1,1329 +0,0 @@ -/************************************************************************/ -/* */ -/* Title : RIO Shared Memory Window Inteface */ -/* */ -/* Author : N.P.Vassallo */ -/* */ -/* Creation : 7th June 1999 */ -/* */ -/* Version : 1.0.0 */ -/* */ -/* Copyright : (c) Specialix International Ltd. 1999 * - * 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. - * */ -/* Description : Prototypes, structures and definitions */ -/* describing RIO host card shared memory */ -/* window interface structures: */ -/* PARMMAP */ -/* RUP */ -/* PHB */ -/* LPB */ -/* PKT */ -/* */ -/************************************************************************/ - -/* History... - -1.0.0 07/06/99 NPV Creation. (based on PARMMAP.H) - -*/ - -#ifndef _riowinif_h /* If RIOWINDIF.H not already defined */ -#define _riowinif_h 1 - -/***************************************************************************** -******************************** ********************************* -******************************** General ********************************* -******************************** ********************************* -*****************************************************************************/ - -#define TPNULL ((_u16)(0x8000)) - -/***************************************************************************** -******************************** ******************************** -******************************** PARM_MAP ******************************** -******************************** ******************************** -*****************************************************************************/ - -/* The PARM_MAP structure defines global values relating to the Host Card / RTA - and is the main structure from which all other structures are referenced. */ - -typedef struct _PARM_MAP { - _u16 phb_ptr; /* 0x00 Pointer to the PHB array */ - _u16 phb_num_ptr; /* 0x02 Ptr to Number of PHB's */ - _u16 free_list; /* 0x04 Free List pointer */ - _u16 free_list_end; /* 0x06 Free List End pointer */ - _u16 q_free_list_ptr; /* 0x08 Ptr to Q_BUF variable */ - _u16 unit_id_ptr; /* 0x0A Unit Id */ - _u16 link_str_ptr; /* 0x0C Link Structure Array */ - _u16 bootloader_1; /* 0x0E 1st Stage Boot Loader */ - _u16 bootloader_2; /* 0x10 2nd Stage Boot Loader */ - _u16 port_route_map_ptr; /* 0x12 Port Route Map */ - _u16 route_ptr; /* 0x14 Route Map */ - _u16 map_present; /* 0x16 Route Map present */ - _u16 pkt_num; /* 0x18 Total number of packets */ - _u16 q_num; /* 0x1A Total number of Q packets */ - _u16 buffers_per_port; /* 0x1C Number of buffers per port */ - _u16 heap_size; /* 0x1E Initial size of heap */ - _u16 heap_left; /* 0x20 Current Heap left */ - _u16 error; /* 0x22 Error code */ - _u16 tx_max; /* 0x24 Max number of tx pkts per phb */ - _u16 rx_max; /* 0x26 Max number of rx pkts per phb */ - _u16 rx_limit; /* 0x28 For high / low watermarks */ - _u16 links; /* 0x2A Links to use */ - _u16 timer; /* 0x2C Interrupts per second */ - _u16 rups; /* 0x2E Pointer to the RUPs */ - _u16 max_phb; /* 0x30 Mostly for debugging */ - _u16 living; /* 0x32 Just increments!! */ - _u16 init_done; /* 0x34 Initialisation over */ - _u16 booting_link; /* 0x36 */ - _u16 idle_count; /* 0x38 Idle time counter */ - _u16 busy_count; /* 0x3A Busy counter */ - _u16 idle_control; /* 0x3C Control Idle Process */ - _u16 tx_intr; /* 0x3E TX interrupt pending */ - _u16 rx_intr; /* 0x40 RX interrupt pending */ - _u16 rup_intr; /* 0x42 RUP interrupt pending */ - -} PARM_MAP; - -/* Same thing again, but defined as offsets... */ - -#define PM_phb_ptr 0x00 /* 0x00 Pointer to the PHB array */ -#define PM_phb_num_ptr 0x02 /* 0x02 Ptr to Number of PHB's */ -#define PM_free_list 0x04 /* 0x04 Free List pointer */ -#define PM_free_list_end 0x06 /* 0x06 Free List End pointer */ -#define PM_q_free_list_ptr 0x08 /* 0x08 Ptr to Q_BUF variable */ -#define PM_unit_id_ptr 0x0A /* 0x0A Unit Id */ -#define PM_link_str_ptr 0x0C /* 0x0C Link Structure Array */ -#define PM_bootloader_1 0x0E /* 0x0E 1st Stage Boot Loader */ -#define PM_bootloader_2 0x10 /* 0x10 2nd Stage Boot Loader */ -#define PM_port_route_map_ptr 0x12 /* 0x12 Port Route Map */ -#define PM_route_ptr 0x14 /* 0x14 Route Map */ -#define PM_map_present 0x16 /* 0x16 Route Map present */ -#define PM_pkt_num 0x18 /* 0x18 Total number of packets */ -#define PM_q_num 0x1A /* 0x1A Total number of Q packets */ -#define PM_buffers_per_port 0x1C /* 0x1C Number of buffers per port */ -#define PM_heap_size 0x1E /* 0x1E Initial size of heap */ -#define PM_heap_left 0x20 /* 0x20 Current Heap left */ -#define PM_error 0x22 /* 0x22 Error code */ -#define PM_tx_max 0x24 /* 0x24 Max number of tx pkts per phb */ -#define PM_rx_max 0x26 /* 0x26 Max number of rx pkts per phb */ -#define PM_rx_limit 0x28 /* 0x28 For high / low watermarks */ -#define PM_links 0x2A /* 0x2A Links to use */ -#define PM_timer 0x2C /* 0x2C Interrupts per second */ -#define PM_rups 0x2E /* 0x2E Pointer to the RUPs */ -#define PM_max_phb 0x30 /* 0x30 Mostly for debugging */ -#define PM_living 0x32 /* 0x32 Just increments!! */ -#define PM_init_done 0x34 /* 0x34 Initialisation over */ -#define PM_booting_link 0x36 /* 0x36 */ -#define PM_idle_count 0x38 /* 0x38 Idle time counter */ -#define PM_busy_count 0x3A /* 0x3A Busy counter */ -#define PM_idle_control 0x3C /* 0x3C Control Idle Process */ -#define PM_tx_intr 0x3E /* 0x4E TX interrupt pending */ -#define PM_rx_intr 0x40 /* 0x40 RX interrupt pending */ -#define PM_rup_intr 0x42 /* 0x42 RUP interrupt pending */ -#define sizeof_PARM_MAP 0x44 /* structure size = 0x44 */ - -/* PARM_MAP.error definitions... */ -#define E_NO_ERROR 0x00 -#define E_PROCESS_NOT_INIT 0x01 -#define E_LINK_TIMEOUT 0x02 -#define E_NO_ROUTE 0x03 -#define E_CONFUSED 0x04 -#define E_HOME 0x05 -#define E_CSUM_FAIL 0x06 -#define E_DISCONNECTED 0x07 -#define E_BAD_RUP 0x08 -#define E_NO_VIRGIN 0x09 -#define E_BOOT_RUP_BUSY 0x10 -#define E_CHANALLOC 0x80 -#define E_POLL_ALLOC 0x81 -#define E_LTTWAKE 0x82 -#define E_LTT_ALLOC 0x83 -#define E_LRT_ALLOC 0x84 -#define E_CIRRUS 0x85 -#define E_MONITOR 0x86 -#define E_PHB_ALLOC 0x87 -#define E_ARRAY_ALLOC 0x88 -#define E_QBUF_ALLOC 0x89 -#define E_PKT_ALLOC 0x8a -#define E_GET_TX_Q_BUF 0x8b -#define E_GET_RX_Q_BUF 0x8c -#define E_MEM_OUT 0x8d -#define E_MMU_INIT 0x8e -#define E_LTT_INIT 0x8f -#define E_LRT_INIT 0x90 -#define E_LINK_RUN 0x91 -#define E_MONITOR_ALLOC 0x92 -#define E_MONITOR_INIT 0x93 -#define E_POLL_INIT 0x94 - -/* PARM_MAP.links definitions... */ -#define RIO_LINK_ENABLE 0x80FF - -/***************************************************************************** -********************************** *********************************** -********************************** RUP *********************************** -********************************** *********************************** -*****************************************************************************/ - -/* The RUP (Remote Unit Port) structure relates to the Remote Terminal Adapters - attached to the system and there is normally an array of MAX_RUPS (=16) structures - in a host card, defined by PARM_MAP->rup. */ - -typedef struct _RUP { - _u16 txpkt; /* 0x00 Outgoing packet */ - _u16 rxpkt; /* 0x02 ncoming packet */ - _u16 link; /* 0x04 Which link to send packet down ? */ - _u8 rup_dest_unit[2]; /* 0x06 Destination Unit */ - _u16 handshake; /* 0x08 Handshaking */ - _u16 timeout; /* 0x0A Timeout */ - _u16 status; /* 0x0C Status */ - _u16 txcontrol; /* 0x0E Transmit control */ - _u16 rxcontrol; /* 0x10 Receive control */ - -} RUP; - -/* Same thing again, but defined as offsets... */ - -#define RUP_txpkt 0x00 /* 0x00 Outgoing packet */ -#define RUP_rxpkt 0x02 /* 0x02 Incoming packet */ -#define RUP_link 0x04 /* 0x04 Which link to send packet down ? */ -#define RUP_rup_dest_unit 0x06 /* 0x06 Destination Unit */ -#define RUP_handshake 0x08 /* 0x08 Handshaking */ -#define RUP_timeout 0x0A /* 0x0A Timeout */ -#define RUP_status 0x0C /* 0x0C Status */ -#define RUP_txcontrol 0x0E /* 0x0E Transmit control */ -#define RUP_rxcontrol 0x10 /* 0x10 Receive control */ -#define sizeof_RUP 0x12 /* structure size = 0x12 */ - -#define MAX_RUP 16 - -/* RUP.txcontrol definitions... */ -#define TX_RUP_INACTIVE 0 /* Nothing to transmit */ -#define TX_PACKET_READY 1 /* Transmit packet ready */ -#define TX_LOCK_RUP 2 /* Transmit side locked */ - -/* RUP.txcontrol definitions... */ -#define RX_RUP_INACTIVE 0 /* Nothing received */ -#define RX_PACKET_READY 1 /* Packet received */ - -#define RUP_NO_OWNER 0xFF /* RUP not owned by any process */ - -/***************************************************************************** -********************************** *********************************** -********************************** PHB *********************************** -********************************** *********************************** -*****************************************************************************/ - -/* The PHB (Port Header Block) structure relates to the serial ports attached - to the system and there is normally an array of MAX_PHBS (=128) structures - in a host card, defined by PARM_MAP->phb_ptr and PARM_MAP->phb_num_ptr. */ - -typedef struct _PHB { - _u16 source; /* 0x00 Location of the PHB in the host card */ - _u16 handshake; /* 0x02 Used to manage receive packet flow control */ - _u16 status; /* 0x04 Internal port transmit/receive status */ - _u16 timeout; /* 0x06 Time period to wait for an ACK */ - _u16 link; /* 0x08 The host link associated with the PHB */ - _u16 destination; /* 0x0A Location of the remote port on the network */ - - _u16 tx_start; /* 0x0C first entry in the packet array for transmit packets */ - _u16 tx_end; /* 0x0E last entry in the packet array for transmit packets */ - _u16 tx_add; /* 0x10 position in the packet array for new transmit packets */ - _u16 tx_remove; /* 0x12 current position in the packet pointer array */ - - _u16 rx_start; /* 0x14 first entry in the packet array for receive packets */ - _u16 rx_end; /* 0x16 last entry in the packet array for receive packets */ - _u16 rx_add; /* 0x18 position in the packet array for new receive packets */ - _u16 rx_remove; /* 0x1A current position in the packet pointer array */ - -} PHB; - -/* Same thing again, but defined as offsets... */ - -#define PHB_source 0x00 /* 0x00 Location of the PHB in the host card */ -#define PHB_handshake 0x02 /* 0x02 Used to manage receive packet flow control */ -#define PHB_status 0x04 /* 0x04 Internal port transmit/receive status */ -#define PHB_timeout 0x06 /* 0x06 Time period to wait for an ACK */ -#define PHB_link 0x08 /* 0x08 The host link associated with the PHB */ -#define PHB_destination 0x0A /* 0x0A Location of the remote port on the network */ -#define PHB_tx_start 0x0C /* 0x0C first entry in the packet array for transmit packets */ -#define PHB_tx_end 0x0E /* 0x0E last entry in the packet array for transmit packets */ -#define PHB_tx_add 0x10 /* 0x10 position in the packet array for new transmit packets */ -#define PHB_tx_remove 0x12 /* 0x12 current position in the packet pointer array */ -#define PHB_rx_start 0x14 /* 0x14 first entry in the packet array for receive packets */ -#define PHB_rx_end 0x16 /* 0x16 last entry in the packet array for receive packets */ -#define PHB_rx_add 0x18 /* 0x18 position in the packet array for new receive packets */ -#define PHB_rx_remove 0x1A /* 0x1A current position in the packet pointer array */ -#define sizeof_PHB 0x1C /* structure size = 0x1C */ - -/* PHB.handshake definitions... */ -#define PHB_HANDSHAKE_SET 0x0001 /* Set by LRT */ -#define PHB_HANDSHAKE_RESET 0x0002 /* Set by ISR / driver */ -#define PHB_HANDSHAKE_FLAGS (PHB_HANDSHAKE_RESET|PHB_HANDSHAKE_SET) - /* Reset by ltt */ - -#define MAX_PHB 128 /* range 0-127 */ - -/***************************************************************************** -********************************** *********************************** -********************************** LPB *********************************** -********************************** *********************************** -*****************************************************************************/ - -/* The LPB (Link Parameter Block) structure relates to a RIO Network Link - and there is normally an array of MAX_LINKS (=4) structures in a host card, - defined by PARM_MAP->link_str_ptr. */ - -typedef struct _LPB { - _u16 link_number; /* 0x00 Link Number */ - _u16 in_ch; /* 0x02 Link In Channel */ - _u16 out_ch; /* 0x04 Link Out Channel */ - _u8 attached_serial[4]; /* 0x06 Attached serial number */ - _u8 attached_host_serial[4]; /* 0x0A Serial number of Host who booted other end */ - _u16 descheduled; /* 0x0E Currently Descheduled */ - _u16 state; /* 0x10 Current state */ - _u16 send_poll; /* 0x12 Send a Poll Packet */ - _u16 ltt_p; /* 0x14 Process Descriptor */ - _u16 lrt_p; /* 0x16 Process Descriptor */ - _u16 lrt_status; /* 0x18 Current lrt status */ - _u16 ltt_status; /* 0x1A Current ltt status */ - _u16 timeout; /* 0x1C Timeout value */ - _u16 topology; /* 0x1E Topology bits */ - _u16 mon_ltt; /* 0x20 */ - _u16 mon_lrt; /* 0x22 */ - _u16 num_pkts; /* 0x24 */ - _u16 add_packet_list; /* 0x26 Add packets to here */ - _u16 remove_packet_list; /* 0x28 Send packets from here */ - - _u16 lrt_fail_chan; /* 0x2A Lrt's failure channel */ - _u16 ltt_fail_chan; /* 0x2C Ltt's failure channel */ - - RUP rup; /* 0x2E RUP structure for HOST to driver comms */ - RUP link_rup; /* 0x40 RUP for the link (POLL, topology etc.) */ - _u16 attached_link; /* 0x52 Number of attached link */ - _u16 csum_errors; /* 0x54 csum errors */ - _u16 num_disconnects; /* 0x56 number of disconnects */ - _u16 num_sync_rcvd; /* 0x58 # sync's received */ - _u16 num_sync_rqst; /* 0x5A # sync requests */ - _u16 num_tx; /* 0x5C Num pkts sent */ - _u16 num_rx; /* 0x5E Num pkts received */ - _u16 module_attached; /* 0x60 Module tpyes of attached */ - _u16 led_timeout; /* 0x62 LED timeout */ - _u16 first_port; /* 0x64 First port to service */ - _u16 last_port; /* 0x66 Last port to service */ - -} LPB; - -/* Same thing again, but defined as offsets... */ - -#define LPB_link_number 0x00 /* 0x00 Link Number */ -#define LPB_in_ch 0x02 /* 0x02 Link In Channel */ -#define LPB_out_ch 0x04 /* 0x04 Link Out Channel */ -#define LPB_attached_serial 0x06 /* 0x06 Attached serial number */ -#define LPB_attached_host_serial 0x0A /* 0x0A Serial number of Host who booted other end */ -#define LPB_descheduled 0x0E /* 0x0E Currently Descheduled */ -#define LPB_state 0x10 /* 0x10 Current state */ -#define LPB_send_poll 0x12 /* 0x12 Send a Poll Packet */ -#define LPB_ltt_p 0x14 /* 0x14 Process Descriptor */ -#define LPB_lrt_p 0x16 /* 0x16 Process Descriptor */ -#define LPB_lrt_status 0x18 /* 0x18 Current lrt status */ -#define LPB_ltt_status 0x1A /* 0x1A Current ltt status */ -#define LPB_timeout 0x1C /* 0x1C Timeout value */ -#define LPB_topology 0x1E /* 0x1E Topology bits */ -#define LPB_mon_ltt 0x20 /* 0x20 */ -#define LPB_mon_lrt 0x22 /* 0x22 */ -#define LPB_num_pkts 0x24 /* 0x24 */ -#define LPB_add_packet_list 0x26 /* 0x26 Add packets to here */ -#define LPB_remove_packet_list 0x28 /* 0x28 Send packets from here */ -#define LPB_lrt_fail_chan 0x2A /* 0x2A Lrt's failure channel */ -#define LPB_ltt_fail_chan 0x2C /* 0x2C Ltt's failure channel */ -#define LPB_rup 0x2E /* 0x2E RUP structure for HOST to driver comms */ -#define LPB_link_rup 0x40 /* 0x40 RUP for the link (POLL, topology etc.) */ -#define LPB_attached_link 0x52 /* 0x52 Number of attached link */ -#define LPB_csum_errors 0x54 /* 0x54 csum errors */ -#define LPB_num_disconnects 0x56 /* 0x56 number of disconnects */ -#define LPB_num_sync_rcvd 0x58 /* 0x58 # sync's received */ -#define LPB_num_sync_rqst 0x5A /* 0x5A # sync requests */ -#define LPB_num_tx 0x5C /* 0x5C Num pkts sent */ -#define LPB_num_rx 0x5E /* 0x5E Num pkts received */ -#define LPB_module_attached 0x60 /* 0x60 Module tpyes of attached */ -#define LPB_led_timeout 0x62 /* 0x62 LED timeout */ -#define LPB_first_port 0x64 /* 0x64 First port to service */ -#define LPB_last_port 0x66 /* 0x66 Last port to service */ -#define sizeof_LPB 0x68 /* structure size = 0x68 */ - -#define LINKS_PER_UNIT 4 /* number of links from a host */ - -/***************************************************************************** -******************************** ******************************* -******************************** FREE_LIST ******************************* -******************************** ******************************* -*****************************************************************************/ - -/* Used to overlay packet headers when allocating/freeing packets from the free list */ - -typedef struct _FREE_LIST { - _u16 next; /* 0x00 offset of next list item */ - _u16 prev; /* 0x02 offset of previous list item */ - -} FREE_LIST; - -/* Same thing again, but defined as offsets... */ - -#define FL_next 0x00 /* 0x00 offset of next list item */ -#define FL_prev 0x02 /* 0x02 offset of previous list item */ - -/***************************************************************************** -********************************** *********************************** -********************************** PKT *********************************** -********************************** *********************************** -*****************************************************************************/ - -/* The PKT is the main unit of communication between Host Cards and RTAs across - the RIO network. */ - -#define PKT_MAX_DATA_LEN 72 /* Size of packet data */ - -typedef struct _PKT { - _u8 dest_unit; /* 0x00 Destination Unit Id */ - _u8 dest_port; /* 0x01 Destination Port */ - _u8 src_unit; /* 0x02 Source Unit Id */ - _u8 src_port; /* 0x03 Source Port */ - _u8 len; /* 0x04 Length (in bytes) of data field */ - _u8 control; /* 0x05 */ - _u8 data[PKT_MAX_DATA_LEN]; /* 0x06 Actual data */ - _u16 csum; /* 0x4E C-SUM */ - -} PKT; - -/* Same thing again, but defined as offsets... */ - -#define PKT_dest_unit 0x00 /* 0x00 Destination Unit Id */ -#define PKT_dest_port 0x01 /* 0x01 Destination Port */ -#define PKT_src_unit 0x02 /* 0x02 Source Unit Id */ -#define PKT_src_port 0x03 /* 0x03 Source Port */ -#define PKT_len 0x04 /* 0x04 Length (in bytes) of data field */ -#define PKT_control 0x05 /* 0x05 */ -#define PKT_data 0x06 /* 0x06 Actual data */ -#define PKT_csum 0x4E /* 0x4E C-SUM */ -#define sizeof_PKT 0x50 /* structure size = 0x50 */ - -/* PKT.len definitions... */ -#define PKT_CMD_BIT 0x80 -#define PKT_CMD_DATA 0x80 -#define PKT_LEN_MASK 0x7F - -/* PKT.control definitions... */ -#define PKT_ACK 0x40 -#define PKT_TGL 0x20 -#define DATA_WNDW 0x10 -#define PKT_TTL_MASK 0x0F -#define MAX_TTL 0x0F - -/***************************************************************************** -***************************** **************************** -***************************** Control Packets **************************** -***************************** **************************** -*****************************************************************************/ - -/* The following definitions and structures define the control packets sent - between the driver and RIO Ports, RTAs and Host Cards. */ - -#define PRE_EMPTIVE 0x80 /* Pre-emptive command (sent via port's RUP) */ - -/* "in-band" and "pre-emptive" port commands... */ -#define OPEN 0x00 /* Driver->RIO Open a port */ -#define CONFIG 0x01 /* Driver->RIO Configure a port */ -#define MOPEN 0x02 /* Driver->RIO Modem open (wait for DCD) */ -#define CLOSE 0x03 /* Driver->RIO Close a port */ -#define WFLUSH (0x04|PRE_EMPTIVE) /* Driver->RIO Write flush */ -#define RFLUSH (0x05|PRE_EMPTIVE) /* Driver->RIO Read flush */ -#define RESUME (0x06|PRE_EMPTIVE) /* Driver->RIO Behave as if XON received */ -#define SBREAK 0x07 /* Driver->RIO Start break */ -#define EBREAK 0x08 /* Driver->RIO End break */ -#define SUSPEND (0x09|PRE_EMPTIVE) /* Driver->RIO Behave as if XOFF received */ -#define FCLOSE (0x0A|PRE_EMPTIVE) /* Driver->RIO Force close */ -#define XPRINT 0x0B /* Driver->RIO Xprint packet */ -#define MBIS (0x0C|PRE_EMPTIVE) /* Driver->RIO Set modem lines */ -#define MBIC (0x0D|PRE_EMPTIVE) /* Driver->RIO Clear modem lines */ -#define MSET (0x0E|PRE_EMPTIVE) /* Driver->RIO Set modem lines */ -#define PCLOSE 0x0F /* Driver->RIO Pseudo close */ -#define MGET (0x10|PRE_EMPTIVE) /* Driver->RIO Force update of modem status */ -#define MEMDUMP (0x11|PRE_EMPTIVE) /* Driver->RIO DEBUG request for RTA memory */ -#define READ_REGISTER (0x12|PRE_EMPTIVE) /* Driver->RIO DEBUG read CD1400 register */ - -/* Remote Unit Port (RUP) packet definitions... (specified in PKT.dest_unit and PKT.src_unit) */ -#define SYNC_RUP 0xFF /* Download internal */ -#define COMMAND_RUP 0xFE /* Command ack/status */ -#define ERROR_RUP 0xFD /* Download internal */ -#define POLL_RUP 0xFC /* Download internal */ -#define BOOT_RUP 0xFB /* Used to boot RTAs */ -#define ROUTE_RUP 0xFA /* Used to specify routing/topology */ -#define STATUS_RUP 0xF9 /* Not used */ -#define POWER_RUP 0xF8 /* Download internal */ - -/* COMMAND_RUP definitions... */ -#define COMPLETE (0x20|PRE_EMPTIVE) /* RIO->Driver Command complete */ -#define BREAK_RECEIVED (0x21|PRE_EMPTIVE) /* RIO->Driver Break received */ -#define MODEM_STATUS (0x22|PRE_EMPTIVE) /* RIO->Driver Modem status change */ - -/* BOOT_RUP definitions... */ -#define BOOT_REQUEST 0x00 /* RIO->Driver Request for boot */ -#define BOOT_ABORT 0x01 /* Driver->RIO Abort a boot */ -#define BOOT_SEQUENCE 0x02 /* Driver->RIO Packet with firmware details */ -#define BOOT_COMPLETED 0x03 /* RIO->Driver Boot completed */ -#define IFOAD 0x2F /* Driver->RIO Shutdown/Reboot RTA (Fall Over And Die) */ -#define IDENTIFY 0x30 /* Driver->RIO Identify RTA */ -#define ZOMBIE 0x31 /* Driver->RIO Shutdown/Flash LEDs */ -#define UFOAD 0x32 /* Driver->RIO Shutdown/Reboot neighbouring RTA */ -#define IWAIT 0x33 /* Driver->RIO Pause booting process */ - -/* ROUTE_RUP definitions... */ -#define ROUTE_REQUEST 0x00 /* RIO->Driver Request an ID */ -#define ROUTE_FOAD 0x01 /* Driver->RIO Shutdown/reboot RTA */ -#define ROUTE_ALREADY 0x02 /* Driver->RIO Not used */ -#define ROUTE_USED 0x03 /* Driver->RIO Not used */ -#define ROUTE_ALLOCATE 0x04 /* Driver->RIO Allocate RTA RUP numbers */ -#define ROUTE_REQ_TOP 0x05 /* Driver->RIO Not used */ -#define ROUTE_TOPOLOGY 0x06 /* RIO->Driver Route/Topology status */ - -/***************************************************************************** -********************************** ********************************** -********************************** OPEN ********************************** -********************************** ********************************** -*****************************************************************************/ - -/* (Driver->RIO,in-band) - - Sent to open a port. - Structure of configuration info used with OPEN, CONFIG and MOPEN packets... */ - -#define PKT_Cmd (PKT_Data+0) /* Command code */ -#define PKT_Cor1 (PKT_Data+1) /* Channel Option Register 1 */ -#define PKT_Cor2 (PKT_Data+2) /* Channel Option Register 2 */ -#define PKT_Cor4 (PKT_Data+3) /* Channel Option Register 4 */ -#define PKT_Cor5 (PKT_Data+4) /* Channel Option Register 5 */ -#define PKT_TxXon (PKT_Data+5) /* Transmit XON character */ -#define PKT_TxXoff (PKT_Data+6) /* Transmit XOFF character */ -#define PKT_RxXon (PKT_Data+7) /* Receive XON character */ -#define PKT_RxXoff (PKT_Data+8) /* Receive XOFF character */ -#define PKT_Lnext (PKT_Data+9) /* Lnext character */ -#define PKT_TxBaud (PKT_Data+10) /* Transmit baud rate */ -#define PKT_RxBaud (PKT_Data+11) /* Receive baud rate */ - -/* COR1 definitions... */ -#define COR1_PARITY 0xE0 /* Parity mask */ -#define COR1_NONE 0x00 /* No parity */ -#define COR1_SPACE 0x20 /* Space parity */ -#define COR1_EVEN 0x40 /* Even parity */ -#define COR1_MARK 0xA0 /* Mark parity */ -#define COR1_ODD 0xC0 /* Odd parity */ - -#define COR1_STOPBITS 0x0C /* Stop bits mask */ -#define COR1_STOP1 0x00 /* 1 stop bit */ -#define COR1_STOP1_5 0x04 /* 1.5 stop bits */ -#define COR1_STOP2 0x08 /* 2 stop bits */ - -#define COR1_DATABITS 0x03 /* Data bits mask */ -#define COR1_DATA5 0x00 /* 5 data bits */ -#define COR1_DATA6 0x01 /* 6 data bits */ -#define COR1_DATA7 0x02 /* 7 data bits */ -#define COR1_DATA8 0x03 /* 8 data bits */ - -/* COR2 definitions... */ -#define COR2_XON_TXFLOW 0x40 /* XON/XOFF Transmit Flow */ -#define COR2_XANY_TXFLOW 0xC0 /* XON/XANY Transmit Flow */ -#define COR2_HUPCL 0x20 /* Hang Up On Close */ -#define COR2_DSR_TXFLOW 0x08 /* DSR Transmit Flow Control */ -#define COR2_RTS_RXFLOW 0x04 /* RTS Receive Flow Control */ -#define COR2_CTS_TXFLOW 0x02 /* CTS Transmit Flow Control */ -#define COR2_XON_RXFLOW 0x01 /* XON/XOFF Receive Flow */ - -/* COR4 definition... */ -#define COR4_IGNCR 0x80 /* Discard received CR */ -#define COR4_ICRNL 0x40 /* Map received CR -> NL */ -#define COR4_INLCR 0x20 /* Map received NL -> CR */ -#define COR4_IGNBRK 0x10 /* Ignore Received Break */ -#define COR4_NBRKINT 0x08 /* No interrupt on rx Break */ -#define COR4_IGNPAR 0x04 /* ignore rx parity error chars */ -#define COR4_PARMRK 0x02 /* Mark rx parity error chars */ -#define COR4_RAISEMOD 0x01 /* Raise modem lines on !0 baud */ - -/* COR5 definitions... */ -#define COR5_ISTRIP 0x80 /* Strip input chars to 7 bits */ -#define COR5_LNE 0x40 /* Enable LNEXT processing */ -#define COR5_CMOE 0x20 /* Match good & error characters */ -#define COR5_TAB3 0x10 /* TAB3 mode */ -#define COR5_TSTATE_ON 0x08 /* Enable tbusy/tstop monitoring */ -#define COR5_TSTATE_OFF 0x04 /* Disable tbusy/tstop monitoring */ -#define COR5_ONLCR 0x02 /* NL -> CR NL on output */ -#define COR5_OCRNL 0x01 /* CR -> NL on output */ - -/* 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 */ - -/***************************************************************************** -********************************* ********************************* -********************************* CONFIG ********************************* -********************************* ********************************* -*****************************************************************************/ - -/* (Driver->RIO,in-band) - - CONFIG is sent from the driver to configure an already opened port. - Packet structure is same as OPEN. */ - -/***************************************************************************** -********************************* ********************************** -********************************* MOPEN ********************************** -********************************* ********************************** -*****************************************************************************/ - -/* (Driver->RIO,in-band) - - MOPEN is sent from the driver to open a port attached to a modem. (in-band) - Packet structure is same as OPEN. */ - -/***************************************************************************** -********************************* ********************************** -********************************* CLOSE ********************************** -********************************* ********************************** -*****************************************************************************/ - -/* (Driver->RIO,in-band) - - CLOSE is sent from the driver to close a previously opened port. - No parameters. - */ -#if 0 -#define PKT_Cmd (PKT_Data+0) /* Command code */ -#endif -/***************************************************************************** -********************************* ********************************* -********************************* WFLUSH ********************************* -********************************* ********************************* -*****************************************************************************/ - -/* (Driver->RIO,pre-emptive) - - WFLUSH is sent pre-emptively from the driver to flush the write buffers and - packets of a port. (pre-emptive) - - WFLUSH is also sent in-band from the driver to a port as a marker to end - write flushing previously started by a pre-emptive WFLUSH packet. (in-band) - */ -#if 0 -#define PKT_Cmd (PKT_Data+0) /* Command code */ -#endif -#define PKT_PhbNum (PKT_Data+1) /* Port number wrt RTA */ - -/***************************************************************************** -********************************* ********************************* -********************************* RFLUSH ********************************* -********************************* ********************************* -*****************************************************************************/ - -/* (Driver->RIO,pre-emptive) - - RFLUSH is sent pre-emptively from the driver to flush the read buffers and - packets of a port. - */ -#if 0 -#define PKT_Cmd (PKT_Data+0) /* Command code */ -#define PKT_PhbNum (PKT_Data+1) /* Port number wrt RTA */ -#endif - -/***************************************************************************** -********************************* ********************************* -********************************* RESUME ********************************* -********************************* ********************************* -*****************************************************************************/ - -/* (Driver->RIO,pre-emptive) - - RESUME is sent pre-emptively from the driver to cause a port to resume - transmission of data if blocked by XOFF. (as if XON had been received) - */ -#if 0 -#define PKT_Cmd (PKT_Data+0) /* Command code */ -#define PKT_PhbNum (PKT_Data+1) /* Port number wrt RTA */ -#endif - -/***************************************************************************** -********************************* ********************************* -********************************* SBREAK ********************************* -********************************* ********************************* -*****************************************************************************/ - -/* (Driver->RIO,in-band) - - SBREAK is sent in-band from the driver to a port to suspend data and start - break signal transmission. - - If the break delay is 0, the break signal will be acknowledged with a - RUP_COMMAND, COMPLETE packet and continue until an EBREAK packet is received. - - Otherwise, there is no acknowledgement and the break signal will last for the - specified number of mS. - */ -#if 0 -#define PKT_Cmd (PKT_Data+0) /* Command code */ -#endif -#define PKT_BreakDelay (PKT_Data+1) /* Break delay in mS */ - -/***************************************************************************** -********************************* ********************************* -********************************* EBREAK ********************************* -********************************* ********************************* -*****************************************************************************/ - -/* (Driver->RIO,in-band) - - EBREAK is sent in-band from the driver to a port to stop transmission of a - break signal. - - No parameters. */ - -/***************************************************************************** -********************************* ******************************** -********************************* SUSPEND ******************************** -********************************* ******************************** -*****************************************************************************/ - -/* (Driver->RIO,pre-emptive) - - SUSPEND is sent pre-emptively from the driver to cause a port to suspend - transmission of data. (as if XOFF had been received) - */ -#if 0 -#define PKT_Cmd (PKT_Data+0) /* Command code */ -#define PKT_PhbNum (PKT_Data+1) /* Port number wrt RTA */ -#endif - -/***************************************************************************** -********************************* ********************************* -********************************* FCLOSE ********************************* -********************************* ********************************* -*****************************************************************************/ - -/* (Driver->RIO,pre-emptive) - - FCLOSE is sent pre-emptively from the driver to force close a port. - A force close flushes receive and transmit queues, and also lowers all output - modem signals if the COR5_HUPCL (Hang Up On Close) flag is set. - */ -#if 0 -#define PKT_Cmd (PKT_Data+0) /* Command code */ -#define PKT_PhbNum (PKT_Data+1) /* Port number wrt RTA */ -#endif - -/***************************************************************************** -********************************* ********************************* -********************************* XPRINT ********************************* -********************************* ********************************* -*****************************************************************************/ - -/* (Driver->RIO,in-band) - - XPRINT is sent as a normal I/O data packet except that the PKT_CMD_BIT of - the "len" field is set, and the first "data" byte is XPRINT. - - The I/O data in the XPRINT packet will contain the following: - - Transparent Print Start Sequence - - Transparent Print Data - - Transparent Print Stop Sequence. - */ -#if 0 -#define PKT_Cmd (PKT_Data+0) /* Command code */ -#define PKT_PhbNum (PKT_Data+1) /* Port number wrt RTA */ -#endif - -/***************************************************************************** -********************************** ********************************** -********************************** MBIS ********************************** -********************************** ********************************** -*****************************************************************************/ - -/* (Driver->RIO,pre-emptive) - - MBIS is sent pre-emptively from the driver to set a port's modem signals. - */ -#if 0 -#define PKT_Cmd (PKT_Data+0) /* Command code */ -#define PKT_PhbNum (PKT_Data+1) /* Port number wrt RTA */ -#endif -#define PKT_ModemSet (PKT_Data+4) /* Modem set signals mask */ - -/* ModemSet definitions... */ -#define MBIS_RTS 0x01 /* RTS modem signal */ -#define MBIS_DTR 0x02 /* DTR modem signal */ - -/***************************************************************************** -********************************** ********************************** -********************************** MBIC ********************************** -********************************** ********************************** -*****************************************************************************/ - -/* (Driver->RIO,pre-emptive) - - MBIC is sent pre-emptively from the driver to clear a port's modem signals. - */ -#if 0 -#define PKT_Cmd (PKT_Data+0) /* Command code */ -#define PKT_PhbNum (PKT_Data+1) /* Port number wrt RTA */ -#endif - -#define PKT_ModemClear (PKT_Data+4) /* Modem clear signals mask */ - -/* ModemClear definitions... */ -#define MBIC_RTS 0x01 /* RTS modem signal */ -#define MBIC_DTR 0x02 /* DTR modem signal */ - -/***************************************************************************** -********************************** ********************************** -********************************** MSET ********************************** -********************************** ********************************** -*****************************************************************************/ - -/* (Driver->RIO,pre-emptive) - - MSET is sent pre-emptively from the driver to set/clear a port's modem signals. */ -#if 0 -#define PKT_Cmd (PKT_Data+0) /* Command code */ -#define PKT_PhbNum (PKT_Data+1) /* Port number wrt RTA */ -#endif - -#define PKT_ModemSet (PKT_Data+4) /* Modem set signals mask */ - -/* ModemSet definitions... */ -#define MSET_RTS 0x01 /* RTS modem signal */ -#define MSET_DTR 0x02 /* DTR modem signal */ - -/***************************************************************************** -********************************* ********************************* -********************************* PCLOSE ********************************* -********************************* ********************************* -*****************************************************************************/ - -/* (Driver->RIO,in-band) - - PCLOSE is sent from the driver to pseudo close a previously opened port. - - The port will close when all data has been sent/received, however, the - port's transmit / receive and modem signals will be left enabled and the - port marked internally as Pseudo Closed. */ - -#define PKT_Cmd (PKT_Data+0) /* Command code */ - -/***************************************************************************** -********************************** ********************************** -********************************** MGET ********************************** -********************************** ********************************** -*****************************************************************************/ - -/* (Driver->RIO,pre-emptive) - - MGET is sent pre-emptively from the driver to request the port's current modem signals. */ - -#define PKT_Cmd (PKT_Data+0) /* Command code */ -#define PKT_PhbNum (PKT_Data+1) /* Port number wrt RTA */ - -/***************************************************************************** -********************************* ******************************** -********************************* MEMDUMP ******************************** -********************************* ******************************** -*****************************************************************************/ - -/* (Driver->RIO,pre-emptive) - - MEMDUMP is sent pre-emptively from the driver to request a dump of 32 bytes - of the specified port's RTA address space. - */ -#if 0 -#define PKT_Cmd (PKT_Data+0) /* Command code */ -#endif -#define PKT_PhbNum (PKT_Data+1) /* Port number wrt RTA */ -#define PKT_SubCmd (PKT_Data+5) /* Sub Command */ -#define PKT_Address (PKT_Data+6) /* Requested address */ - -/***************************************************************************** -****************************** ***************************** -****************************** READ_REGISTER ***************************** -****************************** ***************************** -*****************************************************************************/ - -/* (Driver->RIO,pre-emptive) - - READ_REGISTER is sent pre-emptively from the driver to request the contents - of the CD1400 register specified in address. - */ -#if 0 -#define PKT_Cmd (PKT_Data+0) /* Command code */ -#endif -#define PKT_PhbNum (PKT_Data+1) /* Port number wrt RTA */ -#define PKT_SubCmd (PKT_Data+5) /* Sub Command */ -#define PKT_Address (PKT_Data+6) /* Requested address */ - -/***************************************************************************** -************************ ************************** -************************ COMMAND_RUP - COMPLETE ************************** -************************ ************************** -*****************************************************************************/ - -/* (RIO->Driver,pre-emptive) - - COMMAND_RUP - COMPLETE is sent in response to all port I/O control command - packets, except MEMDUMP and READ_REGISTER. - */ -#if 0 -#define PKT_Cmd (PKT_Data+0) /* Command code */ -#endif -#define PKT_PhbNum (PKT_Data+1) /* Port number wrt RTA */ -#define PKT_Cmd2 (PKT_Data+2) /* Command code copy */ -#define PKT_ModemStatus (PKT_Data+3) /* Modem signal status */ -#define PKT_PortStatus (PKT_Data+4) /* Port signal status */ -#define PKT_SubCmd (PKT_Data+5) /* Sub Command */ - -/* ModemStatus definitions... */ -#define MODEM_DSR 0x80 /* Data Set Ready modem state */ -#define MODEM_CTS 0x40 /* Clear To Send modem state */ -#define MODEM_RI 0x20 /* Ring Indicate modem state */ -#define MODEM_CD 0x10 /* Carrier Detect modem state */ -#define MODEM_TSTOP 0x08 /* Transmit Stopped state */ -#define MODEM_TEMPTY 0x04 /* Transmit Empty state */ -#define MODEM_DTR 0x02 /* DTR modem output state */ -#define MODEM_RTS 0x01 /* RTS modem output state */ - -/* PortStatus definitions... */ -#define PORT_ISOPEN 0x01 /* Port open ? */ -#define PORT_HUPCL 0x02 /* Hangup on close? */ -#define PORT_MOPENPEND 0x04 /* Modem open pending */ -#define PORT_ISPARALLEL 0x08 /* Parallel port */ -#define PORT_BREAK 0x10 /* Port on break */ -#define PORT_STATUSPEND 0020 /* Status packet pending */ -#define PORT_BREAKPEND 0x40 /* Break packet pending */ -#define PORT_MODEMPEND 0x80 /* Modem status packet pending */ - -/***************************************************************************** -************************ ************************** -************************ COMMAND_RUP - COMPLETE ************************** -************************ ************************** -*****************************************************************************/ - -/* (RIO->Driver,pre-emptive) - - COMMAND_RUP - COMPLETE is sent in response to all port I/O control command - packets, except MEMDUMP and READ_REGISTER. - */ -#if 0 -#define PKT_Cmd (PKT_Data+0) /* Command code */ -#define PKT_PhbNum (PKT_Data+1) /* Port number wrt RTA */ -#define PKT_Cmd2 (PKT_Data+2) /* Command code copy */ -#endif -#define PKT_ModemStatus (PKT_Data+3) /* Modem signal status */ -#define PKT_PortStatus (PKT_Data+4) /* Port signal status */ -#if 0 -#define PKT_SubCmd (PKT_Data+5) /* Sub Command */ -#endif - -/* ModemStatus definitions... */ -#define MODEM_DSR 0x80 /* Data Set Ready modem state */ -#define MODEM_CTS 0x40 /* Clear To Send modem state */ -#define MODEM_RI 0x20 /* Ring Indicate modem state */ -#define MODEM_CD 0x10 /* Carrier Detect modem state */ -#define MODEM_TSTOP 0x08 /* Transmit Stopped state */ -#define MODEM_TEMPTY 0x04 /* Transmit Empty state */ -#define MODEM_DTR 0x02 /* DTR modem output state */ -#define MODEM_RTS 0x01 /* RTS modem output state */ - -/* PortStatus definitions... */ -#define PORT_ISOPEN 0x01 /* Port open ? */ -#define PORT_HUPCL 0x02 /* Hangup on close? */ -#define PORT_MOPENPEND 0x04 /* Modem open pending */ -#define PORT_ISPARALLEL 0x08 /* Parallel port */ -#define PORT_BREAK 0x10 /* Port on break */ -#define PORT_STATUSPEND 0020 /* Status packet pending */ -#define PORT_BREAKPEND 0x40 /* Break packet pending */ -#define PORT_MODEMPEND 0x80 /* Modem status packet pending */ - -/***************************************************************************** -******************** ******************** -******************** COMMAND_RUP - COMPLETE - MEMDUMP ******************** -******************** ******************** -*****************************************************************************/ - -/* (RIO->Driver,pre-emptive) - - COMMAND_RUP - COMPLETE - MEMDUMP is sent as an acknowledgement for a MEMDUMP - port I/O control command packet. - */ -#if 0 -#define PKT_Cmd (PKT_Data+0) /* Command code */ -#define PKT_PhbNum (PKT_Data+1) /* Port number wrt RTA */ -#define PKT_Cmd2 (PKT_Data+2) /* Command code copy */ -#define PKT_ModemStatus (PKT_Data+3) /* Modem signal status */ -#define PKT_PortStatus (PKT_Data+4) /* Port signal status */ -#define PKT_SubCmd (PKT_Data+5) /* Sub Command */ -#define PKT_Address (PKT_Data+6) /* Requested address */ -#endif -#define PKT_Dump (PKT_Data+8) /* 32bytes of requested dump data */ - -/***************************************************************************** -***************** ***************** -***************** COMMAND_RUP - COMPLETE - READ_REGISTER ***************** -***************** ***************** -*****************************************************************************/ - -/* (RIO->Driver,pre-emptive) - - COMMAND_RUP - COMPLETE - READ_REGISTER is sent as an acknowledgement for a - READ_REGISTER port I/O control command packet. - */ -#if 0 -#define PKT_Cmd (PKT_Data+0) /*Command code */ -#define PKT_PhbNum (PKT_Data+1) /*Port number wrt RTA */ -#define PKT_Cmd2 (PKT_Data+2) /* Command code copy */ -#endif -#define PKT_RegisterValue (PKT_Data+3) /* Modem signal status */ -#if 0 -#define PKT_PortStatus (PKT_Data+4) /* Port signal status */ -#define PKT_SubCmd (PKT_Data+5) /* Sub Command */ -#endif - -/***************************************************************************** -********************* *********************** -********************* COMMAND_RUP - BREAK_RECEIVED *********************** -********************* *********************** -*****************************************************************************/ - -/* (RIO->Driver,pre-emptive) - - COMMAND_RUP - BREAK_RECEIVED packets are sent when the port detects a receive BREAK signal. - */ -#if 0 -#define PKT_Cmd (PKT_Data+0) /* Command code */ -#define PKT_PhbNum (PKT_Data+1) /* Port number wrt RTA */ -#define PKT_Cmd2 (PKT_Data+2) /* Command code copy */ -#endif - -/***************************************************************************** -********************* ************************* -********************* COMMAND_RUP - MODEM_STATUS ************************* -********************* ************************* -*****************************************************************************/ - -/* (RIO->Driver,pre-emptive) - - COMMAND_RUP - MODEM_STATUS packets are sent whenever the port detects a - change in the input modem signal states. - - */ -#if 0 -#define PKT_Cmd (PKT_Data+0) /* Command code */ -#define PKT_PhbNum (PKT_Data+1) /* Port number wrt RTA */ -#define PKT_Cmd2 (PKT_Data+2) /* Command code copy */ -#define PKT_ModemStatus (PKT_Data+3) /* Modem signal status */ -#endif - -/***************************************************************************** -************************ ************************* -************************ BOOT_RUP - BOOT_REQUEST ************************* -************************ ************************* -*****************************************************************************/ - -/* (RIO->Driver,pre-emptive) - - BOOT_RUP - BOOT_REQUEST packets are sent to the Driver from RIO to request - firmware code to load onto attached RTAs. - */ -#if 0 -#define PKT_Cmd (PKT_Data+0) /* Command code */ -#endif - -/***************************************************************************** -************************ ************************ -************************ BOOT_RUP - BOOT_SEQUENCE ************************ -************************ ************************ -*****************************************************************************/ - -/* (Driver->RIO,pre-emptive) - - BOOT_RUP - BOOT_SEQUENCE packets are sent from the Driver to RIO in response - to a BOOT_RUP - BOOT_REQUEST packet. - */ -#if 0 -#define PKT_Cmd (PKT_Data+0) /* Command code */ -#endif -#define PKT_NumPackets (PKT_Data+2) /* Packets required to load firmware */ -#define PKT_LoadBase (PKT_Data+4) /* RTA firmware load address */ -#define PKT_CodeSize (PKT_Data+6) /* Size of firmware in bytes */ -#define PKT_CmdString (PKT_Data+8) /* Command string */ - -/***************************************************************************** -************************ *********************** -************************ BOOT_RUP - BOOT_COMPLETED *********************** -************************ *********************** -*****************************************************************************/ - -/* (RIO->Driver,pre-emptive) - - BOOT_RUP - BOOT_COMPLETE is sent to the Driver from RIO when downloading of - RTA firmware has completed. - */ -#if 0 -#define PKT_Cmd (PKT_Data+0) /* Command code */ -#endif -#define PKT_LinkNumber (PKT_Data+1) /* Link number RTA booted on */ -#define PKT_SerialNumber (PKT_Data+2) /* 4 byte serial number */ - -/***************************************************************************** -************************ *********************** -************************ BOOT_RUP - Packet Request *********************** -************************ *********************** -*****************************************************************************/ - -/* (RIO->Driver,pre-emptive) - - BOOT_RUP packet without the PKT_CMD_BIT set in the PKT->len field is sent - from RIO to the Driver as a request for a firmware boot packet. */ - -#define PKT_SequenceNumber (PKT_Data+0) /* Packet sequence number */ - -/***************************************************************************** -*********************** *********************** -*********************** BOOT_RUP - Packet Response *********************** -*********************** *********************** -*****************************************************************************/ - -/* (Driver->RIO,pre-emptive) - - In response to a BOOT_RUP boot packet request, the driver fills out the response - packet with the 70 bytes of the requested sequence. - */ -#if 0 -#define PKT_SequenceNumber (PKT_Data+0) /* Packet sequence number */ -#endif -#define PKT_FirmwarePacket (PKT_Data+2) /* Firmware packet */ - -/***************************************************************************** -**************************** **************************** -**************************** BOOT_RUP - IFOAD **************************** -**************************** **************************** -*****************************************************************************/ - -/* (Driver->RIO,pre-emptive) - - BOOT_RUP - IFOAD packets are sent from the Driver to an RTA to cause the - RTA to shut down and reboot. - */ -#if 0 -#define PKT_Cmd (PKT_Data+0) /* Command code */ -#endif -#define PKT_IfoadId1 (PKT_Data+2) /* IFOAD Id 1 */ -#define PKT_IfoadId2 (PKT_Data+3) /* IFOAD Id 2 */ - -#define IFOADID1 0xAD -#define IFOADID2 0xF0 - -/***************************************************************************** -************************** *************************** -************************** BOOT_RUP - IDENTIFY *************************** -************************** *************************** -*****************************************************************************/ - -/* (Driver->RIO,pre-emptive) - - BOOT_RUP - IDENTIFY packets are sent from the Driver to an RTA to cause the - RTA to flash its LEDs for a period of time. - */ -#if 0 -#define PKT_Cmd (PKT_Data+0) /* Command code */ -#endif -#define PKT_IdentifyId (PKT_Data+2) /* defines pattern to flash */ - -/***************************************************************************** -**************************** *************************** -**************************** BOOT_RUP - ZOMBIE *************************** -**************************** *************************** -*****************************************************************************/ - -/* (Driver->RIO,pre-emptive) - - BOOT_RUP - ZOMBIE packets are sent from the Driver to an RTA to cause the - RTA to shut down and flash it's LEDs. - */ -#if 0 -#define PKT_Cmd (PKT_Data+0) /* Command code */ -#endif -#define PKT_ZombieId1 (PKT_Data+2) /* ZOMBIE Id 1 */ -#define PKT_ZombieId2 (PKT_Data+3) /* ZOMBIE Id 2 */ - -#define ZOMBIEID1 0x52 -#define ZOMBIEID2 0x21 - -/***************************************************************************** -**************************** **************************** -**************************** BOOT_RUP - UFOAD **************************** -**************************** **************************** -*****************************************************************************/ - -/* (Driver->RIO,pre-emptive) - - BOOT_RUP - UFOAD packets are sent from the Driver to an RTA to cause the RTA - to ask it's neighbouring RTA to shut down and reboot. - */ -#if 0 -#define PKT_Cmd (PKT_Data+0) /* Command code */ -#define PKT_LinkNumber (PKT_Data+1) /* Link number of RTA to UFOAD */ -#endif -#define PKT_UfoadId1 (PKT_Data+2) /* UFOAD Id 1 */ -#define PKT_UfoadId2 (PKT_Data+3) /* UFOAD Id 2 */ - -#define UFOADID1 0x1E -#define UFOADID2 0x0D - -/***************************************************************************** -**************************** **************************** -**************************** BOOT_RUP - IWAIT **************************** -**************************** **************************** -*****************************************************************************/ - -/* (Driver->RIO,pre-emptive) - - BOOT_RUP - IWAIT packets are sent from the Driver to an RTA to cause the RTA - to pause booting on the specified link for 30 seconds. - */ -#if 0 -#define PKT_Cmd (PKT_Data+0) /* Command code */ -#define PKT_LinkNumber (PKT_Data+1) /* Link number of RTA to UFOAD */ -#endif -#define PKT_IwaitId1 (PKT_Data+2) /* IWAIT Id 1 */ -#define PKT_IwaitId2 (PKT_Data+3) /* IWAIT Id 2 */ - -#define IWAITID1 0xDE -#define IWAITID2 0xB1 - -/***************************************************************************** -************************ *********************** -************************ ROUTE_RUP - ROUTE_REQUEST *********************** -************************ *********************** -*****************************************************************************/ - -/* (RIO->Driver,pre-emptive) - - ROUTE_RUP - ROUTE_REQUEST packets are sent from a newly booted or connected - RTA to a Driver to request an ID (RUP or unit number). - */ -#if 0 -#define PKT_Cmd (PKT_Data+0) /* Command code */ -#endif -#define PKT_SerialNumber (PKT_Data+2) /* 4 byte serial number */ -#define PKT_ModuleTypes (PKT_Data+6) /* RTA Module types */ - -/* ModuleTypes definitions... */ -#define MOD_BLANK 0x0F /* Blank plate attached */ -#define MOD_RS232DB25 0x00 /* RS232 DB25 connector */ -#define MOD_RS232RJ45 0x01 /* RS232 RJ45 connector */ -#define MOD_RS422DB25 0x02 /* RS422 DB25 connector */ -#define MOD_RS485DB25 0x03 /* RS485 DB25 connector */ -#define MOD_PARALLEL 0x04 /* Centronics parallel */ - -#define MOD2 0x08 /* Set to indicate Rev2 module */ - -/***************************************************************************** -************************* ************************* -************************* ROUTE_RUP - ROUTE_FOAD ************************* -************************* ************************* -*****************************************************************************/ - -/* (Driver->RIO,pre-emptive) - - ROUTE_RUP - ROUTE_FOAD packet is sent as a response to a ROUTE_RUP - ROUTE_REQUEST - packet to cause the RTA to "Fall Over And Die"., i.e. shutdown and reboot. - */ -#if 0 -#define PKT_Cmd (PKT_Data+0) /* Command code */ -#endif -#define PKT_RouteCmdString (PKT_Data+2) /* Command string */ - -/***************************************************************************** -*********************** *********************** -*********************** ROUTE_RUP - ROUTE_ALLOCATE *********************** -*********************** *********************** -*****************************************************************************/ - -/* (Driver->RIO,pre-emptive) - - ROUTE_RUP - ROUTE_ALLOCATE packet is sent as a response to a ROUTE_RUP - ROUTE_REQUEST - packet to allocate the RTA's Id number (RUP number 1..16) - */ -#if 0 -#define PKT_Cmd (PKT_Data+0) /* Command code */ -#endif -#define PKT_IdNum (PKT_Data+1) /* RUP number for ports 1..8 */ -#if 0 -#define PKT_RouteCmdString (PKT_Data+2) /* Command string */ -#endif -#define PKT_IdNum2 (PKT_Data+0x17) /* RUP number for ports 9..16 */ - -/***************************************************************************** -*********************** *********************** -*********************** ROUTE_RUP - ROUTE_TOPOLOGY *********************** -*********************** *********************** -*****************************************************************************/ - -/* (RIO->Driver,pre-emptive) - - ROUTE_RUP - ROUTE_TOPOLOGY packet is sent to inform the driver of an RTA's - current link status. - */ -#if 0 -#define PKT_Cmd (PKT_Data+0) /* Command code */ -#endif -#define PKT_Link1Rup (PKT_Data+2) /* Link 1 RUP number */ -#define PKT_Link1Link (PKT_Data+3) /* Link 1 link number */ -#define PKT_Link2Rup (PKT_Data+4) /* Link 2 RUP number */ -#define PKT_Link2Link (PKT_Data+5) /* Link 2 link number */ -#define PKT_Link3Rup (PKT_Data+6) /* Link 3 RUP number */ -#define PKT_Link3Link (PKT_Data+7) /* Link 3 link number */ -#define PKT_Link4Rup (PKT_Data+8) /* Link 4 RUP number */ -#define PKT_Link4Link (PKT_Data+9) /* Link 4 link number */ -#define PKT_RtaVpdProm (PKT_Data+10) /* 32 bytes of RTA VPD PROM Contents */ - -#endif /* _sxwinif_h */ - -/* End of RIOWINIF.H */ -- cgit v1.2.3 From 169da21f403adf6698ef9bbb759e27c1f496b2b5 Mon Sep 17 00:00:00 2001 From: Alan Cox Date: Mon, 16 Jan 2006 17:03:49 +0000 Subject: [PATCH] Remove file riscos.h from rio driver (unused file) Signed-off-by: Alan Cox Signed-off-by: Linus Torvalds --- drivers/char/rio/riscos.h | 63 ----------------------------------------------- 1 file changed, 63 deletions(-) delete mode 100644 drivers/char/rio/riscos.h (limited to 'drivers/char/rio') diff --git a/drivers/char/rio/riscos.h b/drivers/char/rio/riscos.h deleted file mode 100644 index 60d66d0056ae..000000000000 --- a/drivers/char/rio/riscos.h +++ /dev/null @@ -1,63 +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 : riscos.h -** SID : 1.2 -** Last Modified : 11/6/98 11:34:19 -** Retrieved : 11/6/98 11:34:22 -** -** ident @(#)riscos.h 1.2 -** -** ----------------------------------------------------------------------------- -*/ - -#ifndef __rio_riscos_h__ -#define __rio_riscos_h__ - -#ifdef SCCS_LABELS -static char *_riscos_h_sccs_ = "@(#)riscos.h 1.2"; -#endif - -/* -** This module used to define all those little itsy bits required for RISC/OS -** now it's full of null macros. -*/ - -/* -** RBYTE reads a byte from a location. -** RWORD reads a word from a location. -** WBYTE writes a byte to a location. -** WWORD writes a word to a location. -** RINDW reads a word through a pointer. -** WINDW writes a word through a pointer. -** RIOSWAB swaps the two bytes of a word, if needed. -*/ - -#define RIOSWAB(N) (N) -#define WBYTE(A,V) (A)=(uchar)(V) -#define WWORD(A,V) (A)=(ushort)(V) -#define RBYTE(A) (uchar)(A) -#define RWORD(A) (ushort)(A) -#define RINDW(A) (*(ushort *)(A)) -#define WINDW(A,V) (*(ushort *)(A)=(ushort)(V)) - -#endif /* __rio_riscos_h__ */ -- cgit v1.2.3 From 3918276ce5e3f5473428f307194fef422c0b12b8 Mon Sep 17 00:00:00 2001 From: Alan Cox Date: Mon, 16 Jan 2006 17:05:55 +0000 Subject: [PATCH] Remove rtahw.h from rio driver (unused file) Signed-off-by: Alan Cox Signed-off-by: Linus Torvalds --- drivers/char/rio/rtahw.h | 75 ------------------------------------------------ 1 file changed, 75 deletions(-) delete mode 100644 drivers/char/rio/rtahw.h (limited to 'drivers/char/rio') diff --git a/drivers/char/rio/rtahw.h b/drivers/char/rio/rtahw.h deleted file mode 100644 index e6c2cdfd3a1f..000000000000 --- a/drivers/char/rio/rtahw.h +++ /dev/null @@ -1,75 +0,0 @@ - -/**************************************************************************** - ******* ******* - ******* R T A H A R D W A R E - ******* ******* - **************************************************************************** - - Author : Ian Nandhra - 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 lint -#ifdef SCCS_LABELS -static char *_rio_rtahw_h_sccs = "@(#)rtahw.h 1.5"; -#endif -#endif - -#define WATCHDOG_ADDR ((unsigned short *)0x7a00) -#define RTA_LED_ADDR ((unsigned short *)0x7c00) -#define SERIALNUM_ADDR ((unsigned char *)0x7809) -#define LATCH_ADDR ((unsigned char *)0x7800) - -/* -** Here we define where the cd1400 chips are in memory. -*/ -#define CD1400_ONE_ADDR (0x7300) -#define CD1400_TWO_ADDR (0x7200) -#define CD1400_THREE_ADDR (0x7100) -#define CD1400_FOUR_ADDR (0x7000) - -/* -** Define the different types of modules we can have -*/ -enum module { - MOD_BLANK = 0x0f, /* Blank plate attached */ - MOD_RS232DB25 = 0x00, /* RS232 DB25 connector */ - MOD_RS232RJ45 = 0x01, /* RS232 RJ45 connector */ - MOD_RS422DB25 = 0x02, /* RS422 DB25 connector */ - MOD_RS485DB25 = 0x03, /* RS485 DB25 connector */ - MOD_PARALLEL = 0x04 /* Centronics parallel */ -}; - -#define TYPE_HOST 0 -#define TYPE_RTA8 1 -#define TYPE_RTA16 2 - -#define WATCH_DOG WATCHDOG_ADDR - -/*********** end of file ***********/ -- cgit v1.2.3 From 09979236d6dc6a51c21131c4a8c0be7e1992a398 Mon Sep 17 00:00:00 2001 From: Alan Cox Date: Mon, 16 Jan 2006 17:07:54 +0000 Subject: [PATCH] Remove old firmware headers from rio drivers Signed-off-by: Alan Cox Signed-off-by: Linus Torvalds --- drivers/char/rio/rupstat.h | 50 ------------------------------- drivers/char/rio/selftest.h | 73 --------------------------------------------- drivers/char/rio/sysmap.h | 62 -------------------------------------- drivers/char/rio/timeouts.h | 50 ------------------------------- 4 files changed, 235 deletions(-) delete mode 100644 drivers/char/rio/rupstat.h delete mode 100644 drivers/char/rio/selftest.h delete mode 100644 drivers/char/rio/sysmap.h delete mode 100644 drivers/char/rio/timeouts.h (limited to 'drivers/char/rio') diff --git a/drivers/char/rio/rupstat.h b/drivers/char/rio/rupstat.h deleted file mode 100644 index 56d828c63d28..000000000000 --- a/drivers/char/rio/rupstat.h +++ /dev/null @@ -1,50 +0,0 @@ -/**************************************************************************** - ******* ******* - ******* RUPSTAT - ******* ******* - **************************************************************************** - - Author : 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 _rupstat_h -#define _rupstat_h - -#ifndef lint -#ifdef SCCS_LABELS -static char *_rio_rupstat_h_sccs = "@(#)rupstat.h 1.1"; -#endif -#endif - -#define STATUS_SYNC 0 -#define STATUS_REQ_TOP 1 -#define STATUS_TOPOLOGY 2 - -#endif diff --git a/drivers/char/rio/selftest.h b/drivers/char/rio/selftest.h deleted file mode 100644 index 7a3dba352323..000000000000 --- a/drivers/char/rio/selftest.h +++ /dev/null @@ -1,73 +0,0 @@ -/* -** File: selftest.h -** -** Author: David Dix -** -** Created: 15th March 1993 -** -** Last modified: 94/06/14 -** - * - * (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. -*/ - -#ifndef _selftests_h_ -#define _selftests_h_ - -/* -** Selftest identifier... -*/ -#define SELFTEST_MAGIC 0x5a5a - -/* -** This is the structure of the packet that is sent back after each -** selftest on a booting RTA. -*/ -typedef struct { - short magic; /* Identifies packet type */ - int test; /* Test number, see below */ - unsigned int result; /* Result value */ - unsigned int dataIn; - unsigned int dataOut; -} selftestStruct; - -/* -** The different tests are identified by the following data values. -*/ -enum test { - TESTS_COMPLETE = 0x00, - MEMTEST_ADDR = 0x01, - MEMTEST_BIT = 0x02, - MEMTEST_FILL = 0x03, - MEMTEST_DATABUS = 0x04, - MEMTEST_ADDRBUS = 0x05, - CD1400_INIT = 0x10, - CD1400_LOOP = 0x11, - CD1400_INTERRUPT = 0x12 -}; - -enum result { - E_PORT = 0x10, - E_TX = 0x11, - E_RX = 0x12, - E_EXCEPT = 0x13, - E_COMPARE = 0x14, - E_MODEM = 0x15, - E_TIMEOUT = 0x16, - E_INTERRUPT = 0x17 -}; -#endif /* _selftests_h_ */ diff --git a/drivers/char/rio/sysmap.h b/drivers/char/rio/sysmap.h deleted file mode 100644 index e1c6f1160dff..000000000000 --- a/drivers/char/rio/sysmap.h +++ /dev/null @@ -1,62 +0,0 @@ - -/**************************************************************************** - ******* ******* - ******* S Y S T E M M A P H E A D E R - ******* ******* - **************************************************************************** - - Author : Ian Nandhra - 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 lint -#ifdef SCCS_LABELS -static char *_rio_sysmap_h_sccs = "@(#)sysmap.h 1.1"; -#endif -#endif - -#define SYSTEM_MAP_LEN 64 /* Len of System Map array */ - - -typedef struct SYS_MAP SYS_MAP; -typedef struct SYS_MAP_LINK SYS_MAP_LINK; - -struct SYS_MAP_LINK { - short id; /* Unit Id */ - short link; /* Id's Link */ - short been_here; /* Used by map_gen */ -}; - -struct SYS_MAP { - char serial_num[4]; - SYS_MAP_LINK link[4]; -}; - - -/*********** end of file ***********/ diff --git a/drivers/char/rio/timeouts.h b/drivers/char/rio/timeouts.h deleted file mode 100644 index a8b5be3ca9bf..000000000000 --- a/drivers/char/rio/timeouts.h +++ /dev/null @@ -1,50 +0,0 @@ - -/**************************************************************************** - ******* ******* - ******* T I M E O U T S - ******* ******* - **************************************************************************** - - Author : Ian Nandhra - 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 lint -#ifdef SCCS_LABELS -static char *_rio_defaults_h_sccs = "@(#)timeouts.h 1.3"; -#endif -#endif - -#define MILLISECOND (int) (1000/64) /* 15.625 low ticks */ -#define SECOND (int) 15625 /* Low priority ticks */ - -#define TX_TIMEOUT (int) (200 * MILLISECOND) - - -/*********** end of file ***********/ -- cgit v1.2.3 From 925d70d64bfeccb669c0750943585944abb28b51 Mon Sep 17 00:00:00 2001 From: Alan Cox Date: Mon, 16 Jan 2006 17:10:23 +0000 Subject: [PATCH] Remove long dead #if 0 code from rio_param Signed-off-by: Alan Cox Signed-off-by: Linus Torvalds --- drivers/char/rio/rioparam.c | 43 ------------------------------------------- 1 file changed, 43 deletions(-) (limited to 'drivers/char/rio') diff --git a/drivers/char/rio/rioparam.c b/drivers/char/rio/rioparam.c index 4cc7f4942bfc..c622f46d6d77 100644 --- a/drivers/char/rio/rioparam.c +++ b/drivers/char/rio/rioparam.c @@ -195,27 +195,6 @@ int SleepFlag; ** paramed with OPEN, we want to restore the saved port termio, but ** only if StoredTermio has been saved, i.e. NOT 1st open after reboot. */ -#if 0 - if (PortP->FirstOpen) { - PortP->StoredTty.iflag = TtyP->tm.c_iflag; - PortP->StoredTty.oflag = TtyP->tm.c_oflag; - PortP->StoredTty.cflag = TtyP->tm.c_cflag; - PortP->StoredTty.lflag = TtyP->tm.c_lflag; - PortP->StoredTty.line = TtyP->tm.c_line; - for (i = 0; i < NCC + 5; i++) - PortP->StoredTty.cc[i] = TtyP->tm.c_cc[i]; - PortP->FirstOpen = 0; - } else if (PortP->Store || PortP->Lock) { - rio_dprintk(RIO_DEBUG_PARAM, "OPEN: Restoring stored/locked params\n"); - TtyP->tm.c_iflag = PortP->StoredTty.iflag; - TtyP->tm.c_oflag = PortP->StoredTty.oflag; - TtyP->tm.c_cflag = PortP->StoredTty.cflag; - TtyP->tm.c_lflag = PortP->StoredTty.lflag; - TtyP->tm.c_line = PortP->StoredTty.line; - for (i = 0; i < NCC + 5; i++) - TtyP->tm.c_cc[i] = PortP->StoredTty.cc[i]; - } -#endif } /* @@ -273,16 +252,6 @@ int SleepFlag; phb_param_ptr = (struct phb_param *) PacketP->data; -#if 0 - /* - ** COR 1 - */ - if (TtyP->tm.c_iflag & INPCK) { - rio_dprintk(RIO_DEBUG_PARAM, "Parity checking on input enabled\n"); - Cor1 |= COR1_INPCK; - } -#endif - switch (TtyP->termios->c_cflag & CSIZE) { case CS5: { @@ -523,10 +492,6 @@ int SleepFlag; #ifdef XMT1EN if (TtyP->termios->c_cflag & XMT1EN) rio_dprintk(RIO_DEBUG_PARAM, "XMT1EN (?)\n"); -#endif -#if 0 - if (TtyP->termios->c_cflag & LOBLK) - rio_dprintk(RIO_DEBUG_PARAM, "LOBLK - JCL output blocks when not current\n"); #endif if (TtyP->termios->c_lflag & ISIG) rio_dprintk(RIO_DEBUG_PARAM, "Input character signal generating enabled\n"); @@ -572,14 +537,6 @@ int SleepFlag; rio_dprintk(RIO_DEBUG_PARAM, "Carriage return delay set\n"); if (TtyP->termios->c_oflag & TABDLY) rio_dprintk(RIO_DEBUG_PARAM, "Tab delay set\n"); -#if 0 - if (TtyP->termios->c_oflag & BSDLY) - rio_dprintk(RIO_DEBUG_PARAM, "Back-space delay set\n"); - if (TtyP->termios->c_oflag & VTDLY) - rio_dprintk(RIO_DEBUG_PARAM, "Vertical tab delay set\n"); - if (TtyP->termios->c_oflag & FFDLY) - rio_dprintk(RIO_DEBUG_PARAM, "Form-feed delay set\n"); -#endif /* ** These things are kind of useful in a later life! */ -- cgit v1.2.3 From a6176eeab0ef1750ce21790a6c6f61ba6c9ffc63 Mon Sep 17 00:00:00 2001 From: Alan Cox Date: Mon, 16 Jan 2006 17:11:50 +0000 Subject: [PATCH] Remove #if 0 and other long dead code from rio_tty Signed-off-by: Alan Cox Signed-off-by: Linus Torvalds --- drivers/char/rio/riotty.c | 583 ---------------------------------------------- 1 file changed, 583 deletions(-) (limited to 'drivers/char/rio') diff --git a/drivers/char/rio/riotty.c b/drivers/char/rio/riotty.c index 5894a25b0113..6379816ed173 100644 --- a/drivers/char/rio/riotty.c +++ b/drivers/char/rio/riotty.c @@ -89,16 +89,9 @@ static char *_riotty_c_sccs_ = "@(#)riotty.c 1.3"; #include "list.h" #include "sam.h" -#if 0 -static void ttyseth_pv(struct Port *, struct ttystatics *, struct termios *sg, int); -#endif - static void RIOClearUp(struct Port *PortP); int RIOShortCommand(struct rio_info *p, struct Port *PortP, int command, int len, int arg); -#if 0 -static int RIOCookMode(struct ttystatics *); -#endif extern int conv_vb[]; /* now defined in ttymgr.c */ extern int conv_bv[]; /* now defined in ttymgr.c */ @@ -226,33 +219,6 @@ int riotopen(struct tty_struct *tty, struct file *filp) ** until the RTA is present then we must spin here waiting for ** the RTA to boot. */ -#if 0 - if (!(PortP->HostP->Mapping[PortP->RupNum].Flags & RTA_BOOTED)) { - if (PortP->WaitUntilBooted) { - rio_dprintk(RIO_DEBUG_TTY, "Waiting for RTA to boot\n"); - do { - if (RIODelay(PortP, HUNDRED_MS) == RIO_FAIL) { - rio_dprintk(RIO_DEBUG_TTY, "RTA EINTR in delay \n"); - func_exit(); - return -EINTR; - } - if (repeat_this-- <= 0) { - rio_dprintk(RIO_DEBUG_TTY, "Waiting for RTA to boot timeout\n"); - RIOPreemptiveCmd(p, PortP, FCLOSE); - pseterr(EINTR); - func_exit(); - return -EIO; - } - } while (!(PortP->HostP->Mapping[PortP->RupNum].Flags & RTA_BOOTED)); - rio_dprintk(RIO_DEBUG_TTY, "RTA has been booted\n"); - } else { - rio_dprintk(RIO_DEBUG_TTY, "RTA never booted\n"); - pseterr(ENXIO); - func_exit(); - return 0; - } - } -#else /* I find the above code a bit hairy. I find the below code easier to read and shorter. Now, if it works too that would be great... -- REW @@ -281,21 +247,10 @@ int riotopen(struct tty_struct *tty, struct file *filp) } } rio_dprintk(RIO_DEBUG_TTY, "RTA has been booted\n"); -#endif -#if 0 - tp = PortP->TtyP; /* get tty struct */ -#endif rio_spin_lock_irqsave(&PortP->portSem, flags); if (p->RIOHalted) { goto bombout; } -#if 0 - retval = gs_init_port(&PortP->gs); - if (retval) { - func_exit(); - return retval; - } -#endif /* ** If the port is in the final throws of being closed, @@ -363,11 +318,6 @@ int riotopen(struct tty_struct *tty, struct file *filp) command piggybacks the parameters immediately. -- REW */ RIOParam(PortP, OPEN, Modem, OK_TO_SLEEP); /* Open the port */ -#if 0 - /* This delay of 1 second was annoying. I removed it. -- REW */ - RIODelay(PortP, HUNDRED_MS * 10); - RIOParam(PortP, CONFIG, Modem, OK_TO_SLEEP); /* Config the port */ -#endif rio_spin_lock_irqsave(&PortP->portSem, flags); /* @@ -439,9 +389,6 @@ int riotopen(struct tty_struct *tty, struct file *filp) PortP->State |= RIO_WOPEN; rio_spin_unlock_irqrestore(&PortP->portSem, flags); if (RIODelay(PortP, HUNDRED_MS) == RIO_FAIL) -#if 0 - if (sleep((caddr_t) & tp->tm.c_canqo, TTIPRI | PCATCH)) -#endif { /* ** ACTION: verify that this is a good thing @@ -505,10 +452,6 @@ int riotopen(struct tty_struct *tty, struct file *filp) */ int riotclose(void *ptr) { -#if 0 - register uint SysPort = dev; - struct ttystatics *tp; /* pointer to our ttystruct */ -#endif struct Port *PortP = ptr; /* pointer to the port structure */ int deleted = 0; int try = -1; /* Disable the timeouts by setting them to -1 */ @@ -534,13 +477,6 @@ int riotclose(void *ptr) end_time = jiffies + MAX_SCHEDULE_TIMEOUT; Modem = rio_ismodem(tty); -#if 0 - /* What F.CKING cache? Even then, a higly idle multiprocessor, - system with large caches this won't work . Better find out when - this doesn't work asap, and fix the cause. -- REW */ - - RIODelay(PortP, HUNDRED_MS * 10); /* To flush the cache */ -#endif rio_spin_lock_irqsave(&PortP->portSem, flags); /* @@ -703,45 +639,6 @@ int riotclose(void *ptr) } -/* -** decide if we need to use the line discipline. -** This routine can return one of three values: -** COOK_RAW if no processing has to be done by the line discipline or the card -** COOK_WELL if the line discipline must be used to do the processing -** COOK_MEDIUM if the card can do all the processing necessary. -*/ -#if 0 -static int RIOCookMode(struct ttystatics *tp) -{ - /* - ** We can't handle tm.c_mstate != 0 on SCO - ** We can't handle mapping - ** We can't handle non-ttwrite line disc. - ** We can't handle lflag XCASE - ** We can handle oflag OPOST & (OCRNL, ONLCR, TAB3) - */ - -#ifdef CHECK - CheckTtyP(tp); -#endif - if (!(tp->tm.c_oflag & OPOST)) /* No post processing */ - return COOK_RAW; /* Raw mode o/p */ - - if (tp->tm.c_lflag & XCASE) - return COOK_WELL; /* Use line disc */ - - if (tp->tm.c_oflag & ~(OPOST | ONLCR | OCRNL | TAB3)) - return COOK_WELL; /* Use line disc for strange modes */ - - if (tp->tm.c_oflag == OPOST) /* If only OPOST is set, do RAW */ - return COOK_RAW; - - /* - ** So, we need to output process! - */ - return COOK_MEDIUM; -} -#endif static void RIOClearUp(PortP) struct Port *PortP; @@ -776,11 +673,6 @@ int RIOShortCommand(struct rio_info *p, struct Port *PortP, int command, int len unsigned long flags; rio_dprintk(RIO_DEBUG_TTY, "entering shortcommand.\n"); -#ifdef CHECK - CheckPortP(PortP); - if (len < 1 || len > 2) - cprintf(("STUPID LENGTH %d\n", len)); -#endif if (PortP->State & RIO_DELETED) { rio_dprintk(RIO_DEBUG_TTY, "Short command to deleted RTA ignored\n"); @@ -852,478 +744,3 @@ int RIOShortCommand(struct rio_info *p, struct Port *PortP, int command, int len } -#if 0 -/* -** This is an ioctl interface. This is the twentieth century. You know what -** its all about. -*/ -int riotioctl(struct rio_info *p, struct tty_struct *tty, int cmd, caddr_t arg) -{ - register struct Port *PortP; - register struct ttystatics *tp; - int current; - int ParamSemIncremented = 0; - int old_oflag, old_cflag, old_iflag, changed, oldcook; - int i; - unsigned char sio_regs[5]; /* Here be magic */ - short vpix_cflag; - short divisor; - int baud; - uint SysPort = rio_minor(tty); - int Modem = rio_ismodem(tty); - int ioctl_processed; - - rio_dprintk(RIO_DEBUG_TTY, "port ioctl SysPort %d command 0x%x argument 0x%x %s\n", SysPort, cmd, arg, Modem ? "Modem" : "tty"); - - if (SysPort >= RIO_PORTS) { - rio_dprintk(RIO_DEBUG_TTY, "Bad port number %d\n", SysPort); - return -ENXIO; - } - - PortP = p->RIOPortp[SysPort]; - tp = PortP->TtyP; - - rio_spin_lock_irqsave(&PortP->portSem, flags); - -#ifdef STATS - PortP->Stat.IoctlCnt++; -#endif - - if (PortP->State & RIO_DELETED) { - rio_spin_unlock_irqrestore(&PortP->portSem, flags); - return -EIO; - } - - - if (p->RIOHalted) { - RIOClearUp(PortP); - rio_spin_unlock_irqrestore(&PortP->portSem, flags); - return -EIO; - } - - /* - ** Count ioctls for port statistics reporting - */ - if (PortP->statsGather) - PortP->ioctls++; - - /* - ** Specialix RIO Ioctl calls - */ - switch (cmd) { - - case TCRIOTRIAD: - if (arg) - PortP->State |= RIO_TRIAD_MODE; - else - PortP->State &= ~RIO_TRIAD_MODE; - /* - ** Normally, when istrip is set on a port, a config is - ** sent to the RTA instructing the CD1400 to do the - ** stripping. In TRIAD mode, the interrupt receive routine - ** must do the stripping instead, since it has to detect - ** an 8 bit function key sequence. If istrip is set with - ** TRIAD mode on(off), and 8 bit data is being read by - ** the port, the user then turns TRIAD mode off(on), the RTA - ** must be reconfigured (not) to do the stripping. - ** Hence we call RIOParam here. - */ - rio_spin_unlock_irqrestore(&PortP->portSem, flags); - RIOParam(PortP, CONFIG, Modem, OK_TO_SLEEP); - return 0; - - case TCRIOTSTATE: - rio_dprintk(RIO_DEBUG_TTY, "tbusy/tstop monitoring %sabled\n", arg ? "en" : "dis"); - /* MonitorTstate = 0 ; */ - rio_spin_unlock_irqrestore(&PortP->portSem, flags); - RIOParam(PortP, CONFIG, Modem, OK_TO_SLEEP); - return 0; - - case TCRIOSTATE: /* current state of Modem input pins */ - rio_dprintk(RIO_DEBUG_TTY, "TCRIOSTATE\n"); - if (RIOPreemptiveCmd(p, PortP, MGET) == RIO_FAIL) - rio_dprintk(RIO_DEBUG_TTY, "TCRIOSTATE command failed\n"); - PortP->State |= RIO_BUSY; - current = PortP->ModemState; - if (copyout((caddr_t) & current, (int) arg, sizeof(current)) == COPYFAIL) { - rio_dprintk(RIO_DEBUG_TTY, "Copyout failed\n"); - rio_spin_unlock_irqrestore(&PortP->portSem, flags); - pseterr(EFAULT); - } - rio_spin_unlock_irqrestore(&PortP->portSem, flags); - return 0; - - case TCRIOMBIS: /* Set modem lines */ - case TCRIOMBIC: /* Clear modem lines */ - rio_dprintk(RIO_DEBUG_TTY, "TCRIOMBIS/TCRIOMBIC\n"); - if (cmd == TCRIOMBIS) { - uint state; - state = (uint) arg; - PortP->ModemState |= (ushort) state; - PortP->ModemLines = (ulong) arg; - if (RIOPreemptiveCmd(p, PortP, MBIS) == RIO_FAIL) - rio_dprintk(RIO_DEBUG_TTY, "TCRIOMBIS command failed\n"); - } else { - uint state; - - state = (uint) arg; - PortP->ModemState &= ~(ushort) state; - PortP->ModemLines = (ulong) arg; - if (RIOPreemptiveCmd(p, PortP, MBIC) == RIO_FAIL) - rio_dprintk(RIO_DEBUG_TTY, "TCRIOMBIC command failed\n"); - } - PortP->State |= RIO_BUSY; - rio_spin_unlock_irqrestore(&PortP->portSem, flags); - return 0; - - case TCRIOXPON: /* set Xprint ON string */ - rio_dprintk(RIO_DEBUG_TTY, "TCRIOXPON\n"); - if (copyin((int) arg, (caddr_t) PortP->Xprint.XpOn, MAX_XP_CTRL_LEN) == COPYFAIL) { - rio_dprintk(RIO_DEBUG_TTY, "Copyin failed\n"); - PortP->Xprint.XpOn[0] = '\0'; - rio_spin_unlock_irqrestore(&PortP->portSem, flags); - pseterr(EFAULT); - } - PortP->Xprint.XpOn[MAX_XP_CTRL_LEN - 1] = '\0'; - PortP->Xprint.XpLen = strlen(PortP->Xprint.XpOn) + strlen(PortP->Xprint.XpOff); - rio_spin_unlock_irqrestore(&PortP->portSem, flags); - return 0; - - case TCRIOXPOFF: /* set Xprint OFF string */ - rio_dprintk(RIO_DEBUG_TTY, "TCRIOXPOFF\n"); - if (copyin((int) arg, (caddr_t) PortP->Xprint.XpOff, MAX_XP_CTRL_LEN) == COPYFAIL) { - rio_dprintk(RIO_DEBUG_TTY, "Copyin failed\n"); - PortP->Xprint.XpOff[0] = '\0'; - rio_spin_unlock_irqrestore(&PortP->portSem, flags); - pseterr(EFAULT); - } - PortP->Xprint.XpOff[MAX_XP_CTRL_LEN - 1] = '\0'; - PortP->Xprint.XpLen = strlen(PortP->Xprint.XpOn) + strlen(PortP->Xprint.XpOff); - rio_spin_unlock_irqrestore(&PortP->portSem, flags); - return 0; - - case TCRIOXPCPS: /* set Xprint CPS string */ - rio_dprintk(RIO_DEBUG_TTY, "TCRIOXPCPS\n"); - if ((uint) arg > p->RIOConf.MaxXpCps || (uint) arg < p->RIOConf.MinXpCps) { - rio_dprintk(RIO_DEBUG_TTY, "%d CPS out of range\n", arg); - rio_spin_unlock_irqrestore(&PortP->portSem, flags); - pseterr(EINVAL); - return 0; - } - PortP->Xprint.XpCps = (uint) arg; - rio_spin_unlock_irqrestore(&PortP->portSem, flags); - return 0; - - case TCRIOXPRINT: - rio_dprintk(RIO_DEBUG_TTY, "TCRIOXPRINT\n"); - if (copyout((caddr_t) & PortP->Xprint, (int) arg, sizeof(struct Xprint)) == COPYFAIL) { - rio_spin_unlock_irqrestore(&PortP->portSem, flags); - pseterr(EFAULT); - } - rio_spin_unlock_irqrestore(&PortP->portSem, flags); - return 0; - - case TCRIOIXANYON: - rio_dprintk(RIO_DEBUG_TTY, "TCRIOIXANYON\n"); - PortP->Config |= RIO_IXANY; - rio_spin_unlock_irqrestore(&PortP->portSem, flags); - return 0; - - case TCRIOIXANYOFF: - rio_dprintk(RIO_DEBUG_TTY, "TCRIOIXANYOFF\n"); - PortP->Config &= ~RIO_IXANY; - rio_spin_unlock_irqrestore(&PortP->portSem, flags); - return 0; - - case TCRIOIXONON: - rio_dprintk(RIO_DEBUG_TTY, "TCRIOIXONON\n"); - PortP->Config |= RIO_IXON; - rio_spin_unlock_irqrestore(&PortP->portSem, flags); - return 0; - - case TCRIOIXONOFF: - rio_dprintk(RIO_DEBUG_TTY, "TCRIOIXONOFF\n"); - PortP->Config &= ~RIO_IXON; - rio_spin_unlock_irqrestore(&PortP->portSem, flags); - return 0; - -/* -** 15.10.1998 ARG - ESIL 0761 part fix -** Added support for CTS and RTS flow control ioctls : -*/ - case TCRIOCTSFLOWEN: - rio_dprintk(RIO_DEBUG_TTY, "TCRIOCTSFLOWEN\n"); - PortP->Config |= RIO_CTSFLOW; - rio_spin_unlock_irqrestore(&PortP->portSem, flags); - RIOParam(PortP, CONFIG, Modem, OK_TO_SLEEP); - return 0; - - case TCRIOCTSFLOWDIS: - rio_dprintk(RIO_DEBUG_TTY, "TCRIOCTSFLOWDIS\n"); - PortP->Config &= ~RIO_CTSFLOW; - rio_spin_unlock_irqrestore(&PortP->portSem, flags); - RIOParam(PortP, CONFIG, Modem, OK_TO_SLEEP); - return 0; - - case TCRIORTSFLOWEN: - rio_dprintk(RIO_DEBUG_TTY, "TCRIORTSFLOWEN\n"); - PortP->Config |= RIO_RTSFLOW; - rio_spin_unlock_irqrestore(&PortP->portSem, flags); - RIOParam(PortP, CONFIG, Modem, OK_TO_SLEEP); - return 0; - - case TCRIORTSFLOWDIS: - rio_dprintk(RIO_DEBUG_TTY, "TCRIORTSFLOWDIS\n"); - PortP->Config &= ~RIO_RTSFLOW; - rio_spin_unlock_irqrestore(&PortP->portSem, flags); - RIOParam(PortP, CONFIG, Modem, OK_TO_SLEEP); - return 0; - -/* end ESIL 0761 part fix */ - - } - - - /* Lynx IOCTLS */ - switch (cmd) { - case TIOCSETP: - case TIOCSETN: - case OTIOCSETP: - case OTIOCSETN: - ioctl_processed++; - ttyseth(PortP, tp, (struct old_sgttyb *) arg); - break; - case TCSETA: - case TCSETAW: - case TCSETAF: - ioctl_processed++; - rio_dprintk(RIO_DEBUG_TTY, "NON POSIX ioctl\n"); - ttyseth_pv(PortP, tp, (struct termios *) arg, 0); - break; - case TCSETAP: /* posix tcsetattr() */ - case TCSETAWP: /* posix tcsetattr() */ - case TCSETAFP: /* posix tcsetattr() */ - rio_dprintk(RIO_DEBUG_TTY, "NON POSIX SYSV ioctl\n"); - ttyseth_pv(PortP, tp, (struct termios *) arg, 1); - ioctl_processed++; - break; - } - - /* - ** If its any of the commands that require the port to be in the - ** non-busy state wait until all output has drained - */ - if (!ioctl_processed) - switch (cmd) { - case TCSETAW: - case TCSETAF: - case TCSETA: - case TCSBRK: -#define OLD_POSIX ('x' << 8) -#define OLD_POSIX_SETA (OLD_POSIX | 2) -#define OLD_POSIX_SETAW (OLD_POSIX | 3) -#define OLD_POSIX_SETAF (OLD_POSIX | 4) -#define NEW_POSIX (('i' << 24) | ('X' << 16)) -#define NEW_POSIX_SETA (NEW_POSIX | 2) -#define NEW_POSIX_SETAW (NEW_POSIX | 3) -#define NEW_POSIX_SETAF (NEW_POSIX | 4) - case OLD_POSIX_SETA: - case OLD_POSIX_SETAW: - case OLD_POSIX_SETAF: - case NEW_POSIX_SETA: - case NEW_POSIX_SETAW: - case NEW_POSIX_SETAF: -#ifdef TIOCSETP - case TIOCSETP: -#endif - case TIOCSETD: - case TIOCSETN: - rio_dprintk(RIO_DEBUG_TTY, "wait for non-BUSY, semaphore set\n"); - /* - ** Wait for drain here, at least as far as the double buffer - ** being empty. - */ - /* XXX Does the above comment mean that this has - still to be implemented? -- REW */ - /* XXX Is the locking OK together with locking - in txenable? (Deadlock?) -- REW */ - - RIOTxEnable((char *) PortP); - break; - default: - break; - } - - old_cflag = tp->tm.c_cflag; - old_iflag = tp->tm.c_iflag; - old_oflag = tp->tm.c_oflag; - oldcook = PortP->CookMode; - - if (p->RIOHalted) { - RIOClearUp(PortP); - rio_spin_unlock_irqrestore(&PortP->portSem, flags); - pseterr(EIO); - return 0; - } - - PortP->FlushCmdBodge = 0; - - /* - ** If the port is locked, and it is reconfigured, we want - ** to restore the state of the tty structure so the change is NOT - ** made. - */ - if (PortP->Lock) { - tp->tm.c_iflag = PortP->StoredTty.iflag; - tp->tm.c_oflag = PortP->StoredTty.oflag; - tp->tm.c_cflag = PortP->StoredTty.cflag; - tp->tm.c_lflag = PortP->StoredTty.lflag; - tp->tm.c_line = PortP->StoredTty.line; - for (i = 0; i < NCC + 1; i++) - tp->tm.c_cc[i] = PortP->StoredTty.cc[i]; - } else { - /* - ** If the port is set to store the parameters, and it is - ** reconfigured, we want to save the current tty struct so it - ** may be restored on the next open. - */ - if (PortP->Store) { - PortP->StoredTty.iflag = tp->tm.c_iflag; - PortP->StoredTty.oflag = tp->tm.c_oflag; - PortP->StoredTty.cflag = tp->tm.c_cflag; - PortP->StoredTty.lflag = tp->tm.c_lflag; - PortP->StoredTty.line = tp->tm.c_line; - for (i = 0; i < NCC + 1; i++) - PortP->StoredTty.cc[i] = tp->tm.c_cc[i]; - } - } - - changed = (tp->tm.c_cflag != old_cflag) || (tp->tm.c_iflag != old_iflag) || (tp->tm.c_oflag != old_oflag); - - PortP->CookMode = RIOCookMode(tp); /* Set new cooking mode */ - - rio_dprintk(RIO_DEBUG_TTY, "RIOIoctl changed %d newcook %d oldcook %d\n", changed, PortP->CookMode, oldcook); - -#ifdef MODEM_SUPPORT - /* - ** kludge to force CARR_ON if CLOCAL set - */ - if ((tp->tm.c_cflag & CLOCAL) || (PortP->ModemState & MSVR1_CD)) { - tp->tm.c_state |= CARR_ON; - wakeup((caddr_t) & tp->tm.c_canq); - } -#endif - - if (p->RIOHalted) { - RIOClearUp(PortP); - rio_spin_unlock_irqrestore(&PortP->portSem, flags); - pseterr(EIO); - return 0; - } - /* - ** Re-configure if modes or cooking have changed - */ - if (changed || oldcook != PortP->CookMode || (ioctl_processed)) { - rio_spin_unlock_irqrestore(&PortP->portSem, flags); - rio_dprintk(RIO_DEBUG_TTY, "Ioctl changing the PORT settings\n"); - RIOParam(PortP, CONFIG, Modem, OK_TO_SLEEP); - rio_spin_lock_irqsave(&PortP->portSem, flags); - } - - if (p->RIOHalted) { - rio_spin_unlock_irqrestore(&PortP->portSem, flags); - RIOClearUp(PortP); - pseterr(EIO); - return 0; - } - rio_spin_unlock_irqrestore(&PortP->portSem, flags); - return 0; -} - -/* - ttyseth -- set hardware dependent tty settings -*/ -void ttyseth(PortP, s, sg) -struct Port *PortP; -struct ttystatics *s; -struct old_sgttyb *sg; -{ - struct old_sgttyb *tsg; - struct termios *tp = &s->tm; - - tsg = &s->sg; - - if (sg->sg_flags & (EVENP | ODDP)) { - tp->c_cflag &= PARENB; - if (sg->sg_flags & EVENP) { - if (sg->sg_flags & ODDP) { - tp->c_cflag &= V_CS7; - tp->c_cflag &= ~PARENB; - } else { - tp->c_cflag &= V_CS7; - tp->c_cflag &= PARENB; - tp->c_cflag &= PARODD; - } - } else if (sg->sg_flags & ODDP) { - tp->c_cflag &= V_CS7; - tp->c_cflag &= PARENB; - tp->c_cflag &= PARODD; - } else { - tp->c_cflag &= V_CS7; - tp->c_cflag &= PARENB; - } - } -/* - * Use ispeed as the desired speed. Most implementations don't handle - * separate input and output speeds very well. If the RIO handles this, - * I will have to use separate sets of flags to store them in the - * Port structure. - */ - if (!sg->sg_ospeed) - sg->sg_ospeed = sg->sg_ispeed; - else - sg->sg_ispeed = sg->sg_ospeed; - if (sg->sg_ispeed > V_EXTB) - sg->sg_ispeed = V_EXTB; - if (sg->sg_ispeed < V_B0) - sg->sg_ispeed = V_B0; - *tsg = *sg; - tp->c_cflag = (tp->c_cflag & ~V_CBAUD) | conv_bv[(int) sg->sg_ispeed]; -} - -/* - ttyseth_pv -- set hardware dependent tty settings using either the - POSIX termios structure or the System V termio structure. - sysv = 0 => (POSIX): struct termios *sg - sysv != 0 => (System V): struct termio *sg -*/ -static void ttyseth_pv(PortP, s, sg, sysv) -struct Port *PortP; -struct ttystatics *s; -struct termios *sg; -int sysv; -{ - int speed; - unsigned char csize; - unsigned char cread; - unsigned int lcr_flags; - int ps; - - if (sysv) { - /* sg points to a System V termio structure */ - csize = ((struct termio *) sg)->c_cflag & CSIZE; - cread = ((struct termio *) sg)->c_cflag & CREAD; - speed = conv_vb[((struct termio *) sg)->c_cflag & V_CBAUD]; - } else { - /* sg points to a POSIX termios structure */ - csize = sg->c_cflag & CSIZE; - cread = sg->c_cflag & CREAD; - speed = conv_vb[sg->c_cflag & V_CBAUD]; - } - if (s->sg.sg_ispeed != speed || s->sg.sg_ospeed != speed) { - s->sg.sg_ispeed = speed; - s->sg.sg_ospeed = speed; - s->tm.c_cflag = (s->tm.c_cflag & ~V_CBAUD) | conv_bv[(int) s->sg.sg_ispeed]; - } -} -#endif -- cgit v1.2.3 From c7306c02874bf4d22bc0b1dbea34282d0b9a3df1 Mon Sep 17 00:00:00 2001 From: Alan Cox Date: Mon, 16 Jan 2006 17:14:25 +0000 Subject: [PATCH] Remove unused code from rioboot Signed-off-by: Alan Cox Signed-off-by: Linus Torvalds --- drivers/char/rio/rioinit.c | 1152 -------------------------------------------- 1 file changed, 1152 deletions(-) (limited to 'drivers/char/rio') diff --git a/drivers/char/rio/rioinit.c b/drivers/char/rio/rioinit.c index 898a126ae3e6..0d44ef464e6b 100644 --- a/drivers/char/rio/rioinit.c +++ b/drivers/char/rio/rioinit.c @@ -87,222 +87,8 @@ static char *_rioinit_c_sccs_ = "@(#)rioinit.c 1.3"; int RIOPCIinit(struct rio_info *p, int Mode); -#if 0 -static void RIOAllocateInterrupts(struct rio_info *); -static int RIOReport(struct rio_info *); -static void RIOStopInterrupts(struct rio_info *, int, int); -#endif - static int RIOScrub(int, BYTE *, int); -#if 0 -extern int rio_intr(); - -/* -** Init time code. -*/ -void -rioinit( p, info ) -struct rio_info * p; -struct RioHostInfo * info; -{ - /* - ** Multi-Host card support - taking the easy way out - sorry ! - ** We allocate and set up the Host and Port structs when the - ** driver is called to 'install' the first host. - ** We check for this first 'call' by testing the RIOPortp pointer. - */ - if ( !p->RIOPortp ) - { - rio_dprintk (RIO_DEBUG_INIT, "Allocating and setting up driver data structures\n"); - - RIOAllocDataStructs(p); /* allocate host/port structs */ - RIOSetupDataStructs(p); /* setup topology structs */ - } - - RIOInitHosts( p, info ); /* hunt down the hardware */ - - RIOAllocateInterrupts(p); /* allocate interrupts */ - RIOReport(p); /* show what we found */ -} - -/* -** Initialise the Cards -*/ -void -RIOInitHosts(p, info) -struct rio_info * p; -struct RioHostInfo * info; -{ -/* -** 15.10.1998 ARG - ESIL 0762 part fix -** If there is no ISA card definition - we always look for PCI cards. -** As we currently only support one host card this lets an ISA card -** definition take precedence over PLUG and PLAY. -** No ISA card - we are PLUG and PLAY with PCI. -*/ - - /* - ** Note - for PCI both these will be zero, that's okay because - ** RIOPCIInit() fills them in if a card is found. - */ - p->RIOHosts[p->RIONumHosts].Ivec = info->vector; - p->RIOHosts[p->RIONumHosts].PaddrP = info->location; - - /* - ** Check that we are able to accommodate another host - */ - if ( p->RIONumHosts >= RIO_HOSTS ) - { - p->RIOFailed++; - return; - } - - if ( info->bus & ISA_BUS ) - { - rio_dprintk (RIO_DEBUG_INIT, "initialising card %d (ISA)\n", p->RIONumHosts); - RIOISAinit(p, p->mode); - } - else - { - rio_dprintk (RIO_DEBUG_INIT, "initialising card %d (PCI)\n", p->RIONumHosts); - RIOPCIinit(p, RIO_PCI_DEFAULT_MODE); - } - - rio_dprintk (RIO_DEBUG_INIT, "Total hosts initialised so far : %d\n", p->RIONumHosts); - - -#ifdef FUTURE_RELEASE - if (p->bus & EISA_BUS) - /* EISA card */ - RIOEISAinit(p, RIO_EISA_DEFAULT_MODE); - - if (p->bus & MCA_BUS) - /* MCA card */ - RIOMCAinit(p, RIO_MCA_DEFAULT_MODE); -#endif -} - -/* -** go through memory for an AT host that we pass in the device info -** structure and initialise -*/ -void -RIOISAinit(p, mode) -struct rio_info * p; -int mode; -{ - - /* XXX Need to implement this. */ -#if 0 - p->intr_tid = iointset(p->RIOHosts[p->RIONumHosts].Ivec, - (int (*)())rio_intr, (char*)p->RIONumHosts); - - rio_dprintk (RIO_DEBUG_INIT, "Set interrupt handler, intr_tid = 0x%x\n", p->intr_tid ); - - if (RIODoAT(p, p->RIOHosts[p->RIONumHosts].PaddrP, mode)) { - return; - } - else { - rio_dprintk (RIO_DEBUG_INIT, "RIODoAT failed\n"); - p->RIOFailed++; - } -#endif - -} - -/* -** RIODoAT : -** -** Map in a boards physical address, check that the board is there, -** test the board and if everything is okay assign the board an entry -** in the Rio Hosts structure. -*/ -int -RIODoAT(p, Base, mode) -struct rio_info * p; -int Base; -int mode; -{ -#define FOUND 1 -#define NOT_FOUND 0 - - caddr_t cardAddr; - - /* - ** Check to see if we actually have a board at this physical address. - */ - if ((cardAddr = RIOCheckForATCard(Base)) != 0) { - /* - ** Now test the board to see if it is working. - */ - if (RIOBoardTest(Base, cardAddr, RIO_AT, 0) == RIO_SUCCESS) { - /* - ** Fill out a slot in the Rio host structure. - */ - if (RIOAssignAT(p, Base, cardAddr, mode)) { - return(FOUND); - } - } - RIOMapout(Base, RIO_AT_MEM_SIZE, cardAddr); - } - return(NOT_FOUND); -} - -caddr_t -RIOCheckForATCard(Base) -int Base; -{ - int off; - struct DpRam *cardp; /* (Points at the host) */ - caddr_t virtAddr; - unsigned char RIOSigTab[24]; -/* -** Table of values to search for as prom signature of a host card -*/ - strcpy(RIOSigTab, "JBJGPGGHINSMJPJR"); - - /* - ** Hey! Yes, You reading this code! Yo, grab a load a this: - ** - ** IF the card is using WORD MODE rather than BYTE MODE - ** then it will occupy 128K of PHYSICAL memory area. So, - ** you might think that the following Mapin is wrong. Well, - ** it isn't, because the SECOND 64K of occupied space is an - ** EXACT COPY of the FIRST 64K. (good?), so, we need only - ** map it in in one 64K block. - */ - if (RIOMapin(Base, RIO_AT_MEM_SIZE, &virtAddr) == -1) { - rio_dprintk (RIO_DEBUG_INIT, "RIO-init: Couldn't map the board in!\n"); - return((caddr_t)0); - } - - /* - ** virtAddr points to the DP ram of the system. - ** We now cast this to a pointer to a RIO Host, - ** and have a rummage about in the PROM. - */ - cardp = (struct DpRam *)virtAddr; - - for (off=0; RIOSigTab[off]; off++) { - if ((RBYTE(cardp->DpSignature[off]) & 0xFF) != RIOSigTab[off]) { - /* - ** Signature mismatch - card not at this address - */ - RIOMapout(Base, RIO_AT_MEM_SIZE, virtAddr); - rio_dprintk (RIO_DEBUG_INIT, "RIO-init: Couldn't match the signature 0x%x 0x%x!\n", - (int)cardp, off); - return((caddr_t)0); - } - } - - /* - ** If we get here then we must have found a valid board so return - ** its virtual address. - */ - return(virtAddr); -} -#endif /** ** RIOAssignAT : @@ -367,667 +153,6 @@ int mode; rio_dprintk (RIO_DEBUG_INIT, "RIO-init: Tests Passed at 0x%x\n", Base); return(1); } -#if 0 -#ifdef FUTURE_RELEASE -int RIOMCAinit(int Mode) -{ - uchar SlotNumber; - caddr_t Caddr; - uint Paddr; - uint Ivec; - int Handle; - int ret = 0; - - /* - ** Valid mode information for MCA cards - ** is only FAST LINKS - */ - Mode = (Mode & FAST_LINKS) ? McaTpFastLinks : McaTpSlowLinks; - rio_dprintk (RIO_DEBUG_INIT, "RIOMCAinit(%d)\n",Mode); - - - /* - ** Check out each of the slots - */ - for (SlotNumber = 0; SlotNumber < McaMaxSlots; SlotNumber++) { - /* - ** Enable the slot we want to talk to - */ - outb( McaSlotSelect, SlotNumber | McaSlotEnable ); - - /* - ** Read the ID word from the slot - */ - if (((inb(McaIdHigh)<< 8)|inb(McaIdLow)) == McaRIOId) - { - rio_dprintk (RIO_DEBUG_INIT, "Potential MCA card in slot %d\n", SlotNumber); - - /* - ** Card appears to be a RIO MCA card! - */ - RIOMachineType |= (1<= RIO_HOSTS ) - { - Rprintf(RIOMesgTooManyCards); - return(ret); - } - - /* - ** McaIrqEnable contains the interrupt vector, and a card - ** enable bit. - */ - Ivec = inb(McaIrqEnable); - - rio_dprintk (RIO_DEBUG_INIT, "Ivec is %x\n", Ivec); - - switch ( Ivec & McaIrqMask ) - { - case McaIrq9: - rio_dprintk (RIO_DEBUG_INIT, "IRQ9\n"); - break; - case McaIrq3: - rio_dprintk (RIO_DEBUG_INIT, "IRQ3\n"); - break; - case McaIrq4: - rio_dprintk (RIO_DEBUG_INIT, "IRQ4\n"); - break; - case McaIrq7: - rio_dprintk (RIO_DEBUG_INIT, "IRQ7\n"); - break; - case McaIrq10: - rio_dprintk (RIO_DEBUG_INIT, "IRQ10\n"); - break; - case McaIrq11: - rio_dprintk (RIO_DEBUG_INIT, "IRQ11\n"); - break; - case McaIrq12: - rio_dprintk (RIO_DEBUG_INIT, "IRQ12\n"); - break; - case McaIrq15: - rio_dprintk (RIO_DEBUG_INIT, "IRQ15\n"); - break; - } - - /* - ** If the card enable bit isn't set, then set it! - */ - if ((Ivec & McaCardEnable) != McaCardEnable) { - rio_dprintk (RIO_DEBUG_INIT, "McaCardEnable not set - setting!\n"); - outb(McaIrqEnable,Ivec|McaCardEnable); - } else - rio_dprintk (RIO_DEBUG_INIT, "McaCardEnable already set\n"); - - /* - ** Convert the IRQ enable mask into something useful - */ - Ivec = RIOMcaToIvec[Ivec & McaIrqMask]; - - /* - ** Find the physical address - */ - rio_dprintk (RIO_DEBUG_INIT, "inb(McaMemory) is %x\n", inb(McaMemory)); - Paddr = McaAddress(inb(McaMemory)); - - rio_dprintk (RIO_DEBUG_INIT, "MCA card has Ivec %d Addr %x\n", Ivec, Paddr); - - if ( Paddr != 0 ) - { - - /* - ** Tell the memory mapper that we want to talk to it - */ - Handle = RIOMapin( Paddr, RIO_MCA_MEM_SIZE, &Caddr ); - - if ( Handle == -1 ) { - rio_dprintk (RIO_DEBUG_INIT, "Couldn't map %d bytes at %x\n", RIO_MCA_MEM_SIZE, Paddr; - continue; - } - - rio_dprintk (RIO_DEBUG_INIT, "Board mapped to vaddr 0x%x\n", Caddr); - - /* - ** And check that it is actually there! - */ - if ( RIOBoardTest( Paddr,Caddr,RIO_MCA,SlotNumber ) == RIO_SUCCESS ) - { - rio_dprintk (RIO_DEBUG_INIT, "Board has passed test\n"); - rio_dprintk (RIO_DEBUG_INIT, "Slot %d. Type %d. Paddr 0x%x. Caddr 0x%x. Mode 0x%x.\n", - SlotNumber, RIO_MCA, Paddr, Caddr, Mode); - - /* - ** Board has passed its scrub test. Fill in all the - ** transient stuff. - */ - p->RIOHosts[RIONumHosts].Slot = SlotNumber; - p->RIOHosts[RIONumHosts].Ivec = Ivec; - p->RIOHosts[RIONumHosts].Type = RIO_MCA; - p->RIOHosts[RIONumHosts].Copy = bcopy; - p->RIOHosts[RIONumHosts].PaddrP = Paddr; - p->RIOHosts[RIONumHosts].Caddr = Caddr; - p->RIOHosts[RIONumHosts].CardP = (struct DpRam *)Caddr; - p->RIOHosts[RIONumHosts].Mode = Mode; - WBYTE(p->RIOHosts[p->RIONumHosts].ResetInt , 0xff); - p->RIOHosts[RIONumHosts].UniqueNum = - ((RBYTE(p->RIOHosts[RIONumHosts].Unique[0])&0xFF)<<0)| - ((RBYTE(p->RIOHosts[RIONumHosts].Unique[1])&0xFF)<<8)| - ((RBYTE(p->RIOHosts[RIONumHosts].Unique[2])&0xFF)<<16)| - ((RBYTE(p->RIOHosts[RIONumHosts].Unique[3])&0xFF)<<24); - RIONumHosts++; - ret++; - } - else - { - /* - ** It failed the test, so ignore it. - */ - rio_dprintk (RIO_DEBUG_INIT, "TEST FAILED\n"); - RIOMapout(Paddr, RIO_MCA_MEM_SIZE, Caddr ); - } - } - else - { - rio_dprintk (RIO_DEBUG_INIT, "Slot %d - Paddr zero!\n", SlotNumber); - } - } - else - { - rio_dprintk (RIO_DEBUG_INIT, "Slot %d NOT RIO\n", SlotNumber); - } - } - /* - ** Now we have checked all the slots, turn off the MCA slot selector - */ - outb(McaSlotSelect,0); - rio_dprintk (RIO_DEBUG_INIT, "Slot %d NOT RIO\n", SlotNumber); - return ret; -} - -int RIOEISAinit( int Mode ) -{ - static int EISADone = 0; - uint Paddr; - int PollIntMixMsgDone = 0; - caddr_t Caddr; - ushort Ident; - uchar EisaSlot; - uchar Ivec; - int ret = 0; - - /* - ** The only valid mode information for EISA hosts is fast or slow - ** links. - */ - Mode = (Mode & FAST_LINKS) ? EISA_TP_FAST_LINKS : EISA_TP_SLOW_LINKS; - - if ( EISADone ) - { - rio_dprintk (RIO_DEBUG_INIT, "RIOEISAinit() - already done, return.\n"); - return(0); - } - - EISADone++; - - rio_dprintk (RIO_DEBUG_INIT, "RIOEISAinit()\n"); - - - /* - ** First check all cards to see if ANY are set for polled mode operation. - ** If so, set ALL to polled. - */ - - for ( EisaSlot=1; EisaSlot<=RIO_MAX_EISA_SLOTS; EisaSlot++ ) - { - Ident = (INBZ(EisaSlot,EISA_PRODUCT_IDENT_HI)<<8) | - INBZ(EisaSlot,EISA_PRODUCT_IDENT_LO); - - if ( Ident == RIO_EISA_IDENT ) - { - rio_dprintk (RIO_DEBUG_INIT, "Found Specialix product\n"); - - if ( INBZ(EisaSlot,EISA_PRODUCT_NUMBER) != RIO_EISA_PRODUCT_CODE ) - { - rio_dprintk (RIO_DEBUG_INIT, "Not Specialix RIO - Product number %x\n", - INBZ(EisaSlot, EISA_PRODUCT_NUMBER)); - continue; /* next slot */ - } - /* - ** Its a Specialix RIO! - */ - rio_dprintk (RIO_DEBUG_INIT, "RIO Revision %d\n", - INBZ(EisaSlot, EISA_REVISION_NUMBER)); - - RIOMachineType |= (1<= RIO_HOSTS ) - { - Rprintf(RIOMesgTooManyCards); - return 0; - } - - /* - ** Ensure that the enable bit is set! - */ - OUTBZ( EisaSlot, EISA_ENABLE, RIO_EISA_ENABLE_BIT ); - - /* - ** EISA_INTERRUPT_VEC contains the interrupt vector. - */ - Ivec = INBZ(EisaSlot,EISA_INTERRUPT_VEC); - -#ifdef RIODEBUG - switch ( Ivec & EISA_INTERRUPT_MASK ) - { - case EISA_IRQ_3: - rio_dprintk (RIO_DEBUG_INIT, "EISA IRQ 3\n"); - break; - case EISA_IRQ_4: - rio_dprintk (RIO_DEBUG_INIT, "EISA IRQ 4\n"); - break; - case EISA_IRQ_5: - rio_dprintk (RIO_DEBUG_INIT, "EISA IRQ 5\n"); - break; - case EISA_IRQ_6: - rio_dprintk (RIO_DEBUG_INIT, "EISA IRQ 6\n"); - break; - case EISA_IRQ_7: - rio_dprintk (RIO_DEBUG_INIT, "EISA IRQ 7\n"); - break; - case EISA_IRQ_9: - rio_dprintk (RIO_DEBUG_INIT, "EISA IRQ 9\n"); - break; - case EISA_IRQ_10: - rio_dprintk (RIO_DEBUG_INIT, "EISA IRQ 10\n"); - break; - case EISA_IRQ_11: - rio_dprintk (RIO_DEBUG_INIT, "EISA IRQ 11\n"); - break; - case EISA_IRQ_12: - rio_dprintk (RIO_DEBUG_INIT, "EISA IRQ 12\n"); - break; - case EISA_IRQ_14: - rio_dprintk (RIO_DEBUG_INIT, "EISA IRQ 14\n"); - break; - case EISA_IRQ_15: - rio_dprintk (RIO_DEBUG_INIT, "EISA IRQ 15\n"); - break; - case EISA_POLLED: - rio_dprintk (RIO_DEBUG_INIT, "EISA POLLED\n"); - break; - default: - rio_dprintk (RIO_DEBUG_INIT, NULL,DBG_INIT|DBG_FAIL,"Shagged interrupt number!\n"); - Ivec &= EISA_CONTROL_MASK; - } -#endif - - if ( (Ivec & EISA_INTERRUPT_MASK) == - EISA_POLLED ) - { - RIOWillPoll = 1; - break; /* From EisaSlot loop */ - } - } - } - - /* - ** Do it all again now we know whether to change all cards to polled - ** mode or not - */ - - for ( EisaSlot=1; EisaSlot<=RIO_MAX_EISA_SLOTS; EisaSlot++ ) - { - Ident = (INBZ(EisaSlot,EISA_PRODUCT_IDENT_HI)<<8) | - INBZ(EisaSlot,EISA_PRODUCT_IDENT_LO); - - if ( Ident == RIO_EISA_IDENT ) - { - if ( INBZ(EisaSlot,EISA_PRODUCT_NUMBER) != RIO_EISA_PRODUCT_CODE ) - continue; /* next slot */ - - /* - ** Its a Specialix RIO! - */ - - /* - ** Ensure that the enable bit is set! - */ - OUTBZ( EisaSlot, EISA_ENABLE, RIO_EISA_ENABLE_BIT ); - - /* - ** EISA_INTERRUPT_VEC contains the interrupt vector. - */ - Ivec = INBZ(EisaSlot,EISA_INTERRUPT_VEC); - - if ( RIOWillPoll ) - { - /* - ** If we are going to operate in polled mode, but this - ** board is configured to be interrupt driven, display - ** the message explaining the situation to the punter, - ** assuming we haven't already done so. - */ - - if ( !PollIntMixMsgDone && - (Ivec & EISA_INTERRUPT_MASK) != EISA_POLLED ) - { - Rprintf(RIOMesgAllPolled); - PollIntMixMsgDone = 1; - } - - /* - ** Ungraciously ignore whatever the board reports as its - ** interrupt vector... - */ - - Ivec &= ~EISA_INTERRUPT_MASK; - - /* - ** ...and force it to dance to the poll tune. - */ - - Ivec |= EISA_POLLED; - } - - /* - ** Convert the IRQ enable mask into something useful (0-15) - */ - Ivec = RIOEisaToIvec(Ivec); - - rio_dprintk (RIO_DEBUG_INIT, "EISA host in slot %d has Ivec 0x%x\n", - EisaSlot, Ivec); - - /* - ** Find the physical address - */ - Paddr = (INBZ(EisaSlot,EISA_MEMORY_BASE_HI)<<24) | - (INBZ(EisaSlot,EISA_MEMORY_BASE_LO)<<16); - - rio_dprintk (RIO_DEBUG_INIT, "EISA card has Ivec %d Addr %x\n", Ivec, Paddr); - - if ( Paddr == 0 ) - { - rio_dprintk (RIO_DEBUG_INIT, - "Board in slot %d configured for address zero!\n", EisaSlot); - continue; - } - - /* - ** Tell the memory mapper that we want to talk to it - */ - rio_dprintk (RIO_DEBUG_INIT, "About to map EISA card \n"); - - if (RIOMapin( Paddr, RIO_EISA_MEM_SIZE, &Caddr) == -1) { - rio_dprintk (RIO_DEBUG_INIT, "Couldn't map %d bytes at %x\n", - RIO_EISA_MEM_SIZE,Paddr); - continue; - } - - rio_dprintk (RIO_DEBUG_INIT, "Board mapped to vaddr 0x%x\n", Caddr); - - /* - ** And check that it is actually there! - */ - if ( RIOBoardTest( Paddr,Caddr,RIO_EISA,EisaSlot) == RIO_SUCCESS ) - { - rio_dprintk (RIO_DEBUG_INIT, "Board has passed test\n"); - rio_dprintk (RIO_DEBUG_INIT, - "Slot %d. Ivec %d. Type %d. Paddr 0x%x. Caddr 0x%x. Mode 0x%x.\n", - EisaSlot,Ivec,RIO_EISA,Paddr,Caddr,Mode); - - /* - ** Board has passed its scrub test. Fill in all the - ** transient stuff. - */ - p->RIOHosts[RIONumHosts].Slot = EisaSlot; - p->RIOHosts[RIONumHosts].Ivec = Ivec; - p->RIOHosts[RIONumHosts].Type = RIO_EISA; - p->RIOHosts[RIONumHosts].Copy = bcopy; - p->RIOHosts[RIONumHosts].PaddrP = Paddr; - p->RIOHosts[RIONumHosts].Caddr = Caddr; - p->RIOHosts[RIONumHosts].CardP = (struct DpRam *)Caddr; - p->RIOHosts[RIONumHosts].Mode = Mode; - /* - ** because the EISA prom is mapped into IO space, we - ** need to copy the unqiue number into the memory area - ** that it would have occupied, so that the download - ** code can determine its ID and card type. - */ - WBYTE(p->RIOHosts[RIONumHosts].Unique[0],INBZ(EisaSlot,EISA_UNIQUE_NUM_0)); - WBYTE(p->RIOHosts[RIONumHosts].Unique[1],INBZ(EisaSlot,EISA_UNIQUE_NUM_1)); - WBYTE(p->RIOHosts[RIONumHosts].Unique[2],INBZ(EisaSlot,EISA_UNIQUE_NUM_2)); - WBYTE(p->RIOHosts[RIONumHosts].Unique[3],INBZ(EisaSlot,EISA_UNIQUE_NUM_3)); - p->RIOHosts[RIONumHosts].UniqueNum = - ((RBYTE(p->RIOHosts[RIONumHosts].Unique[0])&0xFF)<<0)| - ((RBYTE(p->RIOHosts[RIONumHosts].Unique[1])&0xFF)<<8)| - ((RBYTE(p->RIOHosts[RIONumHosts].Unique[2])&0xFF)<<16)| - ((RBYTE(p->RIOHosts[RIONumHosts].Unique[3])&0xFF)<<24); - INBZ(EisaSlot,EISA_INTERRUPT_RESET); - RIONumHosts++; - ret++; - } - else - { - /* - ** It failed the test, so ignore it. - */ - rio_dprintk (RIO_DEBUG_INIT, "TEST FAILED\n"); - - RIOMapout(Paddr, RIO_EISA_MEM_SIZE, Caddr ); - } - } - } - if (RIOMachineType & RIO_EISA) - return ret+1; - return ret; -} -#endif - - -#ifndef linux - -#define CONFIG_ADDRESS 0xcf8 -#define CONFIG_DATA 0xcfc -#define FORWARD_REG 0xcfa - - -static int -read_config(int bus_number, int device_num, int r_number) -{ - unsigned int cav; - unsigned int val; - -/* - Build config_address_value: - - 31 24 23 16 15 11 10 8 7 0 - ------------------------------------------------------ - |1| 0000000 | bus_number | device # | 000 | register | - ------------------------------------------------------ -*/ - - cav = r_number & 0xff; - cav |= ((device_num & 0x1f) << 11); - cav |= ((bus_number & 0xff) << 16); - cav |= 0x80000000; /* Enable bit */ - outpd(CONFIG_ADDRESS,cav); - val = inpd(CONFIG_DATA); - outpd(CONFIG_ADDRESS,0); - return val; -} - -static -write_config(bus_number,device_num,r_number,val) -{ - unsigned int cav; - -/* - Build config_address_value: - - 31 24 23 16 15 11 10 8 7 0 - ------------------------------------------------------ - |1| 0000000 | bus_number | device # | 000 | register | - ------------------------------------------------------ -*/ - - cav = r_number & 0xff; - cav |= ((device_num & 0x1f) << 11); - cav |= ((bus_number & 0xff) << 16); - cav |= 0x80000000; /* Enable bit */ - outpd(CONFIG_ADDRESS, cav); - outpd(CONFIG_DATA, val); - outpd(CONFIG_ADDRESS, 0); - return val; -} -#else -/* XXX Implement these... */ -static int -read_config(int bus_number, int device_num, int r_number) -{ - return 0; -} - -static int -write_config(int bus_number, int device_num, int r_number) -{ - return 0; -} - -#endif - -int -RIOPCIinit(p, Mode) -struct rio_info *p; -int Mode; -{ - #define MAX_PCI_SLOT 32 - #define RIO_PCI_JET_CARD 0x200011CB - - static int slot; /* count of machine's PCI slots searched so far */ - caddr_t Caddr; /* Virtual address of the current PCI host card. */ - unsigned char Ivec; /* interrupt vector for the current PCI host */ - unsigned long Paddr; /* Physical address for the current PCI host */ - int Handle; /* Handle to Virtual memory allocated for current PCI host */ - - - rio_dprintk (RIO_DEBUG_INIT, "Search for a RIO PCI card - start at slot %d\n", slot); - - /* - ** Initialise the search status - */ - p->RIOLastPCISearch = RIO_FAIL; - - while ( (slot < MAX_PCI_SLOT) & (p->RIOLastPCISearch != RIO_SUCCESS) ) - { - rio_dprintk (RIO_DEBUG_INIT, "Currently testing slot %d\n", slot); - - if (read_config(0,slot,0) == RIO_PCI_JET_CARD) { - p->RIOHosts[p->RIONumHosts].Ivec = 0; - Paddr = read_config(0,slot,0x18); - Paddr = Paddr - (Paddr & 0x1); /* Mask off the io bit */ - - if ( (Paddr == 0) || ((Paddr & 0xffff0000) == 0xffff0000) ) { - rio_dprintk (RIO_DEBUG_INIT, "Goofed up slot\n"); /* what! */ - slot++; - continue; - } - - p->RIOHosts[p->RIONumHosts].PaddrP = Paddr; - Ivec = (read_config(0,slot,0x3c) & 0xff); - - rio_dprintk (RIO_DEBUG_INIT, "PCI Host at 0x%x, Intr %d\n", (int)Paddr, Ivec); - - Handle = RIOMapin( Paddr, RIO_PCI_MEM_SIZE, &Caddr ); - if (Handle == -1) { - rio_dprintk (RIO_DEBUG_INIT, "Couldn't map %d bytes at 0x%x\n", RIO_PCI_MEM_SIZE, (int)Paddr); - slot++; - continue; - } - p->RIOHosts[p->RIONumHosts].Ivec = Ivec + 32; - p->intr_tid = iointset(p->RIOHosts[p->RIONumHosts].Ivec, - (int (*)())rio_intr, (char *)p->RIONumHosts); - if (RIOBoardTest( Paddr, Caddr, RIO_PCI, 0 ) == RIO_SUCCESS) { - rio_dprintk (RIO_DEBUG_INIT, ("Board has passed test\n"); - rio_dprintk (RIO_DEBUG_INIT, ("Paddr 0x%x. Caddr 0x%x. Mode 0x%x.\n", Paddr, Caddr, Mode); - - /* - ** Board has passed its scrub test. Fill in all the - ** transient stuff. - */ - p->RIOHosts[p->RIONumHosts].Slot = 0; - p->RIOHosts[p->RIONumHosts].Ivec = Ivec + 32; - p->RIOHosts[p->RIONumHosts].Type = RIO_PCI; - p->RIOHosts[p->RIONumHosts].Copy = rio_pcicopy; - p->RIOHosts[p->RIONumHosts].PaddrP = Paddr; - p->RIOHosts[p->RIONumHosts].Caddr = Caddr; - p->RIOHosts[p->RIONumHosts].CardP = (struct DpRam *)Caddr; - p->RIOHosts[p->RIONumHosts].Mode = Mode; - -#if 0 - WBYTE(p->RIOHosts[p->RIONumHosts].Control, - BOOT_FROM_RAM | EXTERNAL_BUS_OFF | - p->RIOHosts[p->RIONumHosts].Mode | - INTERRUPT_DISABLE ); - WBYTE(p->RIOHosts[p->RIONumHosts].ResetInt,0xff); - WBYTE(p->RIOHosts[p->RIONumHosts].Control, - BOOT_FROM_RAM | EXTERNAL_BUS_OFF | - p->RIOHosts[p->RIONumHosts].Mode | - INTERRUPT_DISABLE ); - WBYTE(p->RIOHosts[p->RIONumHosts].ResetInt,0xff); -#else - WBYTE(p->RIOHosts[p->RIONumHosts].ResetInt, 0xff); -#endif - p->RIOHosts[p->RIONumHosts].UniqueNum = - ((RBYTE(p->RIOHosts[p->RIONumHosts].Unique[0])&0xFF)<<0)| - ((RBYTE(p->RIOHosts[p->RIONumHosts].Unique[1])&0xFF)<<8)| - ((RBYTE(p->RIOHosts[p->RIONumHosts].Unique[2])&0xFF)<<16)| - ((RBYTE(p->RIOHosts[p->RIONumHosts].Unique[3])&0xFF)<<24); - - rio_dprintk (RIO_DEBUG_INIT, "Unique no 0x%x.\n", - p->RIOHosts[p->RIONumHosts].UniqueNum); - - p->RIOLastPCISearch = RIO_SUCCESS; - p->RIONumHosts++; - } - } - slot++; - } - - if ( slot >= MAX_PCI_SLOT ) { - rio_dprintk (RIO_DEBUG_INIT, "All %d PCI slots have tested for RIO cards !!!\n", - MAX_PCI_SLOT); - } - - - /* - ** I don't think we want to do this anymore - ** - - if (!p->RIOLastPCISearch == RIO_FAIL ) { - p->RIOFailed++; - } - - ** - */ -} - -#ifdef FUTURE_RELEASE -void riohalt( void ) -{ - int host; - for ( host=0; hostRIONumHosts; host++ ) - { - rio_dprintk (RIO_DEBUG_INIT, "Stop host %d\n", host); - (void)RIOBoardTest( p->RIOHosts[host].PaddrP, p->RIOHosts[host].Caddr, p->RIOHosts[host].Type,p->RIOHosts[host].Slot ); - } -} -#endif -#endif static uchar val[] = { #ifdef VERY_LONG_TEST @@ -1262,200 +387,6 @@ int size; return RIO_SUCCESS; } -/* -** try to ensure that every host is either in polled mode -** or is in interrupt mode. Only allow interrupt mode if -** all hosts can interrupt (why?) -** and force into polled mode if told to. Patch up the -** interrupt vector & salute The Queen when you've done. -*/ -#if 0 -static void -RIOAllocateInterrupts(p) -struct rio_info * p; -{ - int Host; - - /* - ** Easy case - if we have been told to poll, then we poll. - */ - if (p->mode & POLLED_MODE) { - RIOStopInterrupts(p, 0, 0); - return; - } - - /* - ** check - if any host has been set to polled mode, then all must be. - */ - for (Host=0; HostRIONumHosts; Host++) { - if ( (p->RIOHosts[Host].Type != RIO_AT) && - (p->RIOHosts[Host].Ivec == POLLED) ) { - RIOStopInterrupts(p, 1, Host ); - return; - } - } - for (Host=0; HostRIONumHosts; Host++) { - if (p->RIOHosts[Host].Type == RIO_AT) { - if ( (p->RIOHosts[Host].Ivec - 32) == 0) { - RIOStopInterrupts(p, 2, Host ); - return; - } - } - } -} - -/* -** something has decided that we can't be doing with these -** new-fangled interrupt thingies. Set everything up to just -** poll. -*/ -static void -RIOStopInterrupts(p, Reason, Host) -struct rio_info * p; -int Reason; -int Host; -{ -#ifdef FUTURE_RELEASE - switch (Reason) { - case 0: /* forced into polling by rio_polled */ - break; - case 1: /* SCU has set 'Host' into polled mode */ - break; - case 2: /* there aren't enough interrupt vectors for 'Host' */ - break; - } -#endif - - for (Host=0; HostRIONumHosts; Host++ ) { - struct Host *HostP = &p->RIOHosts[Host]; - - switch (HostP->Type) { - case RIO_AT: - /* - ** The AT host has it's interrupts disabled by clearing the - ** int_enable bit. - */ - HostP->Mode &= ~INTERRUPT_ENABLE; - HostP->Ivec = POLLED; - break; -#ifdef FUTURE_RELEASE - case RIO_EISA: - /* - ** The EISA host has it's interrupts disabled by setting the - ** Ivec to zero - */ - HostP->Ivec = POLLED; - break; -#endif - case RIO_PCI: - /* - ** The PCI host has it's interrupts disabled by clearing the - ** int_enable bit, like a regular host card. - */ - HostP->Mode &= ~RIO_PCI_INT_ENABLE; - HostP->Ivec = POLLED; - break; -#ifdef FUTURE_RELEASE - case RIO_MCA: - /* - ** There's always one, isn't there? - ** The MCA host card cannot have it's interrupts disabled. - */ - RIOPatchVec(HostP); - break; -#endif - } - } -} - -/* -** This function is called at init time to setup the data structures. -*/ -void -RIOAllocDataStructs(p) -struct rio_info * p; -{ - int port, - host, - tm; - - p->RIOPortp = (struct Port *)sysbrk(RIO_PORTS * sizeof(struct Port)); - if (!p->RIOPortp) { - rio_dprintk (RIO_DEBUG_INIT, "RIO-init: No memory for port structures\n"); - p->RIOFailed++; - return; - } - bzero( p->RIOPortp, sizeof(struct Port) * RIO_PORTS ); - rio_dprintk (RIO_DEBUG_INIT, "RIO-init: allocated and cleared memory for port structs\n"); - rio_dprintk (RIO_DEBUG_INIT, "First RIO port struct @0x%x, size=0x%x bytes\n", - (int)p->RIOPortp, sizeof(struct Port)); - - for( port=0; portRIOPortp[port].PortNum = port; - p->RIOPortp[port].TtyP = &p->channel[port]; - sreset (p->RIOPortp[port].InUse); /* Let the first guy uses it */ - p->RIOPortp[port].portSem = -1; /* Let the first guy takes it */ - p->RIOPortp[port].ParamSem = -1; /* Let the first guy takes it */ - p->RIOPortp[port].timeout_id = 0; /* Let the first guy takes it */ - } - - p->RIOHosts = (struct Host *)sysbrk(RIO_HOSTS * sizeof(struct Host)); - if (!p->RIOHosts) { - rio_dprintk (RIO_DEBUG_INIT, "RIO-init: No memory for host structures\n"); - p->RIOFailed++; - return; - } - bzero(p->RIOHosts, sizeof(struct Host)*RIO_HOSTS); - rio_dprintk (RIO_DEBUG_INIT, "RIO-init: allocated and cleared memory for host structs\n"); - rio_dprintk (RIO_DEBUG_INIT, "First RIO host struct @0x%x, size=0x%x bytes\n", - (int)p->RIOHosts, sizeof(struct Host)); - - for( host=0; hostRIOHosts[host].HostLock); - p->RIOHosts[host].timeout_id = 0; /* Let the first guy takes it */ - } - /* - ** check that the buffer size is valid, round down to the next power of - ** two if necessary; if the result is zero, then, hey, no double buffers. - */ - for ( tm = 1; tm && tm <= p->RIOConf.BufferSize; tm <<= 1 ) - ; - tm >>= 1; - p->RIOBufferSize = tm; - p->RIOBufferMask = tm ? tm - 1 : 0; -} - -/* -** this function gets called whenever the data structures need to be -** re-setup, for example, after a riohalt (why did I ever invent it?) -*/ -void -RIOSetupDataStructs(p) -struct rio_info * p; -{ - int host, entry, rup; - - for ( host=0; hostRIOHosts[host]; - for ( entry=0; entryTopology[entry].Unit = ROUTE_DISCONNECT; - HostP->Topology[entry].Link = NO_LINK; - } - bcopy("HOST X", HostP->Name, 7); - HostP->Name[5] = '1'+host; - for (rup=0; rup<(MAX_RUP + LINKS_PER_UNIT); rup++) { - if (rup < MAX_RUP) { - for (entry=0; entryMapping[rup].Topology[entry].Unit = ROUTE_DISCONNECT; - HostP->Mapping[rup].Topology[entry].Link = NO_LINK; - } - RIODefaultName(p, HostP, rup); - } - spin_lock_init(&HostP->UnixRups[rup].RupLock); - } - } -} -#endif int RIODefaultName(p, HostP, UnitId) @@ -1463,10 +394,6 @@ struct rio_info * p; struct Host * HostP; uint UnitId; { -#ifdef CHECK - CheckHost( Host ); - CheckUnitId( UnitId ); -#endif bcopy("UNKNOWN RTA X-XX",HostP->Mapping[UnitId].Name,17); HostP->Mapping[UnitId].Name[12]='1'+(HostP-p->RIOHosts); if ((UnitId+1) > 9) { @@ -1483,33 +410,6 @@ uint UnitId; #define RIO_RELEASE "Linux" #define RELEASE_ID "1.0" -#if 0 -static int -RIOReport(p) -struct rio_info * p; -{ - char * RIORelease = RIO_RELEASE; - char * RIORelID = RELEASE_ID; - int host; - - rio_dprintk (RIO_DEBUG_INIT, "RIO : Release: %s ID: %s\n", RIORelease, RIORelID); - - if ( p->RIONumHosts==0 ) { - rio_dprintk (RIO_DEBUG_INIT, "\nNo Hosts configured\n"); - return(0); - } - - for ( host=0; host < p->RIONumHosts; host++ ) { - struct Host *HostP = &p->RIOHosts[host]; - switch ( HostP->Type ) { - case RIO_AT: - rio_dprintk (RIO_DEBUG_INIT, "AT BUS : found the card at 0x%x\n", HostP->PaddrP); - } - } - return 0; -} -#endif - static struct rioVersion stVersion; struct rioVersion * @@ -1523,27 +423,6 @@ RIOVersid(void) return &stVersion; } -#if 0 -int -RIOMapin(paddr, size, vaddr) -paddr_t paddr; -int size; -caddr_t * vaddr; -{ - *vaddr = (caddr_t)permap( (long)paddr, size); - return ((int)*vaddr); -} - -void -RIOMapout(paddr, size, vaddr) -paddr_t paddr; -long size; -caddr_t vaddr; -{ -} -#endif - - void RIOHostReset(Type, DpRamP, Slot) uint Type; @@ -1570,31 +449,6 @@ uint Slot; WBYTE(DpRamP->DpResetTpu, 0xFF); udelay(3); break; -#ifdef FUTURE_RELEASE - case RIO_EISA: - /* - ** Bet this doesn't work! - */ - OUTBZ( Slot, EISA_CONTROL_PORT, - EISA_TP_RUN | EISA_TP_BUS_DISABLE | - EISA_TP_SLOW_LINKS | EISA_TP_BOOT_FROM_RAM ); - OUTBZ( Slot, EISA_CONTROL_PORT, - EISA_TP_RESET | EISA_TP_BUS_DISABLE | - EISA_TP_SLOW_LINKS | EISA_TP_BOOT_FROM_RAM ); - suspend( 3 ); - OUTBZ( Slot, EISA_CONTROL_PORT, - EISA_TP_RUN | EISA_TP_BUS_DISABLE | - EISA_TP_SLOW_LINKS | EISA_TP_BOOT_FROM_RAM ); - break; - case RIO_MCA: - WBYTE(DpRamP->DpControl , McaTpBootFromRam | McaTpBusDisable ); - WBYTE(DpRamP->DpResetTpu , 0xFF ); - suspend( 3 ); - WBYTE(DpRamP->DpControl , McaTpBootFromRam | McaTpBusDisable ); - WBYTE(DpRamP->DpResetTpu , 0xFF ); - suspend( 3 ); - break; -#endif case RIO_PCI: rio_dprintk (RIO_DEBUG_INIT, " (RIO_PCI)\n"); DpRamP->DpControl = RIO_PCI_BOOT_FROM_RAM; @@ -1604,12 +458,6 @@ uint Slot; /* for (i=0; i<6000; i++); */ /* suspend( 3 ); */ break; -#ifdef FUTURE_RELEASE - default: - Rprintf(RIOMesgNoSupport,Type,DpRamP,Slot); - return; -#endif - default: rio_dprintk (RIO_DEBUG_INIT, " (UNKNOWN)\n"); break; -- cgit v1.2.3 From f099bfb7089735ad1760b3c6938069af10a88cc0 Mon Sep 17 00:00:00 2001 From: Alan Cox Date: Mon, 16 Jan 2006 17:18:05 +0000 Subject: [PATCH] Remove unused code from rioboot.h Signed-off-by: Alan Cox Signed-off-by: Linus Torvalds --- drivers/char/rio/rioboot.c | 61 ---------------------------------------------- 1 file changed, 61 deletions(-) (limited to 'drivers/char/rio') diff --git a/drivers/char/rio/rioboot.c b/drivers/char/rio/rioboot.c index 34cbb13aad4b..92df43552f15 100644 --- a/drivers/char/rio/rioboot.c +++ b/drivers/char/rio/rioboot.c @@ -665,13 +665,6 @@ struct PKT *PacketP; struct CmdBlk *CmdBlkP; uint sequence; -#ifdef CHECK - CheckHost(Host); - CheckRup(Rup); - CheckHostP(HostP); - CheckPacketP(PacketP); -#endif - /* ** If we haven't been told what to boot, we can't boot it. */ @@ -956,11 +949,6 @@ static int RIOBootComplete( struct rio_info *p, struct Host *HostP, uint Rup, st MyType = "RTA"; MyName = HostP->Mapping[Rup].Name; } -#ifdef CHECK - CheckString(MyType); - CheckString(MyName); -#endif - MyLink = RBYTE(PktCmdP->LinkNum); /* @@ -1309,52 +1297,3 @@ struct Host *HostP; } } -#if 0 -/* - Function: This function is to disable the disk interrupt - Returns : Nothing -*/ -void -disable_interrupt(vector) -int vector; -{ - int ps; - int val; - - disable(ps); - if (vector > 40) { - val = 1 << (vector - 40); - __outb(S8259+1, __inb(S8259+1) | val); - } - else { - val = 1 << (vector - 32); - __outb(M8259+1, __inb(M8259+1) | val); - } - restore(ps); -} - -/* - Function: This function is to enable the disk interrupt - Returns : Nothing -*/ -void -enable_interrupt(vector) -int vector; -{ - int ps; - int val; - - disable(ps); - if (vector > 40) { - val = 1 << (vector - 40); - val = ~val; - __outb(S8259+1, __inb(S8259+1) & val); - } - else { - val = 1 << (vector - 32); - val = ~val; - __outb(M8259+1, __inb(M8259+1) & val); - } - restore(ps); -} -#endif -- cgit v1.2.3 From 8b03de1f667a5c15d1e4d50318a27a67669f8980 Mon Sep 17 00:00:00 2001 From: Alan Cox Date: Mon, 16 Jan 2006 17:19:52 +0000 Subject: [PATCH] Remove unused code from rioroute.h Signed-off-by: Alan Cox Signed-off-by: Linus Torvalds --- drivers/char/rio/rioroute.c | 24 ------------------------ 1 file changed, 24 deletions(-) (limited to 'drivers/char/rio') diff --git a/drivers/char/rio/rioroute.c b/drivers/char/rio/rioroute.c index 0f4cd33ba641..f98888f52659 100644 --- a/drivers/char/rio/rioroute.c +++ b/drivers/char/rio/rioroute.c @@ -112,15 +112,6 @@ int RIORouteRup(struct rio_info *p, uint Rup, struct Host *HostP, PKT * PacketP) int Lies; unsigned long flags; -#ifdef STACK - RIOStackCheck("RIORouteRup"); -#endif -#ifdef CHECK - CheckPacketP(PacketP); - CheckHostP(HostP); - CheckRup(Rup); - CheckHost(Host); -#endif /* ** Is this unit telling us it's current link topology? */ @@ -540,9 +531,6 @@ uint unit; for (port = 0; port < PORTS_PER_RTA; port++, PortN++) { ushort dest_port = port + 8; -#if 0 - uint PktInt; -#endif WORD *TxPktP; PKT *Pkt; @@ -623,10 +611,6 @@ uint UnitId; unsigned long flags; rio_spin_lock_irqsave(&HostP->HostLock, flags); -#ifdef CHECK - CheckHostP(HostP); - CheckUnitId(UnitId); -#endif if (RIOCheck(HostP, UnitId)) { rio_dprintk(RIO_DEBUG_ROUTE, "Unit %d is NOT isolated\n", UnitId); rio_spin_unlock_irqrestore(&HostP->HostLock, flags); @@ -651,10 +635,6 @@ uint UnitId; { uint link, unit; -#ifdef CHECK - CheckHostP(HostP); - CheckUnitId(UnitId); -#endif UnitId--; /* this trick relies on the Unit Id being UNSIGNED! */ if (UnitId >= MAX_RUP) /* dontcha just lurv unsigned maths! */ @@ -684,10 +664,6 @@ uint UnitId; { unsigned char link; -#ifdef CHECK - CheckHostP(HostP); - CheckUnitId(UnitId); -#endif /* rio_dprint(RIO_DEBUG_ROUTE, ("Check to see if unit %d has a route to the host\n",UnitId)); */ rio_dprintk(RIO_DEBUG_ROUTE, "RIOCheck : UnitID = %d\n", UnitId); -- cgit v1.2.3 From 283c9d546ed7506b03f0d9da4441145aa5f2f6f9 Mon Sep 17 00:00:00 2001 From: Alan Cox Date: Mon, 16 Jan 2006 17:21:25 +0000 Subject: [PATCH] Remove unused CHECK code from riocmd.c Signed-off-by: Alan Cox Signed-off-by: Linus Torvalds --- drivers/char/rio/riocmd.c | 30 ------------------------------ 1 file changed, 30 deletions(-) (limited to 'drivers/char/rio') diff --git a/drivers/char/rio/riocmd.c b/drivers/char/rio/riocmd.c index b97dd9fdb6ba..694bfb9d9378 100644 --- a/drivers/char/rio/riocmd.c +++ b/drivers/char/rio/riocmd.c @@ -387,12 +387,6 @@ static int RIOCommandRup(struct rio_info *p, uint Rup, struct Host *HostP, PKT * func_enter(); -#ifdef CHECK - CheckHost(Host); - CheckHostP(HostP); - CheckPacketP(PacketP); -#endif - /* ** 16 port RTA note: ** Command rup packets coming from the RTA will have pkt->data[1] (which @@ -406,10 +400,6 @@ static int RIOCommandRup(struct rio_info *p, uint Rup, struct Host *HostP, PKT * SysPort = UnixRupP->BaseSysPort + (RBYTE(PktCmdP->PhbNum) % (ushort) PORTS_PER_RTA); rio_dprintk(RIO_DEBUG_CMD, "Command on rup %d, port %d\n", rup, SysPort); -#ifdef CHECK - CheckRup(rup); - CheckUnixRupP(UnixRupP); -#endif if (UnixRupP->BaseSysPort == NO_PORT) { rio_dprintk(RIO_DEBUG_CMD, "OBSCURE ERROR!\n"); rio_dprintk(RIO_DEBUG_CMD, "Diagnostics follow. Please WRITE THESE DOWN and report them to Specialix Technical Support\n"); @@ -429,9 +419,6 @@ static int RIOCommandRup(struct rio_info *p, uint Rup, struct Host *HostP, PKT * rio_dprintk(RIO_DEBUG_CMD, "COMMAND information: Host Port Number 0x%x, " "Command Code 0x%x\n", PktCmdP->PhbNum, PktCmdP->Command); return TRUE; } -#ifdef CHECK - CheckSysPort(SysPort); -#endif PortP = p->RIOPortp[SysPort]; rio_spin_lock_irqsave(&PortP->portSem, flags); switch (RBYTE(PktCmdP->Command)) { @@ -604,11 +591,6 @@ int RIOQueueCmdBlk(struct Host *HostP, uint Rup, struct CmdBlk *CmdBlkP) struct UnixRup *UnixRupP; unsigned long flags; -#ifdef CHECK - CheckHostP(HostP); - CheckRup(Rup); - CheckCmdBlkP(CmdBlkP); -#endif if (Rup >= (ushort) (MAX_RUP + LINKS_PER_UNIT)) { rio_dprintk(RIO_DEBUG_CMD, "Illegal rup number %d in RIOQueueCmdBlk\n", Rup); RIOFreeCmdBlk(CmdBlkP); @@ -806,9 +788,6 @@ void RIOPollHostCommands(struct rio_info *p, struct Host *HostP) ** If it returns RIO_FAIL then don't ** send this command yet! */ -#ifdef CHECK - CheckCmdBlkP(CmdBlkP); -#endif if (!(CmdBlkP->PreFuncP ? (*CmdBlkP->PreFuncP) (CmdBlkP->PreArg, CmdBlkP) : TRUE)) { rio_dprintk(RIO_DEBUG_CMD, "Not ready to start command 0x%x\n", (int) CmdBlkP); } else { @@ -816,9 +795,6 @@ void RIOPollHostCommands(struct rio_info *p, struct Host *HostP) /* ** Whammy! blat that pack! */ -#ifdef CHECK - CheckPacketP((PKT *) RIO_PTR(HostP->Caddr, UnixRupP->RupP->txpkt)); -#endif HostP->Copy((caddr_t) & CmdBlkP->Packet, RIO_PTR(HostP->Caddr, UnixRupP->RupP->txpkt), sizeof(PKT)); /* @@ -852,9 +828,6 @@ int RIOWFlushMark(int iPortP, struct CmdBlk *CmdBlkP) unsigned long flags; rio_spin_lock_irqsave(&PortP->portSem, flags); -#ifdef CHECK - CheckPortP(PortP); -#endif PortP->WflushFlag++; PortP->MagicFlags |= MAGIC_FLUSH; rio_spin_unlock_irqrestore(&PortP->portSem, flags); @@ -894,9 +867,6 @@ int RIOUnUse(int iPortP, struct CmdBlk *CmdBlkP) rio_spin_lock_irqsave(&PortP->portSem, flags); -#ifdef CHECK - CheckPortP(PortP); -#endif rio_dprintk(RIO_DEBUG_CMD, "Decrement in use count for port\n"); if (PortP->InUse) { -- cgit v1.2.3 From 542ea6c37c2a77f7523c0703c326b8a9af2892bc Mon Sep 17 00:00:00 2001 From: Alan Cox Date: Mon, 16 Jan 2006 17:24:47 +0000 Subject: [PATCH] Remove unused code from rio_linux.c Signed-off-by: Linus Torvalds --- drivers/char/rio/rio_linux.c | 60 -------------------------------------------- 1 file changed, 60 deletions(-) (limited to 'drivers/char/rio') diff --git a/drivers/char/rio/rio_linux.c b/drivers/char/rio/rio_linux.c index 8825bd61b7d0..c9af283a811d 100644 --- a/drivers/char/rio/rio_linux.c +++ b/drivers/char/rio/rio_linux.c @@ -132,16 +132,6 @@ more than 512 ports.... */ */ #define IRQ_RATE_LIMIT 200 -#if 0 -/* Not implemented */ -/* - * The following defines are mostly for testing purposes. But if you need - * some nice reporting in your syslog, you can define them also. - */ -#define RIO_REPORT_FIFO -#define RIO_REPORT_OVERRUN -#endif - /* These constants are derived from SCO Source */ static struct Conf @@ -573,21 +563,6 @@ static void rio_shutdown_port(void *ptr) PortP = (struct Port *) ptr; PortP->gs.tty = NULL; -#if 0 - port->gs.flags &= ~GS_ACTIVE; - if (!port->gs.tty) { - rio_dprintk(RIO_DBUG_TTY, "No tty.\n"); - return; - } - if (!port->gs.tty->termios) { - rio_dprintk(RIO_DEBUG_TTY, "No termios.\n"); - return; - } - if (port->gs.tty->termios->c_cflag & HUPCL) { - rio_setsignals(port, 0, 0); - } -#endif - func_exit(); } @@ -663,11 +638,6 @@ static int rio_ioctl(struct tty_struct *tty, struct file *filp, unsigned int cmd rc = 0; switch (cmd) { -#if 0 - case TIOCGSOFTCAR: - rc = put_user(((tty->termios->c_cflag & CLOCAL) ? 1 : 0), (unsigned int *) arg); - break; -#endif case TIOCSSOFTCAR: if ((rc = get_user(ival, (unsigned int *) arg)) == 0) { tty->termios->c_cflag = (tty->termios->c_cflag & ~CLOCAL) | (ival ? CLOCAL : 0); @@ -709,36 +679,6 @@ static int rio_ioctl(struct tty_struct *tty, struct file *filp, unsigned int cmd if (access_ok(VERIFY_READ, (void *) arg, sizeof(struct serial_struct))) rc = gs_setserial(&PortP->gs, (struct serial_struct *) arg); break; -#if 0 - /* - * note: these IOCTLs no longer reach here. Use - * tiocmset/tiocmget driver methods instead. The - * #if 0 disablement predates this comment. - */ - case TIOCMGET: - rc = -EFAULT; - if (access_ok(VERIFY_WRITE, (void *) arg, sizeof(unsigned int))) { - rc = 0; - ival = rio_getsignals(port); - put_user(ival, (unsigned int *) arg); - } - break; - case TIOCMBIS: - if ((rc = get_user(ival, (unsigned int *) arg)) == 0) { - rio_setsignals(port, ((ival & TIOCM_DTR) ? 1 : -1), ((ival & TIOCM_RTS) ? 1 : -1)); - } - break; - case TIOCMBIC: - if ((rc = get_user(ival, (unsigned int *) arg)) == 0) { - rio_setsignals(port, ((ival & TIOCM_DTR) ? 0 : -1), ((ival & TIOCM_RTS) ? 0 : -1)); - } - break; - case TIOCMSET: - if ((rc = get_user(ival, (unsigned int *) arg)) == 0) { - rio_setsignals(port, ((ival & TIOCM_DTR) ? 1 : 0), ((ival & TIOCM_RTS) ? 1 : 0)); - } - break; -#endif default: rc = -ENOIOCTLCMD; break; -- cgit v1.2.3 From 1384cee55d326e806158cea4b983ef2a9d26e035 Mon Sep 17 00:00:00 2001 From: Alan Cox Date: Mon, 16 Jan 2006 17:25:42 +0000 Subject: [PATCH] Remove rio_table.c unused code Signed-off-by: Alan Cox Signed-off-by: Linus Torvalds --- drivers/char/rio/riotable.c | 8 -------- 1 file changed, 8 deletions(-) (limited to 'drivers/char/rio') diff --git a/drivers/char/rio/riotable.c b/drivers/char/rio/riotable.c index 42c3dffcbbb2..a86b216ab653 100644 --- a/drivers/char/rio/riotable.c +++ b/drivers/char/rio/riotable.c @@ -754,11 +754,6 @@ struct Map *HostMapP; ushort RtaType; unsigned long flags; -#ifdef CHECK - CheckHostP(HostP); - CheckHostMapP(HostMapP); -#endif - rio_dprintk(RIO_DEBUG_TABLE, "Mapping sysport %d to id %d\n", (int) HostMapP->SysPort, HostMapP->ID); /* @@ -784,9 +779,6 @@ struct Map *HostMapP; rio_dprintk(RIO_DEBUG_TABLE, "c1 p = %p, p->rioPortp = %p\n", p, p->RIOPortp); PortP = p->RIOPortp[SysPort]; -#if 0 - PortP->TtyP = &p->channel[SysPort]; -#endif rio_dprintk(RIO_DEBUG_TABLE, "Map port\n"); /* -- cgit v1.2.3 From f4caf1606d3bbe3a790997e3dc5bb2779c6b7daf Mon Sep 17 00:00:00 2001 From: Alan Cox Date: Mon, 16 Jan 2006 17:27:38 +0000 Subject: [PATCH] Remove unused code from rioctrl.c (Last for this batch of work) Signed-off-by: Alan Cox Signed-off-by: Linus Torvalds --- drivers/char/rio/rioctrl.c | 111 +-------------------------------------------- 1 file changed, 1 insertion(+), 110 deletions(-) (limited to 'drivers/char/rio') diff --git a/drivers/char/rio/rioctrl.c b/drivers/char/rio/rioctrl.c index 0b7700d2f049..fcf18a061228 100644 --- a/drivers/char/rio/rioctrl.c +++ b/drivers/char/rio/rioctrl.c @@ -308,12 +308,7 @@ int su; } case RIO_DEBUG_MEM: -#ifdef DEBUG_MEM_SUPPORT - RIO_DEBUG_CTRL, if (su) - return rio_RIODebugMemory(RIO_DEBUG_CTRL, arg); - else -#endif - return -EPERM; + return -EPERM; case RIO_ALL_MODEM: rio_dprintk(RIO_DEBUG_CTRL, "RIO_ALL_MODEM\n"); @@ -591,12 +586,7 @@ int su; case RIO_GET_LOG: rio_dprintk(RIO_DEBUG_CTRL, "RIO_GET_LOG\n"); -#ifdef LOGGING - RIOGetLog(arg); - return 0; -#else return -EINVAL; -#endif case RIO_GET_MODTYPE: if (copyin((int) arg, (caddr_t) & port, sizeof(uint)) == COPYFAIL) { @@ -684,52 +674,6 @@ int su; rio_dprintk(RIO_DEBUG_CTRL, "entering loop (%d %d)!\n", PortSetup.From, PortSetup.To); for (loop = PortSetup.From; loop <= PortSetup.To; loop++) { rio_dprintk(RIO_DEBUG_CTRL, "in loop (%d)!\n", loop); -#if 0 - PortP = p->RIOPortp[loop]; - if (!PortP->TtyP) - PortP->TtyP = &p->channel[loop]; - - rio_spin_lock_irqsave(&PortP->portSem, flags); - if (PortSetup.IxAny) - PortP->Config |= RIO_IXANY; - else - PortP->Config &= ~RIO_IXANY; - if (PortSetup.IxOn) - PortP->Config |= RIO_IXON; - else - PortP->Config &= ~RIO_IXON; - - /* - ** If the port needs to wait for all a processes output - ** to drain before closing then this flag will be set. - */ - if (PortSetup.Drain) { - PortP->Config |= RIO_WAITDRAIN; - } else { - PortP->Config &= ~RIO_WAITDRAIN; - } - /* - ** Store settings if locking or unlocking port or if the - ** port is not locked, when setting the store option. - */ - if (PortP->Mapped && ((PortSetup.Lock && !PortP->Lock) || (!PortP->Lock && (PortSetup.Store && !PortP->Store)))) { - PortP->StoredTty.iflag = PortP->TtyP->tm.c_iflag; - PortP->StoredTty.oflag = PortP->TtyP->tm.c_oflag; - PortP->StoredTty.cflag = PortP->TtyP->tm.c_cflag; - PortP->StoredTty.lflag = PortP->TtyP->tm.c_lflag; - PortP->StoredTty.line = PortP->TtyP->tm.c_line; - bcopy(PortP->TtyP->tm.c_cc, PortP->StoredTty.cc, NCC + 5); - } - PortP->Lock = PortSetup.Lock; - PortP->Store = PortSetup.Store; - PortP->Xprint.XpCps = PortSetup.XpCps; - bcopy(PortSetup.XpOn, PortP->Xprint.XpOn, MAX_XP_CTRL_LEN); - bcopy(PortSetup.XpOff, PortP->Xprint.XpOff, MAX_XP_CTRL_LEN); - PortP->Xprint.XpOn[MAX_XP_CTRL_LEN - 1] = '\0'; - PortP->Xprint.XpOff[MAX_XP_CTRL_LEN - 1] = '\0'; - PortP->Xprint.XpLen = RIOStrlen(PortP->Xprint.XpOn) + RIOStrlen(PortP->Xprint.XpOff); - rio_spin_unlock_irqrestore(&PortP->portSem, flags); -#endif } rio_dprintk(RIO_DEBUG_CTRL, "after loop (%d)!\n", loop); rio_dprintk(RIO_DEBUG_CTRL, "Retval:%x\n", retval); @@ -801,12 +745,6 @@ int su; rio_dprintk(RIO_DEBUG_CTRL, "Port %d\n", PortTty.port); PortP = (p->RIOPortp[PortTty.port]); -#if 0 - PortTty.Tty.tm.c_iflag = PortP->TtyP->tm.c_iflag; - PortTty.Tty.tm.c_oflag = PortP->TtyP->tm.c_oflag; - PortTty.Tty.tm.c_cflag = PortP->TtyP->tm.c_cflag; - PortTty.Tty.tm.c_lflag = PortP->TtyP->tm.c_lflag; -#endif if (copyout((caddr_t) & PortTty, (int) arg, sizeof(struct PortTty)) == COPYFAIL) { p->RIOError.Error = COPYOUT_FAILED; return -EFAULT; @@ -824,15 +762,6 @@ int su; return -ENXIO; } PortP = (p->RIOPortp[PortTty.port]); -#if 0 - rio_spin_lock_irqsave(&PortP->portSem, flags); - PortP->TtyP->tm.c_iflag = PortTty.Tty.tm.c_iflag; - PortP->TtyP->tm.c_oflag = PortTty.Tty.tm.c_oflag; - PortP->TtyP->tm.c_cflag = PortTty.Tty.tm.c_cflag; - PortP->TtyP->tm.c_lflag = PortTty.Tty.tm.c_lflag; - rio_spin_unlock_irqrestore(&PortP->portSem, flags); -#endif - RIOParam(PortP, CONFIG, PortP->State & RIO_MODEM, OK_TO_SLEEP); return retval; @@ -909,23 +838,6 @@ int su; rio_spin_unlock_irqrestore(&PortP->portSem, flags); return retval; -#ifdef DEBUG_SUPPORTED - case RIO_READ_LEVELS: - { - int num; - rio_dprintk(RIO_DEBUG_CTRL, "RIO_READ_LEVELS\n"); - for (num = 0; RIODbInf[num].Flag; num++); - rio_dprintk(RIO_DEBUG_CTRL, "%d levels to copy\n", num); - if (copyout((caddr_t) RIODbInf, (int) arg, sizeof(struct DbInf) * (num + 1)) == COPYFAIL) { - rio_dprintk(RIO_DEBUG_CTRL, "ReadLevels Copy failed\n"); - p->RIOError.Error = COPYOUT_FAILED; - return -EFAULT; - } - rio_dprintk(RIO_DEBUG_CTRL, "%d levels to copied\n", num); - return retval; - } -#endif - case RIO_READ_CONFIG: rio_dprintk(RIO_DEBUG_CTRL, "RIO_READ_CONFIG\n"); if (copyout((caddr_t) & p->RIOConf, (int) arg, sizeof(struct Conf)) == COPYFAIL) { @@ -1084,30 +996,13 @@ int su; (void) RIOBoardTest(p->RIOHosts[Host].PaddrP, p->RIOHosts[Host].Caddr, p->RIOHosts[Host].Type, p->RIOHosts[Host].Slot); bzero((caddr_t) & p->RIOHosts[Host].Flags, ((int) &p->RIOHosts[Host].____end_marker____) - ((int) &p->RIOHosts[Host].Flags)); p->RIOHosts[Host].Flags = RC_WAITING; -#if 0 - RIOSetupDataStructs(p); -#endif } RIOFoadWakeup(p); p->RIONumBootPkts = 0; p->RIOBooting = 0; - -#ifdef RINGBUFFER_SUPPORT - for (loop = 0; loop < RIO_PORTS; loop++) - if (p->RIOPortp[loop]->TxRingBuffer) - sysfree((void *) p->RIOPortp[loop]->TxRingBuffer, RIOBufferSize); -#endif -#if 0 - bzero((caddr_t) & p->RIOPortp[0], RIO_PORTS * sizeof(struct Port)); -#else printk("HEEEEELP!\n"); -#endif for (loop = 0; loop < RIO_PORTS; loop++) { -#if 0 - p->RIOPortp[loop]->TtyP = &p->channel[loop]; -#endif - spin_lock_init(&p->RIOPortp[loop]->portSem); p->RIOPortp[loop]->InUse = NOT_INUSE; } @@ -1653,10 +1548,6 @@ uchar Cmd; ushort rup; int port; -#ifdef CHECK - CheckPortP(PortP); -#endif - if (PortP->State & RIO_DELETED) { rio_dprintk(RIO_DEBUG_CTRL, "Preemptive command to deleted RTA ignored\n"); return RIO_FAIL; -- cgit v1.2.3