diff options
Diffstat (limited to 'drivers/char/rio')
-rw-r--r-- | drivers/char/rio/cirrus.h | 3 | ||||
-rw-r--r-- | drivers/char/rio/cmdblk.h | 6 | ||||
-rw-r--r-- | drivers/char/rio/cmdpkt.h | 6 | ||||
-rw-r--r-- | drivers/char/rio/daemon.h | 6 | ||||
-rw-r--r-- | drivers/char/rio/errors.h | 6 | ||||
-rw-r--r-- | drivers/char/rio/func.h | 6 | ||||
-rw-r--r-- | drivers/char/rio/map.h | 4 | ||||
-rw-r--r-- | drivers/char/rio/param.h | 5 | ||||
-rw-r--r-- | drivers/char/rio/parmmap.h | 7 | ||||
-rw-r--r-- | drivers/char/rio/pci.h | 4 | ||||
-rw-r--r-- | drivers/char/rio/protsts.h | 7 | ||||
-rw-r--r-- | drivers/char/rio/rio_linux.c | 25 | ||||
-rw-r--r-- | drivers/char/rio/rioboard.h | 6 | ||||
-rw-r--r-- | drivers/char/rio/riocmd.c | 13 | ||||
-rw-r--r-- | drivers/char/rio/rioctrl.c | 4 | ||||
-rw-r--r-- | drivers/char/rio/riodrvr.h | 4 | ||||
-rw-r--r-- | drivers/char/rio/rioinfo.h | 4 | ||||
-rw-r--r-- | drivers/char/rio/rioinit.c | 3 | ||||
-rw-r--r-- | drivers/char/rio/riointr.c | 14 | ||||
-rw-r--r-- | drivers/char/rio/rioparam.c | 6 | ||||
-rw-r--r-- | drivers/char/rio/rioroute.c | 3 | ||||
-rw-r--r-- | drivers/char/rio/riospace.h | 4 | ||||
-rw-r--r-- | drivers/char/rio/riotable.c | 3 | ||||
-rw-r--r-- | drivers/char/rio/riotty.c | 20 | ||||
-rw-r--r-- | drivers/char/rio/route.h | 6 | ||||
-rw-r--r-- | drivers/char/rio/unixrup.h | 4 |
26 files changed, 29 insertions, 150 deletions
diff --git a/drivers/char/rio/cirrus.h b/drivers/char/rio/cirrus.h index a03a538a3efb..5ab51679caa2 100644 --- a/drivers/char/rio/cirrus.h +++ b/drivers/char/rio/cirrus.h @@ -35,9 +35,6 @@ ***************************************************************************/ #ifndef _cirrus_h -#ifndef lint -/* static char* _cirrus_h_sccs = "@(#)cirrus.h 1.16"; */ -#endif #define _cirrus_h 1 /* Bit fields for particular registers shared with driver */ diff --git a/drivers/char/rio/cmdblk.h b/drivers/char/rio/cmdblk.h index c46b2fdb6626..9ed4f861675a 100644 --- a/drivers/char/rio/cmdblk.h +++ b/drivers/char/rio/cmdblk.h @@ -33,12 +33,6 @@ #ifndef __rio_cmdblk_h__ #define __rio_cmdblk_h__ -#ifdef SCCS_LABELS -#ifndef lint -static char *_cmdblk_h_sccs_ = "@(#)cmdblk.h 1.2"; -#endif -#endif - /* ** the structure of a command block, used to queue commands destined for ** a rup. diff --git a/drivers/char/rio/cmdpkt.h b/drivers/char/rio/cmdpkt.h index 357ae5722436..c1e7a2798070 100644 --- a/drivers/char/rio/cmdpkt.h +++ b/drivers/char/rio/cmdpkt.h @@ -32,12 +32,6 @@ #ifndef __rio_cmdpkt_h__ #define __rio_cmdpkt_h__ -#ifdef SCCS_LABELS -#ifndef lint -static char *_cmdpkt_h_sccs_ = "@(#)cmdpkt.h 1.2"; -#endif -#endif - /* ** overlays for the data area of a packet. Used in both directions ** (to build a packet to send, and to interpret a packet that arrives) diff --git a/drivers/char/rio/daemon.h b/drivers/char/rio/daemon.h index 6e63f8b2c479..4af90323fd00 100644 --- a/drivers/char/rio/daemon.h +++ b/drivers/char/rio/daemon.h @@ -33,12 +33,6 @@ #ifndef __rio_daemon_h__ #define __rio_daemon_h__ -#ifdef SCCS_LABELS -#ifndef lint -static char *_daemon_h_sccs_ = "@(#)daemon.h 1.3"; -#endif -#endif - /* ** structures used on /dev/rio diff --git a/drivers/char/rio/errors.h b/drivers/char/rio/errors.h index 1d0d89144337..bdb05234090a 100644 --- a/drivers/char/rio/errors.h +++ b/drivers/char/rio/errors.h @@ -33,12 +33,6 @@ #ifndef __rio_errors_h__ #define __rio_errors_h__ -#ifdef SCCS_LABELS -#ifndef lint -static char *_errors_h_sccs_ = "@(#)errors.h 1.2"; -#endif -#endif - /* ** error codes */ diff --git a/drivers/char/rio/func.h b/drivers/char/rio/func.h index 9e7283bd81a0..078d44f85e45 100644 --- a/drivers/char/rio/func.h +++ b/drivers/char/rio/func.h @@ -35,12 +35,6 @@ #include <linux/kdev_t.h> -#ifdef SCCS_LABELS -#ifndef lint -static char *_func_h_sccs_ = "@(#)func.h 1.3"; -#endif -#endif - /* rioboot.c */ int RIOBootCodeRTA(struct rio_info *, struct DownLoad *); int RIOBootCodeHOST(struct rio_info *, struct DownLoad *); diff --git a/drivers/char/rio/map.h b/drivers/char/rio/map.h index bdbcd09c8b81..8366978578c1 100644 --- a/drivers/char/rio/map.h +++ b/drivers/char/rio/map.h @@ -33,10 +33,6 @@ #ifndef __rio_map_h__ #define __rio_map_h__ -#ifdef SCCS_LABELS -static char *_map_h_sccs_ = "@(#)map.h 1.2"; -#endif - /* ** mapping structure passed to and from the config.rio program to ** determine the current topology of the world diff --git a/drivers/char/rio/param.h b/drivers/char/rio/param.h index 675c200b2459..7e9b6283e8aa 100644 --- a/drivers/char/rio/param.h +++ b/drivers/char/rio/param.h @@ -33,11 +33,6 @@ #ifndef __rio_param_h__ #define __rio_param_h__ -#ifdef SCCS_LABELS -static char *_param_h_sccs_ = "@(#)param.h 1.2"; -#endif - - /* ** the param command block, as used in OPEN and PARAM calls. */ diff --git a/drivers/char/rio/parmmap.h b/drivers/char/rio/parmmap.h index 9764ef85c5a6..acc8fa439df5 100644 --- a/drivers/char/rio/parmmap.h +++ b/drivers/char/rio/parmmap.h @@ -37,13 +37,6 @@ #ifndef _parmap_h #define _parmap_h - -#ifdef SCCS_LABELS -#ifndef lint -/* static char *_rio_parmmap_h_sccs = "@(#)parmmap.h 1.4"; */ -#endif -#endif - typedef struct PARM_MAP PARM_MAP; struct PARM_MAP { diff --git a/drivers/char/rio/pci.h b/drivers/char/rio/pci.h index 1eba9118079b..6032f9135956 100644 --- a/drivers/char/rio/pci.h +++ b/drivers/char/rio/pci.h @@ -33,10 +33,6 @@ #ifndef __rio_pci_h__ #define __rio_pci_h__ -#ifdef SCCS_LABELS -static char *_pci_h_sccs_ = "@(#)pci.h 1.2"; -#endif - /* ** PCI stuff */ diff --git a/drivers/char/rio/protsts.h b/drivers/char/rio/protsts.h index 69fc4bc34153..8ab79401d3ee 100644 --- a/drivers/char/rio/protsts.h +++ b/drivers/char/rio/protsts.h @@ -37,13 +37,6 @@ #ifndef _protsts_h #define _protsts_h 1 - -#ifdef SCCS_LABELS -#ifndef lint -/* static char *_rio_protsts_h_sccs = "@(#)protsts.h 1.4"; */ -#endif -#endif - /************************************************* * ACK bit. Last Packet received OK. Set by * rxpkt to indicate that the Packet has been diff --git a/drivers/char/rio/rio_linux.c b/drivers/char/rio/rio_linux.c index 412777cd1e68..0cdfee152916 100644 --- a/drivers/char/rio/rio_linux.c +++ b/drivers/char/rio/rio_linux.c @@ -25,11 +25,6 @@ * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, * USA. * - * Revision history: - * $Log: rio.c,v $ - * Revision 1.1 1999/07/11 10:13:54 wolff - * Initial revision - * * */ #include <linux/module.h> @@ -436,7 +431,7 @@ static void rio_disable_tx_interrupts(void *ptr) { func_enter(); - /* port->gs.flags &= ~GS_TX_INTEN; */ + /* port->gs.port.flags &= ~GS_TX_INTEN; */ func_exit(); } @@ -460,7 +455,7 @@ static void rio_enable_tx_interrupts(void *ptr) * 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; + PortP->gs.port.flags &= ~GS_TX_INTEN; func_exit(); } @@ -515,7 +510,7 @@ static void rio_shutdown_port(void *ptr) func_enter(); PortP = (struct Port *) ptr; - PortP->gs.tty = NULL; + PortP->gs.port.tty = NULL; func_exit(); } @@ -534,7 +529,7 @@ static void rio_hungup(void *ptr) func_enter(); PortP = (struct Port *) ptr; - PortP->gs.tty = NULL; + PortP->gs.port.tty = NULL; func_exit(); } @@ -554,12 +549,12 @@ static void rio_close(void *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.port.count) { + printk(KERN_ERR "WARNING port count:%d\n", PortP->gs.port.count); + PortP->gs.port.count = 0; } - PortP->gs.tty = NULL; + PortP->gs.port.tty = NULL; func_exit(); } @@ -854,8 +849,8 @@ static int rio_init_datastructures(void) /* * Initializing wait queue */ - init_waitqueue_head(&port->gs.open_wait); - init_waitqueue_head(&port->gs.close_wait); + init_waitqueue_head(&port->gs.port.open_wait); + init_waitqueue_head(&port->gs.port.close_wait); } #else /* We could postpone initializing them to when they are configured. */ diff --git a/drivers/char/rio/rioboard.h b/drivers/char/rio/rioboard.h index 822c071a693b..252230043c82 100644 --- a/drivers/char/rio/rioboard.h +++ b/drivers/char/rio/rioboard.h @@ -29,12 +29,6 @@ /* */ /************************************************************************/ -/* History... - -1.0.0 26/04/99 NPV Creation. - -*/ - #ifndef _rioboard_h /* If RIOBOARD.H not already defined */ #define _rioboard_h 1 diff --git a/drivers/char/rio/riocmd.c b/drivers/char/rio/riocmd.c index 7b96e0814887..01f2654d5a2e 100644 --- a/drivers/char/rio/riocmd.c +++ b/drivers/char/rio/riocmd.c @@ -30,9 +30,6 @@ ** ** ----------------------------------------------------------------------------- */ -#ifdef SCCS_LABELS -static char *_riocmd_c_sccs_ = "@(#)riocmd.c 1.2"; -#endif #include <linux/module.h> #include <linux/slab.h> @@ -487,12 +484,12 @@ static int RIOCommandRup(struct rio_info *p, uint Rup, struct Host *HostP, struc ** If the device is a modem, then check the modem ** carrier. */ - if (PortP->gs.tty == NULL) + if (PortP->gs.port.tty == NULL) break; - if (PortP->gs.tty->termios == NULL) + if (PortP->gs.port.tty->termios == NULL) break; - if (!(PortP->gs.tty->termios->c_cflag & CLOCAL) && ((PortP->State & (RIO_MOPEN | RIO_WOPEN)))) { + if (!(PortP->gs.port.tty->termios->c_cflag & CLOCAL) && ((PortP->State & (RIO_MOPEN | RIO_WOPEN)))) { rio_dprintk(RIO_DEBUG_CMD, "Is there a Carrier?\n"); /* @@ -509,7 +506,7 @@ static int RIOCommandRup(struct rio_info *p, uint Rup, struct Host *HostP, struc ** wakeup anyone in WOPEN */ if (PortP->State & (PORT_ISOPEN | RIO_WOPEN)) - wake_up_interruptible(&PortP->gs.open_wait); + wake_up_interruptible(&PortP->gs.port.open_wait); } } else { /* @@ -517,7 +514,7 @@ static int RIOCommandRup(struct rio_info *p, uint Rup, struct Host *HostP, struc */ if (PortP->State & RIO_CARR_ON) { if (PortP->State & (PORT_ISOPEN | RIO_WOPEN | RIO_MOPEN)) - tty_hangup(PortP->gs.tty); + tty_hangup(PortP->gs.port.tty); PortP->State &= ~RIO_CARR_ON; rio_dprintk(RIO_DEBUG_CMD, "Carrirer just went down\n"); } diff --git a/drivers/char/rio/rioctrl.c b/drivers/char/rio/rioctrl.c index d65ceb9a434a..eecee0f576d2 100644 --- a/drivers/char/rio/rioctrl.c +++ b/drivers/char/rio/rioctrl.c @@ -29,10 +29,6 @@ ** ** ----------------------------------------------------------------------------- */ -#ifdef SCCS_LABELS -static char *_rioctrl_c_sccs_ = "@(#)rioctrl.c 1.3"; -#endif - #include <linux/module.h> #include <linux/slab.h> diff --git a/drivers/char/rio/riodrvr.h b/drivers/char/rio/riodrvr.h index 3cffe275f216..0907e711b355 100644 --- a/drivers/char/rio/riodrvr.h +++ b/drivers/char/rio/riodrvr.h @@ -35,10 +35,6 @@ #include <asm/param.h> /* for HZ */ -#ifdef SCCS_LABELS -static char *_riodrvr_h_sccs_ = "@(#)riodrvr.h 1.3"; -#endif - #define MEMDUMP_SIZE 32 #define MOD_DISABLE (RIO_NOREAD|RIO_NOWRITE|RIO_NOXPRINT) diff --git a/drivers/char/rio/rioinfo.h b/drivers/char/rio/rioinfo.h index 8de7966e603a..42ff1e79d96f 100644 --- a/drivers/char/rio/rioinfo.h +++ b/drivers/char/rio/rioinfo.h @@ -33,10 +33,6 @@ #ifndef __rioinfo_h #define __rioinfo_h -#ifdef SCCS_LABELS -static char *_rioinfo_h_sccs_ = "@(#)rioinfo.h 1.2"; -#endif - /* ** Host card data structure */ diff --git a/drivers/char/rio/rioinit.c b/drivers/char/rio/rioinit.c index add1718295ef..be0ba401966e 100644 --- a/drivers/char/rio/rioinit.c +++ b/drivers/char/rio/rioinit.c @@ -29,9 +29,6 @@ ** ** ----------------------------------------------------------------------------- */ -#ifdef SCCS_LABELS -static char *_rioinit_c_sccs_ = "@(#)rioinit.c 1.3"; -#endif #include <linux/module.h> #include <linux/slab.h> diff --git a/drivers/char/rio/riointr.c b/drivers/char/rio/riointr.c index ea21686c69a4..71f87600907c 100644 --- a/drivers/char/rio/riointr.c +++ b/drivers/char/rio/riointr.c @@ -29,10 +29,6 @@ ** ** ----------------------------------------------------------------------------- */ -#ifdef SCCS_LABELS -static char *_riointr_c_sccs_ = "@(#)riointr.c 1.2"; -#endif - #include <linux/module.h> #include <linux/slab.h> @@ -106,7 +102,7 @@ void RIOTxEnable(char *en) PortP = (struct Port *) en; p = (struct rio_info *) PortP->p; - tty = PortP->gs.tty; + tty = PortP->gs.port.tty; rio_dprintk(RIO_DEBUG_INTR, "tx port %d: %d chars queued.\n", PortP->PortNum, PortP->gs.xmit_cnt); @@ -162,7 +158,7 @@ void RIOTxEnable(char *en) rio_spin_unlock_irqrestore(&PortP->portSem, flags); if (PortP->gs.xmit_cnt <= (PortP->gs.wakeup_chars + 2 * PKT_MAX_DATA_LEN)) - tty_wakeup(PortP->gs.tty); + tty_wakeup(PortP->gs.port.tty); } @@ -245,7 +241,7 @@ void RIOServiceHost(struct rio_info *p, struct Host *HostP) ** find corresponding tty structure. The process of mapping ** the ports puts these here. */ - ttyP = PortP->gs.tty; + ttyP = PortP->gs.port.tty; /* ** Lock the port before we begin working on it. @@ -339,7 +335,7 @@ void RIOServiceHost(struct rio_info *p, struct Host *HostP) ** find corresponding tty structure. The process of mapping ** the ports puts these here. */ - ttyP = PortP->gs.tty; + ttyP = PortP->gs.port.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"); @@ -546,7 +542,7 @@ static void RIOReceive(struct rio_info *p, struct Port *PortP) intCount++; - TtyP = PortP->gs.tty; + TtyP = PortP->gs.port.tty; if (!TtyP) { rio_dprintk(RIO_DEBUG_INTR, "RIOReceive: tty is null. \n"); return; diff --git a/drivers/char/rio/rioparam.c b/drivers/char/rio/rioparam.c index 4810b845cc21..d687c17be152 100644 --- a/drivers/char/rio/rioparam.c +++ b/drivers/char/rio/rioparam.c @@ -30,10 +30,6 @@ ** ----------------------------------------------------------------------------- */ -#ifdef SCCS_LABELS -static char *_rioparam_c_sccs_ = "@(#)rioparam.c 1.3"; -#endif - #include <linux/module.h> #include <linux/slab.h> #include <linux/errno.h> @@ -164,7 +160,7 @@ int RIOParam(struct Port *PortP, int cmd, int Modem, int SleepFlag) func_enter(); - TtyP = PortP->gs.tty; + TtyP = PortP->gs.port.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); diff --git a/drivers/char/rio/rioroute.c b/drivers/char/rio/rioroute.c index 7a9df7dcf9a8..706c2a25f7aa 100644 --- a/drivers/char/rio/rioroute.c +++ b/drivers/char/rio/rioroute.c @@ -29,9 +29,6 @@ ** ** ----------------------------------------------------------------------------- */ -#ifdef SCCS_LABELS -static char *_rioroute_c_sccs_ = "@(#)rioroute.c 1.3"; -#endif #include <linux/module.h> #include <linux/slab.h> diff --git a/drivers/char/rio/riospace.h b/drivers/char/rio/riospace.h index 534f1f5b9f53..ffb31d4332b9 100644 --- a/drivers/char/rio/riospace.h +++ b/drivers/char/rio/riospace.h @@ -33,10 +33,6 @@ #ifndef __rio_riospace_h__ #define __rio_riospace_h__ -#ifdef SCCS_LABELS -static char *_riospace_h_sccs_ = "@(#)riospace.h 1.2"; -#endif - #define RIO_LOCATOR_LEN 16 #define MAX_RIO_BOARDS 4 diff --git a/drivers/char/rio/riotable.c b/drivers/char/rio/riotable.c index 2b24488e95f2..3d15802dc0f3 100644 --- a/drivers/char/rio/riotable.c +++ b/drivers/char/rio/riotable.c @@ -29,9 +29,6 @@ ** ** ----------------------------------------------------------------------------- */ -#ifdef SCCS_LABELS -static char *_riotable_c_sccs_ = "@(#)riotable.c 1.2"; -#endif #include <linux/module.h> #include <linux/slab.h> diff --git a/drivers/char/rio/riotty.c b/drivers/char/rio/riotty.c index c99354843be1..2fb49e89b324 100644 --- a/drivers/char/rio/riotty.c +++ b/drivers/char/rio/riotty.c @@ -29,10 +29,6 @@ ** ** ----------------------------------------------------------------------------- */ -#ifdef SCCS_LABELS -static char *_riotty_c_sccs_ = "@(#)riotty.c 1.3"; -#endif - #define __EXPLICIT_DEF_H__ @@ -144,14 +140,14 @@ int riotopen(struct tty_struct *tty, struct file *filp) tty->driver_data = PortP; - PortP->gs.tty = tty; - PortP->gs.count++; + PortP->gs.port.tty = tty; + PortP->gs.port.count++; rio_dprintk(RIO_DEBUG_TTY, "%d bytes in tx buffer\n", PortP->gs.xmit_cnt); retval = gs_init_port(&PortP->gs); if (retval) { - PortP->gs.count--; + PortP->gs.port.count--; return -ENXIO; } /* @@ -297,7 +293,7 @@ int riotopen(struct tty_struct *tty, struct file *filp) ** insert test for carrier here. -- ??? ** I already see that test here. What's the deal? -- REW */ - if ((PortP->gs.tty->termios->c_cflag & CLOCAL) || + if ((PortP->gs.port.tty->termios->c_cflag & CLOCAL) || (PortP->ModemState & RIOC_MSVR1_CD)) { rio_dprintk(RIO_DEBUG_TTY, "open(%d) Modem carr on\n", SysPort); /* @@ -305,16 +301,16 @@ int riotopen(struct tty_struct *tty, struct file *filp) wakeup((caddr_t) &tp->tm.c_canq); */ PortP->State |= RIO_CARR_ON; - wake_up_interruptible(&PortP->gs.open_wait); + wake_up_interruptible(&PortP->gs.port.open_wait); } else { /* no carrier - wait for DCD */ /* - while (!(PortP->gs.tty->termios->c_state & CARR_ON) && + while (!(PortP->gs.port.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.port.tty->termios->c_state |= WOPEN; */ PortP->State |= RIO_WOPEN; rio_spin_unlock_irqrestore(&PortP->portSem, flags); @@ -384,7 +380,7 @@ int riotclose(void *ptr) /* PortP = p->RIOPortp[SysPort]; */ rio_dprintk(RIO_DEBUG_TTY, "Port is at address %p\n", PortP); /* tp = PortP->TtyP; *//* Get tty */ - tty = PortP->gs.tty; + tty = PortP->gs.port.tty; rio_dprintk(RIO_DEBUG_TTY, "TTY is at address %p\n", tty); if (PortP->gs.closing_wait) diff --git a/drivers/char/rio/route.h b/drivers/char/rio/route.h index 769744e575ab..20ed73f3fd7b 100644 --- a/drivers/char/rio/route.h +++ b/drivers/char/rio/route.h @@ -37,12 +37,6 @@ #ifndef _route_h #define _route_h -#ifdef SCCS_LABELS -#ifndef lint -/* static char *_rio_route_h_sccs = "@(#)route.h 1.3"; */ -#endif -#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 diff --git a/drivers/char/rio/unixrup.h b/drivers/char/rio/unixrup.h index 46bd532f7746..7abf0cba0f2c 100644 --- a/drivers/char/rio/unixrup.h +++ b/drivers/char/rio/unixrup.h @@ -33,10 +33,6 @@ #ifndef __rio_unixrup_h__ #define __rio_unixrup_h__ -#ifdef SCCS_LABELS -static char *_unixrup_h_sccs_ = "@(#)unixrup.h 1.2"; -#endif - /* ** UnixRup data structure. This contains pointers to actual RUPs on the ** host card, and all the command/boot control stuff. |