Commit 8d8706e2 authored by Andrew Morton's avatar Andrew Morton Committed by Linus Torvalds

[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 <alan@lxorguk.ukuu.org.uk>
Signed-off-by: default avatarAndrew Morton <akpm@osdl.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@osdl.org>
parent a9415644
...@@ -52,63 +52,57 @@ static char *_board_h_sccs_ = "@(#)board.h 1.2"; ...@@ -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 ** The shape of the Host Control area, at offset 0x7C00, Write Only
*/ */
struct s_Ctrl struct s_Ctrl {
{ BYTE DpCtl; /* 7C00 */
BYTE DpCtl; /* 7C00 */ BYTE Dp_Unused2_[127];
BYTE Dp_Unused2_[127]; BYTE DpIntSet; /* 7C80 */
BYTE DpIntSet; /* 7C80 */ BYTE Dp_Unused3_[127];
BYTE Dp_Unused3_[127]; BYTE DpTpuReset; /* 7D00 */
BYTE DpTpuReset; /* 7D00 */ BYTE Dp_Unused4_[127];
BYTE Dp_Unused4_[127]; BYTE DpIntReset; /* 7D80 */
BYTE DpIntReset; /* 7D80 */ BYTE Dp_Unused5_[127];
BYTE Dp_Unused5_[127];
}; };
/* /*
** The PROM data area on the host (0x7C00), Read Only ** The PROM data area on the host (0x7C00), Read Only
*/ */
struct s_Prom struct s_Prom {
{ WORD DpSlxCode[2];
WORD DpSlxCode[2]; WORD DpRev;
WORD DpRev; WORD Dp_Unused6_;
WORD Dp_Unused6_; WORD DpUniq[4];
WORD DpUniq[4]; WORD DpJahre;
WORD DpJahre; WORD DpWoche;
WORD DpWoche; WORD DpHwFeature[5];
WORD DpHwFeature[5]; WORD DpOemId;
WORD DpOemId; WORD DpSiggy[16];
WORD DpSiggy[16];
}; };
/* /*
** Union of the Ctrl and Prom areas ** Union of the Ctrl and Prom areas
*/ */
union u_CtrlProm /* This is the control/PROM area (0x7C00) */ union u_CtrlProm { /* This is the control/PROM area (0x7C00) */
{ struct s_Ctrl DpCtrl;
struct s_Ctrl DpCtrl; struct s_Prom DpProm;
struct s_Prom DpProm;
}; };
/* /*
** The top end of memory! ** The top end of memory!
*/ */
struct s_ParmMapS /* Area containing Parm Map Pointer */ struct s_ParmMapS { /* Area containing Parm Map Pointer */
{ BYTE Dp_Unused8_[DP_PARMMAP_ADDR];
BYTE Dp_Unused8_[DP_PARMMAP_ADDR]; WORD DpParmMapAd;
WORD DpParmMapAd;
}; };
struct s_StartUpS struct s_StartUpS {
{ BYTE Dp_Unused9_[DP_STARTUP_ADDR];
BYTE Dp_Unused9_[DP_STARTUP_ADDR]; BYTE Dp_LongJump[0x4];
BYTE Dp_LongJump[0x4]; BYTE Dp_Unused10_[2];
BYTE Dp_Unused10_[2]; BYTE Dp_ShortJump[0x2];
BYTE Dp_ShortJump[0x2];
}; };
union u_Sram2ParmMap /* This is the top of memory (0x7E00-0x7FFF) */ union u_Sram2ParmMap { /* This is the top of memory (0x7E00-0x7FFF) */
{ BYTE DpSramMem[DP_SRAM2_SIZE];
BYTE DpSramMem[DP_SRAM2_SIZE];
struct s_ParmMapS DpParmMapS; struct s_ParmMapS DpParmMapS;
struct s_StartUpS DpStartUpS; struct s_StartUpS DpStartUpS;
}; };
...@@ -116,13 +110,12 @@ union u_Sram2ParmMap /* This is the top of memory (0x7E00-0x7FFF) */ ...@@ -116,13 +110,12 @@ union u_Sram2ParmMap /* This is the top of memory (0x7E00-0x7FFF) */
/* /*
** This is the DP RAM overlay. ** This is the DP RAM overlay.
*/ */
struct DpRam struct DpRam {
{ BYTE DpSram1[DP_SRAM1_SIZE]; /* 0000 - 7BFF */
BYTE DpSram1[DP_SRAM1_SIZE]; /* 0000 - 7BFF */ union u_CtrlProm DpCtrlProm; /* 7C00 - 7DFF */
union u_CtrlProm DpCtrlProm; /* 7C00 - 7DFF */ union u_Sram2ParmMap DpSram2ParmMap; /* 7E00 - 7FFF */
union u_Sram2ParmMap DpSram2ParmMap; /* 7E00 - 7FFF */ BYTE DpScratch[DP_SCRATCH_SIZE]; /* 8000 - 8FFF */
BYTE DpScratch[DP_SCRATCH_SIZE]; /* 8000 - 8FFF */ BYTE DpSram3[DP_SRAM3_SIZE]; /* 9000 - FFFF */
BYTE DpSram3[DP_SRAM3_SIZE]; /* 9000 - FFFF */
}; };
#define DpControl DpCtrlProm.DpCtrl.DpCtl #define DpControl DpCtrlProm.DpCtrl.DpCtl
......
...@@ -41,7 +41,7 @@ ...@@ -41,7 +41,7 @@
#ifndef lint #ifndef lint
#ifdef SCCS #ifdef SCCS
static char *_rio_bootpkt_h_sccs = "@(#)bootpkt.h 1.1" ; static char *_rio_bootpkt_h_sccs = "@(#)bootpkt.h 1.1";
#endif #endif
#endif #endif
...@@ -49,14 +49,13 @@ static char *_rio_bootpkt_h_sccs = "@(#)bootpkt.h 1.1" ; ...@@ -49,14 +49,13 @@ static char *_rio_bootpkt_h_sccs = "@(#)bootpkt.h 1.1" ;
* Overlayed onto the Data fields of a regular * Overlayed onto the Data fields of a regular
* Packet * Packet
************************************************/ ************************************************/
typedef struct BOOT_PKT BOOT_PKT ; typedef struct BOOT_PKT BOOT_PKT;
struct BOOT_PKT { struct BOOT_PKT {
short seq_num ; short seq_num;
char data[10] ; char data[10];
} ; };
#endif #endif
/*********** end of file ***********/ /*********** end of file ***********/
...@@ -97,11 +97,10 @@ ...@@ -97,11 +97,10 @@
#define MAX_RATE B2000 #define MAX_RATE B2000
struct baud_rate /* Tag for baud rates */ struct baud_rate { /* Tag for baud rates */
{ /* short host_rate, *//* As passed by the driver */
/* short host_rate,*/ /* As passed by the driver */ short divisor, /* The divisor */
short divisor, /* The divisor */ prescaler; /* The pre-scaler */
prescaler; /* The pre-scaler */
}; };
#endif #endif
...@@ -21,7 +21,7 @@ ...@@ -21,7 +21,7 @@
#ifndef lint #ifndef lint
#ifdef SCCS #ifdef SCCS
static char *_rio_chan_h_sccs = "@(#)chan.h 1.1" ; static char *_rio_chan_h_sccs = "@(#)chan.h 1.1";
#endif #endif
#endif #endif
......
This diff is collapsed.
...@@ -42,7 +42,7 @@ ...@@ -42,7 +42,7 @@
#ifndef lint #ifndef lint
#ifdef SCCS #ifdef SCCS
static char *_rio_cmd_h_sccs = "@(#)cmd.h 1.1" ; static char *_rio_cmd_h_sccs = "@(#)cmd.h 1.1";
#endif #endif
#endif #endif
...@@ -52,7 +52,7 @@ static char *_rio_cmd_h_sccs = "@(#)cmd.h 1.1" ; ...@@ -52,7 +52,7 @@ static char *_rio_cmd_h_sccs = "@(#)cmd.h 1.1" ;
#define CMD_IGNORE_PKT ( (ushort) 0) #define CMD_IGNORE_PKT ( (ushort) 0)
#define CMD_STATUS_REQ ( (ushort) 1) #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_PORT ( (ushort) 3)
#define CMD_CONF_UNIT ( (ushort) 4) #define CMD_CONF_UNIT ( (ushort) 4)
#define CMD_ROUTE_MAP_REQ ( (ushort) 5) #define CMD_ROUTE_MAP_REQ ( (ushort) 5)
...@@ -81,4 +81,3 @@ static char *_rio_cmd_h_sccs = "@(#)cmd.h 1.1" ; ...@@ -81,4 +81,3 @@ static char *_rio_cmd_h_sccs = "@(#)cmd.h 1.1" ;
#endif #endif
/*********** end of file ***********/ /*********** end of file ***********/
...@@ -44,16 +44,15 @@ static char *_cmdblk_h_sccs_ = "@(#)cmdblk.h 1.2"; ...@@ -44,16 +44,15 @@ static char *_cmdblk_h_sccs_ = "@(#)cmdblk.h 1.2";
** a rup. ** a rup.
*/ */
struct CmdBlk struct CmdBlk {
{ struct CmdBlk *NextP; /* Pointer to next command block */
struct CmdBlk *NextP; /* Pointer to next command block */ struct PKT Packet; /* A packet, to copy to the rup */
struct PKT Packet; /* A packet, to copy to the rup */ /* The func to call to check if OK */
/* The func to call to check if OK */ int (*PreFuncP) (int, struct CmdBlk *);
int (*PreFuncP)(int, struct CmdBlk *); int PreArg; /* The arg for the func */
int PreArg; /* The arg for the func */ /* The func to call when completed */
/* The func to call when completed */ int (*PostFuncP) (int, struct CmdBlk *);
int (*PostFuncP)(int, struct CmdBlk *); int PostArg; /* The arg for the func */
int PostArg; /* The arg for the func */
}; };
#define NUM_RIO_CMD_BLKS (3 * (MAX_RUP * 4 + LINKS_PER_UNIT * 4)) #define NUM_RIO_CMD_BLKS (3 * (MAX_RUP * 4 + LINKS_PER_UNIT * 4))
......
...@@ -54,135 +54,112 @@ static char *_cmdpkt_h_sccs_ = "@(#)cmdpkt.h 1.2"; ...@@ -54,135 +54,112 @@ static char *_cmdpkt_h_sccs_ = "@(#)cmdpkt.h 1.2";
** This structure overlays a PktCmd->CmdData structure, and so starts ** This structure overlays a PktCmd->CmdData structure, and so starts
** at Data[2] in the actual pkt! ** at Data[2] in the actual pkt!
*/ */
struct BootSequence struct BootSequence {
{ WORD NumPackets;
WORD NumPackets; WORD LoadBase;
WORD LoadBase; WORD CodeSize;
WORD CodeSize;
}; };
#define BOOT_SEQUENCE_LEN 8 #define BOOT_SEQUENCE_LEN 8
struct SamTop struct SamTop {
{ BYTE Unit;
BYTE Unit; BYTE Link;
BYTE Link;
}; };
struct CmdHdr struct CmdHdr {
{ BYTE PcCommand;
BYTE PcCommand; union {
union BYTE PcPhbNum;
{ BYTE PcLinkNum;
BYTE PcPhbNum; BYTE PcIDNum;
BYTE PcLinkNum; } U0;
BYTE PcIDNum;
} U0;
}; };
struct PktCmd struct PktCmd {
{ union {
union struct {
{ struct CmdHdr CmdHdr;
struct struct BootSequence PcBootSequence;
{ } S1;
struct CmdHdr CmdHdr; struct {
struct BootSequence PcBootSequence; WORD PcSequence;
} S1; BYTE PcBootData[RTA_BOOT_DATA_SIZE];
struct } S2;
{ struct {
WORD PcSequence; WORD __crud__;
BYTE PcBootData[RTA_BOOT_DATA_SIZE]; BYTE PcUniqNum[4]; /* this is really a uint. */
} S2; BYTE PcModuleTypes; /* what modules are fitted */
struct } S3;
{ struct {
WORD __crud__; struct CmdHdr CmdHdr;
BYTE PcUniqNum[4]; /* this is really a uint. */ BYTE __undefined__;
BYTE PcModuleTypes; /* what modules are fitted */ BYTE PcModemStatus;
} S3; BYTE PcPortStatus;
struct BYTE PcSubCommand; /* commands like mem or register dump */
{ WORD PcSubAddr; /* Address for command */
struct CmdHdr CmdHdr; BYTE PcSubData[64]; /* Date area for command */
BYTE __undefined__; } S4;
BYTE PcModemStatus; struct {
BYTE PcPortStatus; struct CmdHdr CmdHdr;
BYTE PcSubCommand; /* commands like mem or register dump */ BYTE PcCommandText[1];
WORD PcSubAddr; /* Address for command */ BYTE __crud__[20];
BYTE PcSubData[64]; /* Date area for command */ BYTE PcIDNum2; /* It had to go somewhere! */
} S4; } S5;
struct struct {
{ struct CmdHdr CmdHdr;
struct CmdHdr CmdHdr; struct SamTop Topology[LINKS_PER_UNIT];
BYTE PcCommandText[1]; } S6;
BYTE __crud__[20]; } U1;
BYTE PcIDNum2; /* It had to go somewhere! */
} S5;
struct
{
struct CmdHdr CmdHdr;
struct SamTop Topology[LINKS_PER_UNIT];
} S6;
} U1;
}; };
struct PktCmd_M struct PktCmd_M {
{ union {
union struct {
{ struct {
struct uchar PcCommand;
{ union {
struct uchar PcPhbNum;
{ uchar PcLinkNum;
uchar PcCommand; uchar PcIDNum;
union } U0;
{ } CmdHdr;
uchar PcPhbNum; struct {
uchar PcLinkNum; ushort NumPackets;
uchar PcIDNum; ushort LoadBase;
} U0; ushort CodeSize;
} CmdHdr; } PcBootSequence;
struct } S1;
{ struct {
ushort NumPackets; ushort PcSequence;
ushort LoadBase; uchar PcBootData[RTA_BOOT_DATA_SIZE];
ushort CodeSize; } S2;
} PcBootSequence; struct {
} S1; ushort __crud__;
struct uchar PcUniqNum[4]; /* this is really a uint. */
{ uchar PcModuleTypes; /* what modules are fitted */
ushort PcSequence; } S3;
uchar PcBootData[RTA_BOOT_DATA_SIZE]; struct {
} S2; ushort __cmd_hdr__;
struct uchar __undefined__;
{ uchar PcModemStatus;
ushort __crud__; uchar PcPortStatus;
uchar PcUniqNum[4]; /* this is really a uint. */ uchar PcSubCommand;
uchar PcModuleTypes; /* what modules are fitted */ ushort PcSubAddr;
} S3; uchar PcSubData[64];
struct } S4;
{ struct {
ushort __cmd_hdr__; ushort __cmd_hdr__;
uchar __undefined__; uchar PcCommandText[1];
uchar PcModemStatus; uchar __crud__[20];
uchar PcPortStatus; uchar PcIDNum2; /* Tacked on end */
uchar PcSubCommand; } S5;
ushort PcSubAddr; struct {
uchar PcSubData[64]; ushort __cmd_hdr__;
} S4; struct Top Topology[LINKS_PER_UNIT];
struct } S6;
{ } U1;
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 #define Command U1.S1.CmdHdr.PcCommand
......
...@@ -51,12 +51,11 @@ ...@@ -51,12 +51,11 @@
#define UFOAD ( CONTROL + 4 ) #define UFOAD ( CONTROL + 4 )
#define IWAIT ( CONTROL + 5 ) #define IWAIT ( CONTROL + 5 )
#define IFOAD_MAGIC 0xF0AD /* of course */ #define IFOAD_MAGIC 0xF0AD /* of course */
#define ZOMBIE_MAGIC (~0xDEAD) /* not dead -> zombie */ #define ZOMBIE_MAGIC (~0xDEAD) /* not dead -> zombie */
#define UFOAD_MAGIC 0xD1E /* kill-your-neighbour */ #define UFOAD_MAGIC 0xD1E /* kill-your-neighbour */
#define IWAIT_MAGIC 0xB1DE /* Bide your time */ #define IWAIT_MAGIC 0xB1DE /* Bide your time */
#endif #endif
/*********** end of file ***********/ /*********** end of file ***********/
...@@ -44,18 +44,16 @@ static char *_daemon_h_sccs_ = "@(#)daemon.h 1.3"; ...@@ -44,18 +44,16 @@ static char *_daemon_h_sccs_ = "@(#)daemon.h 1.3";
** structures used on /dev/rio ** structures used on /dev/rio
*/ */
struct Error struct Error {
{ uint Error;
uint Error; uint Entry;
uint Entry; uint Other;
uint Other;
}; };
struct DownLoad struct DownLoad {
{ char *DataP;
char *DataP; uint Count;
uint Count; uint ProductCode;
uint ProductCode;
}; };
/* /*
...@@ -66,46 +64,41 @@ struct DownLoad ...@@ -66,46 +64,41 @@ struct DownLoad
#endif #endif
#ifndef MAX_XP_CTRL_LEN #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 #endif
struct PortSetup struct PortSetup {
{ uint From; /* Set/Clear XP & IXANY Control from this port.... */
uint From; /* Set/Clear XP & IXANY Control from this port.... */ uint To; /* .... to this port */
uint To; /* .... to this port */ uint XpCps; /* at this speed */
uint XpCps; /* at this speed */ char XpOn[MAX_XP_CTRL_LEN]; /* this is the start string */
char XpOn[MAX_XP_CTRL_LEN]; /* this is the start string */ char XpOff[MAX_XP_CTRL_LEN]; /* this is the stop string */
char XpOff[MAX_XP_CTRL_LEN]; /* this is the stop string */ uchar IxAny; /* enable/disable IXANY */
uchar IxAny; /* enable/disable IXANY */ uchar IxOn; /* enable/disable IXON */
uchar IxOn; /* enable/disable IXON */ uchar Lock; /* lock port params */
uchar Lock; /* lock port params */ uchar Store; /* store params across closes */
uchar Store; /* store params across closes */ uchar Drain; /* close only when drained */
uchar Drain; /* close only when drained */
}; };
struct LpbReq struct LpbReq {
{ uint Host;
uint Host; uint Link;
uint Link; struct LPB *LpbP;
struct LPB *LpbP;
}; };
struct RupReq struct RupReq {
{ uint HostNum;
uint HostNum; uint RupNum;
uint RupNum; struct RUP *RupP;
struct RUP *RupP;
}; };
struct PortReq struct PortReq {
{ uint SysPort;
uint SysPort; struct Port *PortP;
struct Port *PortP;
}; };
struct StreamInfo struct StreamInfo {
{ uint SysPort;
uint SysPort;
#if 0 #if 0
queue_t RQueue; queue_t RQueue;
queue_t WQueue; queue_t WQueue;
...@@ -115,68 +108,59 @@ struct StreamInfo ...@@ -115,68 +108,59 @@ struct StreamInfo
#endif #endif
}; };
struct HostReq struct HostReq {
{ uint HostNum;
uint HostNum; struct Host *HostP;
struct Host *HostP;
}; };
struct HostDpRam struct HostDpRam {
{ uint HostNum;
uint HostNum; struct DpRam *DpRamP;
struct DpRam *DpRamP;
}; };
struct DebugCtrl struct DebugCtrl {
{ uint SysPort;
uint SysPort; uint Debug;
uint Debug; uint Wait;
uint Wait;
}; };
struct MapInfo struct MapInfo {
{ uint FirstPort; /* 8 ports, starting from this (tty) number */
uint FirstPort; /* 8 ports, starting from this (tty) number */ uint RtaUnique; /* reside on this RTA (unique number) */
uint RtaUnique; /* reside on this RTA (unique number) */
}; };
struct MapIn struct MapIn {
{ uint NumEntries; /* How many port sets are we mapping? */
uint NumEntries; /* How many port sets are we mapping? */ struct MapInfo *MapInfoP; /* Pointer to (user space) info */
struct MapInfo *MapInfoP; /* Pointer to (user space) info */
}; };
struct SendPack struct SendPack {
{ unsigned int PortNum;
unsigned int PortNum; unsigned char Len;
unsigned char Len; unsigned char Data[PKT_MAX_DATA_LEN];
unsigned char Data[PKT_MAX_DATA_LEN];
}; };
struct SpecialRupCmd struct SpecialRupCmd {
{ struct PKT Packet;
struct PKT Packet; unsigned short Host;
unsigned short Host; unsigned short RupNum;
unsigned short RupNum;
}; };
struct IdentifyRta struct IdentifyRta {
{ ulong RtaUnique;
ulong RtaUnique; uchar ID;
uchar ID;
}; };
struct KillNeighbour struct KillNeighbour {
{ ulong UniqueNum;
ulong UniqueNum; uchar Link;
uchar Link;
}; };
struct rioVersion { struct rioVersion {
char version[MAX_VERSION_LEN]; char version[MAX_VERSION_LEN];
char relid[MAX_VERSION_LEN]; char relid[MAX_VERSION_LEN];
int buildLevel; int buildLevel;
char buildDate[MAX_VERSION_LEN]; char buildDate[MAX_VERSION_LEN];
}; };
...@@ -316,16 +300,16 @@ struct rioVersion { ...@@ -316,16 +300,16 @@ struct rioVersion {
#define RIO_SET_XP_CPS rIOCW(155,int) #define RIO_SET_XP_CPS rIOCW(155,int)
#define RIO_GET_IXANY rIOCR(156,int) /* ixany allowed? */ #define RIO_GET_IXANY rIOCR(156,int) /* ixany allowed? */
#define RIO_SET_IXANY rIOCW(157,int) #define RIO_SET_IXANY rIOCW(157,int)
#define RIO_SET_IXANY_ON rIOCN(158) /* allow ixany */ #define RIO_SET_IXANY_ON rIOCN(158) /* allow ixany */
#define RIO_SET_IXANY_OFF rIOCN(159) /* disallow ixany */ #define RIO_SET_IXANY_OFF rIOCN(159) /* disallow ixany */
#define RIO_GET_MODEM rIOCR(160,int) /* port is modem/direct line? */ #define RIO_GET_MODEM rIOCR(160,int) /* port is modem/direct line? */
#define RIO_SET_MODEM rIOCW(161,int) #define RIO_SET_MODEM rIOCW(161,int)
#define RIO_SET_MODEM_ON rIOCN(162) /* port is a modem */ #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_OFF rIOCN(163) /* port is direct */
#define RIO_GET_IXON rIOCR(164,int) /* ixon allowed? */ #define RIO_GET_IXON rIOCR(164,int) /* ixon allowed? */
#define RIO_SET_IXON rIOCW(165,int) #define RIO_SET_IXON rIOCW(165,int)
#define RIO_SET_IXON_ON rIOCN(166) /* allow ixon */ #define RIO_SET_IXON_ON rIOCN(166) /* allow ixon */
#define RIO_SET_IXON_OFF rIOCN(167) /* disallow ixon */ #define RIO_SET_IXON_OFF rIOCN(167) /* disallow ixon */
#define RIO_GET_SIVIEW ((('s')<<8) | 106) /* backwards compatible with SI */ #define RIO_GET_SIVIEW ((('s')<<8) | 106) /* backwards compatible with SI */
......
...@@ -33,7 +33,7 @@ ...@@ -33,7 +33,7 @@
#define DBPACKET(pkt, opt, str, chn) debug_packet((pkt), (opt), (str), (chn)) #define DBPACKET(pkt, opt, str, chn) debug_packet((pkt), (opt), (str), (chn))
#else #else
#define DBPACKET(pkt, opt, str, c) #define DBPACKET(pkt, opt, str, c)
#endif /* DCIRRUS */ #endif /* DCIRRUS */
#endif /* _debug_h_ */ #endif /* _debug_h_ */
...@@ -37,13 +37,13 @@ ...@@ -37,13 +37,13 @@
#ifndef lint #ifndef lint
#ifdef SCCS #ifdef SCCS
static char *_rio_defaults_h_sccs = "@(#)defaults.h 1.1" ; static char *_rio_defaults_h_sccs = "@(#)defaults.h 1.1";
#endif #endif
#endif #endif
#define MILLISECOND (int) (1000/64) /* 15.625 low ticks */ #define MILLISECOND (int) (1000/64) /* 15.625 low ticks */
#define SECOND (int) 15625 /* Low priority ticks */ #define SECOND (int) 15625 /* Low priority ticks */
#ifdef RTA #ifdef RTA
#define RX_LIMIT (ushort) 3 #define RX_LIMIT (ushort) 3
...@@ -56,4 +56,3 @@ static char *_rio_defaults_h_sccs = "@(#)defaults.h 1.1" ; ...@@ -56,4 +56,3 @@ static char *_rio_defaults_h_sccs = "@(#)defaults.h 1.1" ;
/*********** end of file ***********/ /*********** end of file ***********/
...@@ -60,7 +60,7 @@ static char *_eisa_h_sccs_ = "@(#)eisa.h 1.2"; ...@@ -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_LO 0xC80 /* where RIO_EISA_IDENT is */
#define EISA_PRODUCT_IDENT_HI 0xC81 #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_REVISION_NUMBER 0xC83 /* revision (1dp) */
#define EISA_ENABLE 0xC84 /* set LSB to enable card */ #define EISA_ENABLE 0xC84 /* set LSB to enable card */
#define EISA_UNIQUE_NUM_0 0xC88 /* vomit */ #define EISA_UNIQUE_NUM_0 0xC88 /* vomit */
...@@ -101,4 +101,4 @@ static char *_eisa_h_sccs_ = "@(#)eisa.h 1.2"; ...@@ -101,4 +101,4 @@ static char *_eisa_h_sccs_ = "@(#)eisa.h 1.2";
#define INBZ(z,x) inb(((z)<<12) | (x)) #define INBZ(z,x) inb(((z)<<12) | (x))
#define OUTBZ(z,x,y) outb((((z)<<12) | (x)), y) #define OUTBZ(z,x,y) outb((((z)<<12) | (x)), y)
#endif /* __rio_eisa_h__ */ #endif /* __rio_eisa_h__ */
...@@ -36,7 +36,7 @@ ...@@ -36,7 +36,7 @@
#ifndef lint #ifndef lint
#ifdef SCCS #ifdef SCCS
static char *_rio_enable_h_sccs = "@(#)enable.h 1.1" ; static char *_rio_enable_h_sccs = "@(#)enable.h 1.1";
#endif #endif
#endif #endif
...@@ -46,5 +46,3 @@ static char *_rio_enable_h_sccs = "@(#)enable.h 1.1" ; ...@@ -46,5 +46,3 @@ static char *_rio_enable_h_sccs = "@(#)enable.h 1.1" ;
/*********** end of file ***********/ /*********** end of file ***********/
...@@ -80,6 +80,3 @@ ...@@ -80,6 +80,3 @@
/*********** end of file ***********/ /*********** end of file ***********/
...@@ -101,4 +101,4 @@ static char *_errors_h_sccs_ = "@(#)errors.h 1.2"; ...@@ -101,4 +101,4 @@ static char *_errors_h_sccs_ = "@(#)errors.h 1.2";
#define NOT_ENOUGH_CORE_FOR_PCI_COPY 53 #define NOT_ENOUGH_CORE_FOR_PCI_COPY 53
#endif /* __rio_errors_h__ */ #endif /* __rio_errors_h__ */
...@@ -41,114 +41,113 @@ ...@@ -41,114 +41,113 @@
#ifndef lint #ifndef lint
#ifdef SCCS #ifdef SCCS
static char *_rio_formpkt_h_sccs = "@(#)formpkt.h 1.1" ; static char *_rio_formpkt_h_sccs = "@(#)formpkt.h 1.1";
#endif #endif
#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 { struct FORM_BOOT_PKT_1 {
ushort pkt_number ; ushort pkt_number;
ushort pkt_total ; ushort pkt_total;
ushort boot_top ; 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 { struct FORM_BOOT_PKT_2 {
ushort pkt_number ; ushort pkt_number;
char boot_data[10] ; char boot_data[10];
} ; };
typedef struct FORM_ATTACH_RTA FORM_ATTACH_RTA ; typedef struct FORM_ATTACH_RTA FORM_ATTACH_RTA;
struct FORM_ATTACH_RTA { struct FORM_ATTACH_RTA {
char cmd_code ; char cmd_code;
char booter_serial[4] ; char booter_serial[4];
char booter_link ; char booter_link;
char bootee_serial[4] ; char bootee_serial[4];
char bootee_link ; char bootee_link;
} ; };
typedef struct FORM_BOOT_ID FORM_BOOT_ID ; typedef struct FORM_BOOT_ID FORM_BOOT_ID;
struct FORM_BOOT_ID { struct FORM_BOOT_ID {
char cmd_code ; char cmd_code;
char bootee_serial[4] ; char bootee_serial[4];
char bootee_prod_id ; char bootee_prod_id;
char bootee_link ; char bootee_link;
} ; };
typedef struct FORM_ROUTE_1 FORM_ROUTE_1 ; typedef struct FORM_ROUTE_1 FORM_ROUTE_1;
struct FORM_ROUTE_1 { struct FORM_ROUTE_1 {
char cmd_code ; char cmd_code;
char pkt_number ; char pkt_number;
char total_in_sequence ; char total_in_sequence;
char unit_id ; char unit_id;
char host_unit_id ; char host_unit_id;
} ; };
typedef struct FORM_ROUTE_2 FORM_ROUTE_2 ; typedef struct FORM_ROUTE_2 FORM_ROUTE_2;
struct FORM_ROUTE_2 { struct FORM_ROUTE_2 {
char cmd_code ; char cmd_code;
char pkt_number ; char pkt_number;
char total_in_sequence ; char total_in_sequence;
char route_data[9] ; char route_data[9];
} ; };
typedef struct FORM_ROUTE_REQ FORM_ROUTE_REQ ; typedef struct FORM_ROUTE_REQ FORM_ROUTE_REQ;
struct FORM_ROUTE_REQ { struct FORM_ROUTE_REQ {
char cmd_code ; char cmd_code;
char pkt_number ; char pkt_number;
char total_in_sequence ; char total_in_sequence;
char route_data[10] ; char route_data[10];
} ; };
typedef struct FORM_ERROR FORM_ERROR ; typedef struct FORM_ERROR FORM_ERROR;
struct FORM_ERROR { struct FORM_ERROR {
char cmd_code ; char cmd_code;
char error_code ; char error_code;
} ; };
typedef struct FORM_STATUS FORM_STATUS ; typedef struct FORM_STATUS FORM_STATUS;
struct FORM_STATUS { struct FORM_STATUS {
char cmd_code ; char cmd_code;
char status_code ; char status_code;
char last_packet_valid ; char last_packet_valid;
char tx_buffer ; char tx_buffer;
char rx_buffer ; char rx_buffer;
char port_status ; char port_status;
char phb_status ; char phb_status;
} ; };
typedef struct FORM_LINK_STATUS FORM_LINK_STATUS ; typedef struct FORM_LINK_STATUS FORM_LINK_STATUS;
struct FORM_LINK_STATUS { struct FORM_LINK_STATUS {
char cmd_code ; char cmd_code;
char status_code ; char status_code;
char link_number ; char link_number;
ushort rx_errors ; ushort rx_errors;
ushort tx_errors ; ushort tx_errors;
ushort csum_errors ; ushort csum_errors;
ushort disconnects ; ushort disconnects;
} ; };
typedef struct FORM_PARTITION FORM_PARTITION ; typedef struct FORM_PARTITION FORM_PARTITION;
struct FORM_PARTITION { struct FORM_PARTITION {
char cmd_code ; char cmd_code;
char status_code ; char status_code;
char port_number ; char port_number;
char tx_max ; char tx_max;
char rx_max ; char rx_max;
char rx_limit ; char rx_limit;
} ; };
#endif #endif
/*********** end of file ***********/ /*********** end of file ***********/
...@@ -47,20 +47,19 @@ int RIOBootCodeHOST(struct rio_info *, register struct DownLoad *); ...@@ -47,20 +47,19 @@ int RIOBootCodeHOST(struct rio_info *, register struct DownLoad *);
int RIOBootCodeUNKNOWN(struct rio_info *, struct DownLoad *); int RIOBootCodeUNKNOWN(struct rio_info *, struct DownLoad *);
void msec_timeout(struct Host *); void msec_timeout(struct Host *);
int RIOBootRup(struct rio_info *, uint, struct Host *, struct PKT *); int RIOBootRup(struct rio_info *, uint, struct Host *, struct PKT *);
int RIOBootOk(struct rio_info *,struct Host *, ulong); int RIOBootOk(struct rio_info *, struct Host *, ulong);
int RIORtaBound(struct rio_info *, uint); int RIORtaBound(struct rio_info *, uint);
void FillSlot(int, int, uint, struct Host *); void FillSlot(int, int, uint, struct Host *);
/* riocmd.c */ /* riocmd.c */
int RIOFoadRta(struct Host *, struct Map *); int RIOFoadRta(struct Host *, struct Map *);
int RIOZombieRta(struct Host *, struct Map *); int RIOZombieRta(struct Host *, struct Map *);
int RIOCommandRta(struct rio_info *, uint, int (* func)( struct Host *, int RIOCommandRta(struct rio_info *, uint, int (*func) (struct Host *, struct Map *));
struct Map *)); int RIOIdentifyRta(struct rio_info *, caddr_t);
int RIOIdentifyRta(struct rio_info *, caddr_t);
int RIOKillNeighbour(struct rio_info *, caddr_t); int RIOKillNeighbour(struct rio_info *, caddr_t);
int RIOSuspendBootRta(struct Host *, int, int); int RIOSuspendBootRta(struct Host *, int, int);
int RIOFoadWakeup(struct rio_info *); int RIOFoadWakeup(struct rio_info *);
struct CmdBlk * RIOGetCmdBlk(void); struct CmdBlk *RIOGetCmdBlk(void);
void RIOFreeCmdBlk(struct CmdBlk *); void RIOFreeCmdBlk(struct CmdBlk *);
int RIOQueueCmdBlk(struct Host *, uint, struct CmdBlk *); int RIOQueueCmdBlk(struct Host *, uint, struct CmdBlk *);
void RIOPollHostCommands(struct rio_info *, struct Host *); void RIOPollHostCommands(struct rio_info *, struct Host *);
...@@ -71,13 +70,13 @@ void ShowPacket(uint, struct PKT *); ...@@ -71,13 +70,13 @@ void ShowPacket(uint, struct PKT *);
/* rioctrl.c */ /* rioctrl.c */
int copyin(int, caddr_t, int); int copyin(int, caddr_t, int);
int riocontrol(struct rio_info *, dev_t,int,caddr_t,int); int riocontrol(struct rio_info *, dev_t, int, caddr_t, int);
int RIOPreemptiveCmd(struct rio_info *,struct Port *,uchar); int RIOPreemptiveCmd(struct rio_info *, struct Port *, uchar);
/* rioinit.c */ /* rioinit.c */
void rioinit(struct rio_info *, struct RioHostInfo *); void rioinit(struct rio_info *, struct RioHostInfo *);
void RIOInitHosts(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); int RIODoAT(struct rio_info *, int, int);
caddr_t RIOCheckForATCard(int); caddr_t RIOCheckForATCard(int);
int RIOAssignAT(struct rio_info *, int, caddr_t, int); int RIOAssignAT(struct rio_info *, int, caddr_t, int);
...@@ -85,7 +84,7 @@ int RIOBoardTest(paddr_t, caddr_t, uchar, int); ...@@ -85,7 +84,7 @@ int RIOBoardTest(paddr_t, caddr_t, uchar, int);
void RIOAllocDataStructs(struct rio_info *); void RIOAllocDataStructs(struct rio_info *);
void RIOSetupDataStructs(struct rio_info *); void RIOSetupDataStructs(struct rio_info *);
int RIODefaultName(struct rio_info *, struct Host *, uint); int RIODefaultName(struct rio_info *, struct Host *, uint);
struct rioVersion * RIOVersid(void); struct rioVersion *RIOVersid(void);
int RIOMapin(paddr_t, int, caddr_t *); int RIOMapin(paddr_t, int, caddr_t *);
void RIOMapout(paddr_t, long, caddr_t); void RIOMapout(paddr_t, long, caddr_t);
void RIOHostReset(uint, volatile struct DpRam *, uint); void RIOHostReset(uint, volatile struct DpRam *, uint);
...@@ -108,7 +107,7 @@ void remove_receive(struct Port *); ...@@ -108,7 +107,7 @@ void remove_receive(struct Port *);
/* rioroute.c */ /* rioroute.c */
int RIORouteRup(struct rio_info *, uint, struct Host *, struct PKT *); 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); uint GetUnitType(uint);
int RIOSetChange(struct rio_info *); int RIOSetChange(struct rio_info *);
int RIOFindFreeID(struct rio_info *, struct Host *, uint *, uint *); int RIOFindFreeID(struct rio_info *, struct Host *, uint *, uint *);
...@@ -116,9 +115,9 @@ int RIOFindFreeID(struct rio_info *, struct Host *, uint *, uint *); ...@@ -116,9 +115,9 @@ int RIOFindFreeID(struct rio_info *, struct Host *, uint *, uint *);
/* riotty.c */ /* riotty.c */
int riotopen(struct tty_struct * tty, struct file * filp); int riotopen(struct tty_struct *tty, struct file *filp);
int riotclose(void *ptr); int riotclose(void *ptr);
int riotioctl(struct rio_info *, struct tty_struct *, register int, register caddr_t); int riotioctl(struct rio_info *, struct tty_struct *, register int, register caddr_t);
void ttyseth(struct Port *, struct ttystatics *, struct old_sgttyb *sg); void ttyseth(struct Port *, struct ttystatics *, struct old_sgttyb *sg);
/* riotable.c */ /* riotable.c */
...@@ -127,27 +126,27 @@ int RIOApel(struct rio_info *); ...@@ -127,27 +126,27 @@ int RIOApel(struct rio_info *);
int RIODeleteRta(struct rio_info *, struct Map *); int RIODeleteRta(struct rio_info *, struct Map *);
int RIOAssignRta(struct rio_info *, struct Map *); int RIOAssignRta(struct rio_info *, struct Map *);
int RIOReMapPorts(struct rio_info *, struct Host *, 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 #if 0
/* riodrvr.c */ /* 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_uninstall(register struct rio_info *);
int rio_open(struct rio_info *, int, struct file *); int rio_open(struct rio_info *, int, struct file *);
int rio_close(struct rio_info *, struct file *); int rio_close(struct rio_info *, struct file *);
int rio_read(struct rio_info *, struct file *, char *, int); 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_ioctl(struct rio_info *, struct file *, int, char *);
int rio_select(struct rio_info *, struct file * f, int, struct sel *); int rio_select(struct rio_info *, struct file *f, int, struct sel *);
int rio_intr(char *); int rio_intr(char *);
int rio_isr_thread(char *); int rio_isr_thread(char *);
struct rio_info * rio_info_store( int cmd, struct rio_info * p); struct rio_info *rio_info_store(int cmd, struct rio_info *p);
#endif #endif
extern int rio_pcicopy(char *src, char *dst, int n); extern int rio_pcicopy(char *src, char *dst, int n);
extern int rio_minor (struct tty_struct *tty); extern int rio_minor(struct tty_struct *tty);
extern int rio_ismodem (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 */
...@@ -49,33 +49,32 @@ static char *_host_h_sccs_ = "@(#)host.h 1.2"; ...@@ -49,33 +49,32 @@ static char *_host_h_sccs_ = "@(#)host.h 1.2";
** Host data structure. This is used for the software equiv. of ** Host data structure. This is used for the software equiv. of
** the host. ** the host.
*/ */
struct Host struct Host {
{ uchar Type; /* RIO_EISA, RIO_MCA, ... */
uchar Type; /* RIO_EISA, RIO_MCA, ... */ uchar Ivec; /* POLLED or ivec number */
uchar Ivec; /* POLLED or ivec number */ uchar Mode; /* Control stuff */
uchar Mode; /* Control stuff */ uchar Slot; /* Slot */
uchar Slot; /* Slot */ volatile caddr_t Caddr; /* KV address of DPRAM */
volatile caddr_t Caddr; /* KV address of DPRAM */ volatile struct DpRam *CardP; /* KV address of DPRAM, with overlay */
volatile struct DpRam *CardP; /* KV address of DPRAM, with overlay */ paddr_t PaddrP; /* Phys. address of DPRAM */
paddr_t PaddrP; /* Phys. address of DPRAM */ char Name[MAX_NAME_LEN]; /* The name of the host */
char Name[MAX_NAME_LEN]; /* The name of the host */ uint UniqueNum; /* host unique number */
uint UniqueNum; /* host unique number */ spinlock_t HostLock; /* Lock structure for MPX */
spinlock_t HostLock; /* Lock structure for MPX */ /*struct pci_devinfo PciDevInfo; *//* PCI Bus/Device/Function stuff */
/*struct pci_devinfo PciDevInfo; *//* PCI Bus/Device/Function stuff */ /*struct lockb HostLock; *//* Lock structure for MPX */
/*struct lockb HostLock; *//* Lock structure for MPX */ uint WorkToBeDone; /* set to true each interrupt */
uint WorkToBeDone; /* set to true each interrupt */ uint InIntr; /* Being serviced? */
uint InIntr; /* Being serviced? */ uint IntSrvDone; /* host's interrupt has been serviced */
uint IntSrvDone;/* host's interrupt has been serviced */ int (*Copy) (caddr_t, caddr_t, int); /* copy func */
int (*Copy)( caddr_t, caddr_t, int ); /* copy func */ struct timer_list timer;
struct timer_list timer; /*
/* ** I M P O R T A N T !
** I M P O R T A N T ! **
** ** The rest of this data structure is cleared to zero after
** The rest of this data structure is cleared to zero after ** a RIO_HOST_FOAD command.
** a RIO_HOST_FOAD command. */
*/
ulong Flags; /* Whats going down */
ulong Flags; /* Whats going down */
#define RC_WAITING 0 #define RC_WAITING 0
#define RC_STARTUP 1 #define RC_STARTUP 1
#define RC_RUNNING 2 #define RC_RUNNING 2
...@@ -93,25 +92,25 @@ struct Host ...@@ -93,25 +92,25 @@ struct Host
#define RC_BOOT_OWN 0x10 /* Only boot RTAs bound to this system */ #define RC_BOOT_OWN 0x10 /* Only boot RTAs bound to this system */
#define RC_BOOT_NONE 0x20 /* Don't boot any RTAs (slave mode) */ #define RC_BOOT_NONE 0x20 /* Don't boot any RTAs (slave mode) */
struct Top Topology[LINKS_PER_UNIT]; /* one per link */ struct Top Topology[LINKS_PER_UNIT]; /* one per link */
struct Map Mapping[MAX_RUP]; /* Mappings for host */ struct Map Mapping[MAX_RUP]; /* Mappings for host */
struct PHB *PhbP; /* Pointer to the PHB array */ struct PHB *PhbP; /* Pointer to the PHB array */
ushort *PhbNumP; /* Ptr to Number of PHB's */ ushort *PhbNumP; /* Ptr to Number of PHB's */
struct LPB *LinkStrP ; /* Link Structure Array */ struct LPB *LinkStrP; /* Link Structure Array */
struct RUP *RupP; /* Sixteen real rups here */ struct RUP *RupP; /* Sixteen real rups here */
struct PARM_MAP *ParmMapP; /* points to the parmmap */ struct PARM_MAP *ParmMapP; /* points to the parmmap */
uint ExtraUnits[MAX_EXTRA_UNITS]; /* unknown things */ uint ExtraUnits[MAX_EXTRA_UNITS]; /* unknown things */
uint NumExtraBooted; /* how many of the above */ uint NumExtraBooted; /* how many of the above */
/* /*
** Twenty logical rups. ** Twenty logical rups.
** The first sixteen are the real Rup entries (above), the last four ** The first sixteen are the real Rup entries (above), the last four
** are the link RUPs. ** are the link RUPs.
*/ */
struct UnixRup UnixRups[MAX_RUP+LINKS_PER_UNIT]; struct UnixRup UnixRups[MAX_RUP + LINKS_PER_UNIT];
int timeout_id; /* For calling 100 ms delays */ int timeout_id; /* For calling 100 ms delays */
int timeout_sem;/* For calling 100 ms delays */ int timeout_sem; /* For calling 100 ms delays */
long locks; /* long req'd for set_bit --RR */ long locks; /* long req'd for set_bit --RR */
char ____end_marker____; char ____end_marker____;
}; };
#define Control CardP->DpControl #define Control CardP->DpControl
#define SetInt CardP->DpSetInt #define SetInt CardP->DpSetInt
...@@ -129,6 +128,6 @@ struct Host ...@@ -129,6 +128,6 @@ struct Host
#define Year CardP->DpYear #define Year CardP->DpYear
#define Week CardP->DpWeek #define Week CardP->DpWeek
#define RIO_DUMBPARM 0x0860 /* what not to expect */ #define RIO_DUMBPARM 0x0860 /* what not to expect */
#endif #endif
...@@ -37,7 +37,7 @@ ...@@ -37,7 +37,7 @@
#ifndef lint #ifndef lint
#ifdef SCCS_LABELS #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
#endif #endif
...@@ -53,5 +53,3 @@ static char *_rio_hosthw_h_sccs = "@(#)hosthw.h 1.2" ; ...@@ -53,5 +53,3 @@ static char *_rio_hosthw_h_sccs = "@(#)hosthw.h 1.2" ;
/*********** end of file ***********/ /*********** end of file ***********/
...@@ -70,27 +70,27 @@ ...@@ -70,27 +70,27 @@
#define DIE_NOW (ushort) 0x0200 #define DIE_NOW (ushort) 0x0200
/* Boot request stuff */ /* Boot request stuff */
#define BOOT_REQUEST ((ushort) 0) /* Request for a boot */ #define BOOT_REQUEST ((ushort) 0) /* Request for a boot */
#define BOOT_ABORT ((ushort) 1) /* Abort a boot */ #define BOOT_ABORT ((ushort) 1) /* Abort a boot */
#define BOOT_SEQUENCE ((ushort) 2) /* Packet with the number of packets #define BOOT_SEQUENCE ((ushort) 2) /* Packet with the number of packets
and load address */ and load address */
#define BOOT_COMPLETED ((ushort) 3) /* Boot completed */ #define BOOT_COMPLETED ((ushort) 3) /* Boot completed */
/* States that a link can be in */ /* States that a link can be in */
#define LINK_DISCONNECTED ((ushort) 0) /* Disconnected */ #define LINK_DISCONNECTED ((ushort) 0) /* Disconnected */
#define LINK_BOOT1 ((ushort) 1) /* Trying to send 1st stage boot */ #define LINK_BOOT1 ((ushort) 1) /* Trying to send 1st stage boot */
#define LINK_BOOT2 ((ushort) 2) /* Trying to send 2nd stage boot */ #define LINK_BOOT2 ((ushort) 2) /* Trying to send 2nd stage boot */
#define LINK_BOOT2WAIT ((ushort) 3) /* Waiting for selftest results */ #define LINK_BOOT2WAIT ((ushort) 3) /* Waiting for selftest results */
#define LINK_BOOT3 ((ushort) 4) /* Trying to send 3rd stage boots */ #define LINK_BOOT3 ((ushort) 4) /* Trying to send 3rd stage boots */
#define LINK_SYNC ((ushort) 5) /* Syncing */ #define LINK_SYNC ((ushort) 5) /* Syncing */
#define LINK_INTRO ((ushort) 10) /* Introductory packet */ #define LINK_INTRO ((ushort) 10) /* Introductory packet */
#define LINK_SUPPLYID ((ushort) 11) /* Trying to supply an ID */ #define LINK_SUPPLYID ((ushort) 11) /* Trying to supply an ID */
#define LINK_TOPOLOGY ((ushort) 12) /* Send a topology update */ #define LINK_TOPOLOGY ((ushort) 12) /* Send a topology update */
#define LINK_REQUESTID ((ushort) 13) /* Waiting for an ID */ #define LINK_REQUESTID ((ushort) 13) /* Waiting for an ID */
#define LINK_CONNECTED ((ushort) 14) /* Connected */ #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) #define LINK_SPARE ((ushort) 40)
...@@ -103,12 +103,12 @@ ...@@ -103,12 +103,12 @@
** LED stuff ** LED stuff
*/ */
#if defined(RTA) #if defined(RTA)
#define LED_OFF ((ushort) 0) /* LED off */ #define LED_OFF ((ushort) 0) /* LED off */
#define LED_RED ((ushort) 1) /* LED Red */ #define LED_RED ((ushort) 1) /* LED Red */
#define LED_GREEN ((ushort) 2) /* LED Green */ #define LED_GREEN ((ushort) 2) /* LED Green */
#define LED_ORANGE ((ushort) 4) /* LED Orange */ #define LED_ORANGE ((ushort) 4) /* LED Orange */
#define LED_1TO8_OPEN ((ushort) 1) /* Port 1->8 LED on */ #define LED_1TO8_OPEN ((ushort) 1) /* Port 1->8 LED on */
#define LED_9TO16_OPEN ((ushort) 2) /* Port 9->16 LED on */ #define LED_9TO16_OPEN ((ushort) 2) /* Port 9->16 LED on */
#define LED_SET_COLOUR(colour) (link->led = (colour)) #define LED_SET_COLOUR(colour) (link->led = (colour))
#define LED_OR_COLOUR(colour) (link->led |= (colour)) #define LED_OR_COLOUR(colour) (link->led |= (colour))
#define LED_TIMEOUT(time) (link->led_timeout = RioTimePlus(RioTime(),(time))) #define LED_TIMEOUT(time) (link->led_timeout = RioTimePlus(RioTime(),(time)))
...@@ -116,72 +116,72 @@ ...@@ -116,72 +116,72 @@
#define LED_SET_COLOUR(colour) #define LED_SET_COLOUR(colour)
#define LED_OR_COLOUR(colour) #define LED_OR_COLOUR(colour)
#define LED_TIMEOUT(time) #define LED_TIMEOUT(time)
#endif /* RTA */ #endif /* RTA */
struct LPB { struct LPB {
WORD link_number ; /* Link Number */ WORD link_number; /* Link Number */
Channel_ptr in_ch ; /* Link In Channel */ Channel_ptr in_ch; /* Link In Channel */
Channel_ptr out_ch ; /* Link Out Channel */ Channel_ptr out_ch; /* Link Out Channel */
#ifdef RTA #ifdef RTA
uchar stat_led ; /* Port open leds */ uchar stat_led; /* Port open leds */
uchar led ; /* True, light led! */ uchar led; /* True, light led! */
#endif #endif
BYTE attached_serial[4]; /* Attached serial number */ BYTE attached_serial[4]; /* Attached serial number */
BYTE attached_host_serial[4]; BYTE attached_host_serial[4];
/* Serial number of Host who /* Serial number of Host who
booted the other end */ booted the other end */
WORD descheduled ; /* Currently Descheduled */ WORD descheduled; /* Currently Descheduled */
WORD state; /* Current state */ WORD state; /* Current state */
WORD send_poll ; /* Send a Poll Packet */ WORD send_poll; /* Send a Poll Packet */
Process_ptr ltt_p ; /* Process Descriptor */ Process_ptr ltt_p; /* Process Descriptor */
Process_ptr lrt_p ; /* Process Descriptor */ Process_ptr lrt_p; /* Process Descriptor */
WORD lrt_status ; /* Current lrt status */ WORD lrt_status; /* Current lrt status */
WORD ltt_status ; /* Current ltt status */ WORD ltt_status; /* Current ltt status */
WORD timeout ; /* Timeout value */ WORD timeout; /* Timeout value */
WORD topology; /* Topology bits */ WORD topology; /* Topology bits */
WORD mon_ltt ; WORD mon_ltt;
WORD mon_lrt ; WORD mon_lrt;
WORD WaitNoBoot ; /* Secs to hold off booting */ WORD WaitNoBoot; /* Secs to hold off booting */
PKT_ptr add_packet_list; /* Add packets to here */ PKT_ptr add_packet_list; /* Add packets to here */
PKT_ptr remove_packet_list; /* Send packets from here */ PKT_ptr remove_packet_list; /* Send packets from here */
#ifdef RTA #ifdef RTA
#ifdef DCIRRUS #ifdef DCIRRUS
#define QBUFS_PER_REDIRECT (4 / PKTS_PER_BUFFER + 1) #define QBUFS_PER_REDIRECT (4 / PKTS_PER_BUFFER + 1)
#else #else
#define QBUFS_PER_REDIRECT (8 / PKTS_PER_BUFFER + 1) #define QBUFS_PER_REDIRECT (8 / PKTS_PER_BUFFER + 1)
#endif #endif
PKT_ptr_ptr rd_add ; /* Add a new Packet here */ PKT_ptr_ptr rd_add; /* Add a new Packet here */
Q_BUF_ptr rd_add_qb; /* Pointer to the add Q buf */ 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_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_add_end_qbb; /* Pointer to the end of the Q's buf */
PKT_ptr_ptr rd_remove ; /* Remove a Packet here */ PKT_ptr_ptr rd_remove; /* Remove a Packet here */
Q_BUF_ptr rd_remove_qb ; /* Pointer to the remove Q buf */ 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_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 */ PKT_ptr_ptr rd_remove_end_qbb; /* Pointer to the end of the Q buf */
ushort pkts_in_q ; /* Packets in queue */ ushort pkts_in_q; /* Packets in queue */
#endif #endif
Channel_ptr lrt_fail_chan ; /* Lrt's failure channel */ Channel_ptr lrt_fail_chan; /* Lrt's failure channel */
Channel_ptr ltt_fail_chan ; /* Ltt's failure channel */ Channel_ptr ltt_fail_chan; /* Ltt's failure channel */
#if defined (HOST) || defined (INKERNEL) #if defined (HOST) || defined (INKERNEL)
/* RUP structure for HOST to driver communications */ /* RUP structure for HOST to driver communications */
struct RUP rup ; struct RUP rup;
#endif #endif
struct RUP link_rup; /* RUP for the link (POLL, struct RUP link_rup; /* RUP for the link (POLL,
topology etc.) */ topology etc.) */
WORD attached_link ; /* Number of attached link */ WORD attached_link; /* Number of attached link */
WORD csum_errors ; /* csum errors */ WORD csum_errors; /* csum errors */
WORD num_disconnects ; /* number of disconnects */ WORD num_disconnects; /* number of disconnects */
WORD num_sync_rcvd ; /* # sync's received */ WORD num_sync_rcvd; /* # sync's received */
WORD num_sync_rqst ; /* # sync requests */ WORD num_sync_rqst; /* # sync requests */
WORD num_tx ; /* Num pkts sent */ WORD num_tx; /* Num pkts sent */
WORD num_rx ; /* Num pkts received */ WORD num_rx; /* Num pkts received */
WORD module_attached; /* Module tpyes of attached */ WORD module_attached; /* Module tpyes of attached */
WORD led_timeout; /* LED timeout */ WORD led_timeout; /* LED timeout */
WORD first_port; /* First port to service */ WORD first_port; /* First port to service */
WORD last_port; /* Last port to service */ WORD last_port; /* Last port to service */
} ; };
#endif #endif
......
...@@ -41,7 +41,7 @@ ...@@ -41,7 +41,7 @@
#endif #endif
struct ttystatics { struct ttystatics {
struct termios tm; struct termios tm;
}; };
#define bzero(d, n) memset((d), 0, (n)) #define bzero(d, n) memset((d), 0, (n))
...@@ -97,26 +97,24 @@ the older driver. The older driver includes "brates.h" which shadows ...@@ -97,26 +97,24 @@ the older driver. The older driver includes "brates.h" which shadows
the definitions from Linux, and is incompatible... */ the definitions from Linux, and is incompatible... */
/* RxBaud and TxBaud definitions... */ /* RxBaud and TxBaud definitions... */
#define RIO_B0 0x00 /* RTS / DTR signals dropped */ #define RIO_B0 0x00 /* RTS / DTR signals dropped */
#define RIO_B50 0x01 /* 50 baud */ #define RIO_B50 0x01 /* 50 baud */
#define RIO_B75 0x02 /* 75 baud */ #define RIO_B75 0x02 /* 75 baud */
#define RIO_B110 0x03 /* 110 baud */ #define RIO_B110 0x03 /* 110 baud */
#define RIO_B134 0x04 /* 134.5 baud */ #define RIO_B134 0x04 /* 134.5 baud */
#define RIO_B150 0x05 /* 150 baud */ #define RIO_B150 0x05 /* 150 baud */
#define RIO_B200 0x06 /* 200 baud */ #define RIO_B200 0x06 /* 200 baud */
#define RIO_B300 0x07 /* 300 baud */ #define RIO_B300 0x07 /* 300 baud */
#define RIO_B600 0x08 /* 600 baud */ #define RIO_B600 0x08 /* 600 baud */
#define RIO_B1200 0x09 /* 1200 baud */ #define RIO_B1200 0x09 /* 1200 baud */
#define RIO_B1800 0x0A /* 1800 baud */ #define RIO_B1800 0x0A /* 1800 baud */
#define RIO_B2400 0x0B /* 2400 baud */ #define RIO_B2400 0x0B /* 2400 baud */
#define RIO_B4800 0x0C /* 4800 baud */ #define RIO_B4800 0x0C /* 4800 baud */
#define RIO_B9600 0x0D /* 9600 baud */ #define RIO_B9600 0x0D /* 9600 baud */
#define RIO_B19200 0x0E /* 19200 baud */ #define RIO_B19200 0x0E /* 19200 baud */
#define RIO_B38400 0x0F /* 38400 baud */ #define RIO_B38400 0x0F /* 38400 baud */
#define RIO_B56000 0x10 /* 56000 baud */ #define RIO_B56000 0x10 /* 56000 baud */
#define RIO_B57600 0x11 /* 57600 baud */ #define RIO_B57600 0x11 /* 57600 baud */
#define RIO_B64000 0x12 /* 64000 baud */ #define RIO_B64000 0x12 /* 64000 baud */
#define RIO_B115200 0x13 /* 115200 baud */ #define RIO_B115200 0x13 /* 115200 baud */
#define RIO_B2000 0x14 /* 2000 baud */ #define RIO_B2000 0x14 /* 2000 baud */
...@@ -38,7 +38,7 @@ ...@@ -38,7 +38,7 @@
#ifdef SCCS_LABELS #ifdef SCCS_LABELS
#ifndef lint #ifndef lint
static char *_rio_list_h_sccs = "@(#)list.h 1.9" ; static char *_rio_list_h_sccs = "@(#)list.h 1.9";
#endif #endif
#endif #endif
...@@ -166,7 +166,7 @@ static char *_rio_list_h_sccs = "@(#)list.h 1.9" ; ...@@ -166,7 +166,7 @@ static char *_rio_list_h_sccs = "@(#)list.h 1.9" ;
#endif #endif
#else /* !IN_KERNEL */ #else /* !IN_KERNEL */
#define ZERO_PTR NULL #define ZERO_PTR NULL
...@@ -192,5 +192,5 @@ static char *_rio_list_h_sccs = "@(#)list.h 1.9" ; ...@@ -192,5 +192,5 @@ static char *_rio_list_h_sccs = "@(#)list.h 1.9" ;
#define splx(oldspl) if ((oldspl) == 0) spl0() #define splx(oldspl) if ((oldspl) == 0) spl0()
#endif #endif
#endif /* ifndef _list.h */ #endif /* ifndef _list.h */
/*********** end of file ***********/ /*********** end of file ***********/
...@@ -36,7 +36,7 @@ ...@@ -36,7 +36,7 @@
#ifndef lint #ifndef lint
#ifdef SCCS_LABELS #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
#endif #endif
...@@ -50,6 +50,3 @@ static char *_rio_lrt_h_sccs = "@(#)lrt.h 1.1" ; ...@@ -50,6 +50,3 @@ static char *_rio_lrt_h_sccs = "@(#)lrt.h 1.1" ;
/*********** end of file ***********/ /*********** end of file ***********/
...@@ -36,7 +36,7 @@ ...@@ -36,7 +36,7 @@
#ifndef lint #ifndef lint
#ifdef SCCS_LABELS #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
#endif #endif
...@@ -45,11 +45,8 @@ static char *_rio_ltt_h_sccs = "@(#)ltt.h 1.1" ; ...@@ -45,11 +45,8 @@ static char *_rio_ltt_h_sccs = "@(#)ltt.h 1.1" ;
#else #else
#define LTT_STACK (ushort) 200 #define LTT_STACK (ushort) 200
#endif #endif
/*********** end of file ***********/
/*********** end of file ***********/
...@@ -39,7 +39,7 @@ ...@@ -39,7 +39,7 @@
#ifndef lint #ifndef lint
#ifdef SCCS_LABELS #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
#endif #endif
...@@ -48,6 +48,3 @@ static char *_rio_lttwake_h_sccs = "@(#)lttwake.h 1.1" ; ...@@ -48,6 +48,3 @@ static char *_rio_lttwake_h_sccs = "@(#)lttwake.h 1.1" ;
/*********** end of file ***********/ /*********** end of file ***********/
...@@ -46,21 +46,20 @@ static char *_map_h_sccs_ = "@(#)map.h 1.2"; ...@@ -46,21 +46,20 @@ static char *_map_h_sccs_ = "@(#)map.h 1.2";
#define TOTAL_MAP_ENTRIES (MAX_MAP_ENTRY*RIO_SLOTS) #define TOTAL_MAP_ENTRIES (MAX_MAP_ENTRY*RIO_SLOTS)
#define MAX_NAME_LEN 32 #define MAX_NAME_LEN 32
struct Map struct Map {
{ uint HostUniqueNum; /* Supporting hosts unique number */
uint HostUniqueNum; /* Supporting hosts unique number */ uint RtaUniqueNum; /* Unique number */
uint RtaUniqueNum; /* Unique number */
/* /*
** The next two IDs must be swapped on big-endian architectures ** 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 ** when using a v2.04 /etc/rio/config with a v3.00 driver (when
** upgrading for example). ** upgrading for example).
*/ */
ushort ID; /* ID used in the subnet */ ushort ID; /* ID used in the subnet */
ushort ID2; /* ID of 2nd block of 8 for 16 port */ ushort ID2; /* ID of 2nd block of 8 for 16 port */
ulong Flags; /* Booted, ID Given, Disconnected */ ulong Flags; /* Booted, ID Given, Disconnected */
ulong SysPort; /* First tty mapped to this port */ ulong SysPort; /* First tty mapped to this port */
struct Top Topology[LINKS_PER_UNIT]; /* ID connected to each link */ struct Top Topology[LINKS_PER_UNIT]; /* ID connected to each link */
char Name[MAX_NAME_LEN]; /* Cute name by which RTA is known */ char Name[MAX_NAME_LEN]; /* Cute name by which RTA is known */
}; };
/* /*
......
...@@ -70,4 +70,4 @@ static char *_mca_h_sccs_ = "@(#)mca.h 1.2"; ...@@ -70,4 +70,4 @@ static char *_mca_h_sccs_ = "@(#)mca.h 1.2";
#define RIO_MCA_DEFAULT_MODE SLOW_LINKS #define RIO_MCA_DEFAULT_MODE SLOW_LINKS
#endif /* __rio_mca_h__ */ #endif /* __rio_mca_h__ */
...@@ -38,4 +38,4 @@ static char *_mesg_h_sccs_ = "@(#)mesg.h 1.2"; ...@@ -38,4 +38,4 @@ static char *_mesg_h_sccs_ = "@(#)mesg.h 1.2";
#endif #endif
#endif /* __rio_mesg_h__ */ #endif /* __rio_mesg_h__ */
...@@ -42,20 +42,19 @@ static char *_param_h_sccs_ = "@(#)param.h 1.2"; ...@@ -42,20 +42,19 @@ static char *_param_h_sccs_ = "@(#)param.h 1.2";
** the param command block, as used in OPEN and PARAM calls. ** the param command block, as used in OPEN and PARAM calls.
*/ */
struct phb_param struct phb_param {
{ BYTE Cmd; /* It is very important that these line up */
BYTE Cmd; /* It is very important that these line up */ BYTE Cor1; /* with what is expected at the other end. */
BYTE Cor1; /* with what is expected at the other end. */ BYTE Cor2; /* to confirm that you've got it right, */
BYTE Cor2; /* to confirm that you've got it right, */ BYTE Cor4; /* check with cirrus/cirrus.h */
BYTE Cor4; /* check with cirrus/cirrus.h */ BYTE Cor5;
BYTE Cor5; BYTE TxXon; /* Transmit X-On character */
BYTE TxXon; /* Transmit X-On character */ BYTE TxXoff; /* Transmit X-Off character */
BYTE TxXoff; /* Transmit X-Off character */ BYTE RxXon; /* Receive X-On character */
BYTE RxXon; /* Receive X-On character */ BYTE RxXoff; /* Receive X-Off character */
BYTE RxXoff; /* Receive X-Off character */ BYTE LNext; /* Literal-next character */
BYTE LNext; /* Literal-next character */ BYTE TxBaud; /* Transmit baudrate */
BYTE TxBaud; /* Transmit baudrate */ BYTE RxBaud; /* Receive baudrate */
BYTE RxBaud; /* Receive baudrate */
}; };
#endif #endif
...@@ -44,53 +44,50 @@ ...@@ -44,53 +44,50 @@
#endif #endif
#endif #endif
typedef struct PARM_MAP PARM_MAP ; typedef struct PARM_MAP PARM_MAP;
struct PARM_MAP struct PARM_MAP {
{ PHB_ptr phb_ptr; /* Pointer to the PHB array */
PHB_ptr phb_ptr ; /* Pointer to the PHB array */ WORD_ptr phb_num_ptr; /* Ptr to Number of PHB's */
WORD_ptr phb_num_ptr ; /* Ptr to Number of PHB's */ FREE_LIST_ptr free_list; /* Free List pointer */
FREE_LIST_ptr free_list; /* Free List pointer */ FREE_LIST_ptr free_list_end; /* Free List End pointer */
FREE_LIST_ptr free_list_end; /* Free List End pointer */ Q_BUF_ptr_ptr q_free_list_ptr; /* Ptr to Q_BUF variable */
Q_BUF_ptr_ptr q_free_list_ptr ; /* Ptr to Q_BUF variable */ BYTE_ptr unit_id_ptr; /* Unit Id */
BYTE_ptr unit_id_ptr ; /* Unit Id */ LPB_ptr link_str_ptr; /* Link Structure Array */
LPB_ptr link_str_ptr ; /* Link Structure Array */ BYTE_ptr bootloader_1; /* 1st Stage Boot Loader */
BYTE_ptr bootloader_1 ; /* 1st Stage Boot Loader */ BYTE_ptr bootloader_2; /* 2nd Stage Boot Loader */
BYTE_ptr bootloader_2 ; /* 2nd Stage Boot Loader */ WORD_ptr port_route_map_ptr; /* Port Route Map */
WORD_ptr port_route_map_ptr ; /* Port Route Map */ ROUTE_STR_ptr route_ptr; /* Unit Route Map */
ROUTE_STR_ptr route_ptr ; /* Unit Route Map */ NUMBER_ptr map_present; /* Route Map present */
NUMBER_ptr map_present ; /* Route Map present */ NUMBER pkt_num; /* Total number of packets */
NUMBER pkt_num ; /* Total number of packets */ NUMBER q_num; /* Total number of Q packets */
NUMBER q_num ; /* Total number of Q packets */ WORD buffers_per_port; /* Number of buffers per port */
WORD buffers_per_port ; /* Number of buffers per port */ WORD heap_size; /* Initial size of heap */
WORD heap_size ; /* Initial size of heap */ WORD heap_left; /* Current Heap left */
WORD heap_left ; /* Current Heap left */ WORD error; /* Error code */
WORD error ; /* Error code */ WORD tx_max; /* Max number of tx pkts per phb */
WORD tx_max; /* Max number of tx pkts per phb */ WORD rx_max; /* Max number of rx pkts per phb */
WORD rx_max; /* Max number of rx pkts per phb */ WORD rx_limit; /* For high / low watermarks */
WORD rx_limit; /* For high / low watermarks */ NUMBER links; /* Links to use */
NUMBER links ; /* Links to use */ NUMBER timer; /* Interrupts per second */
NUMBER timer ; /* Interrupts per second */ RUP_ptr rups; /* Pointer to the RUPs */
RUP_ptr rups ; /* Pointer to the RUPs */ WORD max_phb; /* Mostly for debugging */
WORD max_phb ; /* Mostly for debugging */ WORD living; /* Just increments!! */
WORD living ; /* Just increments!! */ WORD init_done; /* Initialisation over */
WORD init_done ; /* Initialisation over */ WORD booting_link;
WORD booting_link ; WORD idle_count; /* Idle time counter */
WORD idle_count ; /* Idle time counter */ WORD busy_count; /* Busy counter */
WORD busy_count ; /* Busy counter */ WORD idle_control; /* Control Idle Process */
WORD idle_control ; /* Control Idle Process */
#if defined(HOST) || defined(INKERNEL) #if defined(HOST) || defined(INKERNEL)
WORD tx_intr; /* TX interrupt pending */ WORD tx_intr; /* TX interrupt pending */
WORD rx_intr; /* RX interrupt pending */ WORD rx_intr; /* RX interrupt pending */
WORD rup_intr; /* RUP interrupt pending */ WORD rup_intr; /* RUP interrupt pending */
#endif #endif
#if defined(RTA) #if defined(RTA)
WORD dying_count; /* Count of processes dead */ WORD dying_count; /* Count of processes dead */
#endif #endif
} ; };
#endif #endif
/*********** end of file ***********/ /*********** end of file ***********/
...@@ -73,4 +73,4 @@ static char *_pci_h_sccs_ = "@(#)pci.h 1.2"; ...@@ -73,4 +73,4 @@ static char *_pci_h_sccs_ = "@(#)pci.h 1.2";
#define RIO_PCI_DEFAULT_MODE 0x05 #define RIO_PCI_DEFAULT_MODE 0x05
#endif /* __rio_pci_h__ */ #endif /* __rio_pci_h__ */
This diff is collapsed.
...@@ -69,52 +69,44 @@ ...@@ -69,52 +69,44 @@
#define CONTROL_PKT_TTL_MASK (PKT_TTL_MASK << 8) #define CONTROL_PKT_TTL_MASK (PKT_TTL_MASK << 8)
#define CONTROL_DATA_WNDW (DATA_WNDW << 8) #define CONTROL_DATA_WNDW (DATA_WNDW << 8)
struct PKT { struct PKT {
#ifdef INKERNEL #ifdef INKERNEL
BYTE dest_unit ; /* Destination Unit Id */ BYTE dest_unit; /* Destination Unit Id */
BYTE dest_port ; /* Destination POrt */ BYTE dest_port; /* Destination POrt */
BYTE src_unit ; /* Source Unit Id */ BYTE src_unit; /* Source Unit Id */
BYTE src_port ; /* Source POrt */ BYTE src_port; /* Source POrt */
#else #else
union union {
{ ushort destination; /* Complete destination */
ushort destination; /* Complete destination */ struct {
struct unsigned char unit; /* Destination unit */
{ unsigned char port; /* Destination port */
unsigned char unit; /* Destination unit */ } s1;
unsigned char port; /* Destination port */ } u1;
} s1; union {
} u1; ushort source; /* Complete source */
union struct {
{ unsigned char unit; /* Source unit */
ushort source; /* Complete source */ unsigned char port; /* Source port */
struct } s2;
{ } u2;
unsigned char unit; /* Source unit */
unsigned char port; /* Source port */
} s2;
} u2;
#endif #endif
#ifdef INKERNEL #ifdef INKERNEL
BYTE len ; BYTE len;
BYTE control; BYTE control;
#else #else
union union {
{ ushort control;
ushort control; struct {
struct unsigned char len;
{ unsigned char control;
unsigned char len; } s3;
unsigned char control; } u3;
} s3;
} u3;
#endif #endif
BYTE data[PKT_MAX_DATA_LEN] ; BYTE data[PKT_MAX_DATA_LEN];
/* Actual data :-) */ /* Actual data :-) */
WORD csum ; /* C-SUM */ WORD csum; /* C-SUM */
} ; };
#endif #endif
/*********** end of file ***********/ /*********** end of file ***********/
...@@ -39,7 +39,7 @@ ...@@ -39,7 +39,7 @@
#ifndef lint #ifndef lint
#ifdef SCCS_LABELS #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
#endif #endif
...@@ -54,23 +54,20 @@ static char *_rio_poll_h_sccs = "@(#)poll.h 1.2" ; ...@@ -54,23 +54,20 @@ static char *_rio_poll_h_sccs = "@(#)poll.h 1.2" ;
#define POLL_PERIOD (int) SECOND #define POLL_PERIOD (int) SECOND
/* The various poll commands */ /* The various poll commands */
#define POLL_POLL 0 /* We are connected and happy.. */ #define POLL_POLL 0 /* We are connected and happy.. */
#define POLL_INTRO 1 /* Introduction packet */ #define POLL_INTRO 1 /* Introduction packet */
#define POLL_TOPOLOGY 2 /* Topology update */ #define POLL_TOPOLOGY 2 /* Topology update */
#define POLL_ASSIGN 3 /* ID assign */ #define POLL_ASSIGN 3 /* ID assign */
#define POLL_FOAD 4 /* F*** Off And Die */ #define POLL_FOAD 4 /* F*** Off And Die */
#define POLL_LMD 5 /* Let Me Die */ #define POLL_LMD 5 /* Let Me Die */
#define POLL_DYB 6 /* Die You Ba***** */ #define POLL_DYB 6 /* Die You Ba***** */
/* The way data fields are split up for POLL packets */ /* The way data fields are split up for POLL packets */
#define POLL_HOST_SERIAL 2 /* Host who booted me */ #define POLL_HOST_SERIAL 2 /* Host who booted me */
#define POLL_MY_SERIAL 6 /* My serial number */ #define POLL_MY_SERIAL 6 /* My serial number */
#define POLL_YOUR_ID 1 /* Your ID number */ #define POLL_YOUR_ID 1 /* Your ID number */
#define POLL_TOPOLOGY_FIELDS 2 /* Topology maps */ #define POLL_TOPOLOGY_FIELDS 2 /* Topology maps */
#endif #endif
/*********** end of file ***********/ /*********** end of file ***********/
This diff is collapsed.
...@@ -23,15 +23,15 @@ ...@@ -23,15 +23,15 @@
/* /*
** boot.c ** boot.c
*/ */
void init_boot( char *p, short stage); void init_boot(char *p, short stage);
/* /*
** disconct.c ** disconct.c
*/ */
void kill_boot ( LPB *link ); void kill_boot(LPB * link);
void disconnected( LPB *link ); void disconnected(LPB * link);
short boot_3( LPB *link, PKT *pkt ); short boot_3(LPB * link, PKT * pkt);
short send_3_pkt( LPB *link, PKT *pkt); short send_3_pkt(LPB * link, PKT * pkt);
/* /*
** error.c ** error.c
...@@ -41,116 +41,116 @@ void du_error(void); ...@@ -41,116 +41,116 @@ void du_error(void);
/* /*
** formpkt.c ** formpkt.c
*/ */
ushort sum_it( PKT *pkt ) ; ushort sum_it(PKT * pkt);
void form_rup_pkt( RUP *form_rup, PKT *pkt ); void form_rup_pkt(RUP * form_rup, PKT * pkt);
void form_poll_pkt ( int type, LPB *link, int node ); void form_poll_pkt(int type, LPB * link, int node);
void form_route_pkt ( int type, PKT *pkt, LPB *link ); void form_route_pkt(int type, PKT * pkt, LPB * link);
/* /*
** idle.c ** idle.c
*/ */
void idle( Process *idle_p ); void idle(Process * idle_p);
/* /*
** init.c ** init.c
*/ */
void general_init(void); void general_init(void);
void mem_halt( int error); void mem_halt(int error);
/* /*
** linkinit.c ** linkinit.c
*/ */
void initlink( u_short number, LPB *link); void initlink(u_short number, LPB * link);
void runlink( LPB *link); void runlink(LPB * link);
/* /*
** list.c ** list.c
*/ */
PKT *get_free_start(void); PKT *get_free_start(void);
void put_free_start( PKT *pkt); void put_free_start(PKT * pkt);
#ifdef HOST #ifdef HOST
int can_remove_transmit ( PKT **pkt, PKT *pointer ); int can_remove_transmit(PKT ** pkt, PKT * pointer);
#endif #endif
#ifdef RTA #ifdef RTA
int spl7 ( void ); int spl7(void);
int spl0 ( void ); int spl0(void);
Q_BUF *get_free_q( void ); Q_BUF *get_free_q(void);
PKT *get_free_end(void); PKT *get_free_end(void);
int add_end( PKT *pkt, PHB *phb, int type); int add_end(PKT * pkt, PHB * phb, int type);
unsigned short free_packets( PHB *phb, int type); unsigned short free_packets(PHB * phb, int type);
int can_remove_start( PKT **pkt, 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_start(PHB * phb, int type);
int can_add_end( PHB *phb, int type); int can_add_end(PHB * phb, int type);
void put_free_end( PKT *pkt); void put_free_end(PKT * pkt);
int remove_start( PKT **pkt, PHB *phb, int type); int remove_start(PKT ** pkt, PHB * phb, int type);
#endif #endif
/* /*
** Lrt.c ** Lrt.c
*/ */
void lrt( Process *lrt_p, LPB *link ); void lrt(Process * lrt_p, LPB * link);
#ifdef RTA #ifdef RTA
void set_led_red ( LPB *link ); void set_led_red(LPB * link);
#endif #endif
/* /*
** ltt.c ** ltt.c
*/ */
void ltt( Process *ltt_p, LPB *link, PHB *phb_ptr[] ); void ltt(Process * ltt_p, LPB * link, PHB * phb_ptr[]);
void send_poll ( LPB *link ); void send_poll(LPB * link);
void request_id ( LPB *link ); void request_id(LPB * link);
void send_topology_update ( LPB *link ); void send_topology_update(LPB * link);
void send_topology ( LPB *link ); void send_topology(LPB * link);
void supply_id ( LPB *link ); void supply_id(LPB * link);
#ifdef RTA #ifdef RTA
void redirect_queue ( LPB *link, ushort flush ); void redirect_queue(LPB * link, ushort flush);
int obtain_rup ( int rup_number, PKT **pkt_address, LPB *link ); int obtain_rup(int rup_number, PKT ** pkt_address, LPB * link);
#endif #endif
#ifdef TESTING_PERF #ifdef TESTING_PERF
int consume_cpu( void ); int consume_cpu(void);
#endif #endif
/* /*
** lttwake.c ** lttwake.c
*/ */
#ifdef HOST #ifdef HOST
void ltt_wakeup( Process *ltt_wakeup_p ); void ltt_wakeup(Process * ltt_wakeup_p);
#endif #endif
/* /*
** mapgen.c ** mapgen.c
*/ */
void generate_id_map( short mapping, ROUTE_STR route[] ); 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 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 adjust_ttl(int mapping, int looking_at, int come_from, ROUTE_STR route[], int link, int *ttl);
void init_sys_map(void); void init_sys_map(void);
/* /*
** mmu.c ** mmu.c
*/ */
char *rio_malloc( unsigned int amount); char *rio_malloc(unsigned int amount);
char *rio_calloc( unsigned int num, unsigned int size); char *rio_calloc(unsigned int num, unsigned int size);
ERROR rio_mmu_init( uint total_mem ); ERROR rio_mmu_init(uint total_mem);
/* /*
** partn.c ** 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 ** poll.c
*/ */
void tx_poll( Process *tx_poll_p); void tx_poll(Process * tx_poll_p);
/* /*
** process.c ** process.c
*/ */
int get_proc_space( Process **pd, int **pws, int wssize); int get_proc_space(Process ** pd, int **pws, int wssize);
/* /*
** readrom.c ** readrom.c
...@@ -160,85 +160,85 @@ void read_serial_number(char *buf); ...@@ -160,85 +160,85 @@ void read_serial_number(char *buf);
/* /*
** rio.c ** rio.c
*/ */
int main( void ); int main(void);
/* /*
** route.c ** route.c
*/ */
void route_update ( PKT *pkt, LPB *link); void route_update(PKT * pkt, LPB * link);
/* /*
** rtainit.c ** rtainit.c
*/ */
#if defined(RTA) #if defined(RTA)
void rta_init(ushort RtaType); void rta_init(ushort RtaType);
#endif /* defined(RTA) */ #endif /* defined(RTA) */
/* /*
** rupboot.c ** rupboot.c
*/ */
void rup_boot( PKT *pkt, RUP *this_rup, LPB *link); void rup_boot(PKT * pkt, RUP * this_rup, LPB * link);
#ifdef RTA #ifdef RTA
void kill_your_neighbour( int link_to_kill ); void kill_your_neighbour(int link_to_kill);
#endif #endif
/* /*
** rupcmd.c ** 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 ** ruperr.c
*/ */
void rup_error( PKT *pkt, RUP *this_rup, LPB *link ); void rup_error(PKT * pkt, RUP * this_rup, LPB * link);
void illegal_cmd( PKT *src_pkt ); void illegal_cmd(PKT * src_pkt);
/* /*
** ruppoll.c ** ruppoll.c
*/ */
void rup_poll( PKT *pkt, RUP *this_rup, LPB *link ); void rup_poll(PKT * pkt, RUP * this_rup, LPB * link);
/* /*
** ruppower.c ** ruppower.c
*/ */
void rup_power( PKT *pkt, RUP *this_rup, LPB *link ); void rup_power(PKT * pkt, RUP * this_rup, LPB * link);
/* /*
** ruprm.c ** 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 ** rupstat.c
*/ */
void rup_status( PKT *pkt, RUP *this_rup, LPB *link); void rup_status(PKT * pkt, RUP * this_rup, LPB * link);
/* /*
** rupsync.c ** rupsync.c
*/ */
void rup_sync( PKT *pkt); void rup_sync(PKT * pkt);
/* /*
** rxpkt.c ** rxpkt.c
*/ */
ERROR rx_pkt( PKT_ptr_ptr pkt_address, LPB *link); ERROR rx_pkt(PKT_ptr_ptr pkt_address, LPB * link);
/* /*
** sendsts.c ** sendsts.c
*/ */
void send_status( PKT *requesting_pkt, RUP *this_rup); void send_status(PKT * requesting_pkt, RUP * this_rup);
/* /*
** serial.c ** serial.c
*/ */
void assign_serial ( char *ser_in, char *ser_out); void assign_serial(char *ser_in, char *ser_out);
int cmp_serial ( char *ser_1, char *ser_2); int cmp_serial(char *ser_1, char *ser_2);
/* /*
** txpkt.c ** txpkt.c
*/ */
ERROR tx_pkt( PKT *pkt, LPB *link); ERROR tx_pkt(PKT * pkt, LPB * link);
short send_sync( LPB *link); short send_sync(LPB * link);
#endif /* _prototypes_h */ #endif /* _prototypes_h */
...@@ -115,5 +115,3 @@ ...@@ -115,5 +115,3 @@
#endif #endif
/*********** end of file ***********/ /*********** end of file ***********/
...@@ -40,7 +40,7 @@ ...@@ -40,7 +40,7 @@
#ifndef lint #ifndef lint
#ifdef SCCS_LABELS #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
#endif #endif
...@@ -52,16 +52,15 @@ static char *_rio_qbuf_h_sccs = "@(#)qbuf.h 1.1" ; ...@@ -52,16 +52,15 @@ static char *_rio_qbuf_h_sccs = "@(#)qbuf.h 1.1" ;
#define PKTS_PER_BUFFER (220 / PKT_LENGTH) #define PKTS_PER_BUFFER (220 / PKT_LENGTH)
#endif #endif
typedef struct Q_BUF Q_BUF ; typedef struct Q_BUF Q_BUF;
struct Q_BUF { struct Q_BUF {
Q_BUF_ptr next ; Q_BUF_ptr next;
Q_BUF_ptr prev ; Q_BUF_ptr prev;
PKT_ptr buf[PKTS_PER_BUFFER] ; PKT_ptr buf[PKTS_PER_BUFFER];
} ; };
#endif #endif
/*********** end of file ***********/ /*********** end of file ***********/
...@@ -72,8 +72,8 @@ static char *_rio_h_sccs_ = "@(#)rio.h 1.3"; ...@@ -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 RIO_HOSTS 4 /* number of hosts that can be found */
#define PORTS_PER_HOST 128 /* number of ports per host */ #define PORTS_PER_HOST 128 /* number of ports per host */
#define LINKS_PER_UNIT 4 /* number of links from a 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 RIO_PORTS (PORTS_PER_HOST * RIO_HOSTS) /* max. no. of ports */
#define RTAS_PER_HOST (MAX_RUP) /* number of RTAs per host */ #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_RTA (PORTS_PER_HOST/RTAS_PER_HOST) /* ports on a rta */
#define PORTS_PER_MODULE 4 /* number of ports on a plug-in module */ #define PORTS_PER_MODULE 4 /* number of ports on a plug-in module */
/* number of modules on an RTA */ /* number of modules on an RTA */
...@@ -216,10 +216,9 @@ static char *_rio_h_sccs_ = "@(#)rio.h 1.3"; ...@@ -216,10 +216,9 @@ static char *_rio_h_sccs_ = "@(#)rio.h 1.3";
#define RIO_PRI (PZERO+10) #define RIO_PRI (PZERO+10)
#define RIO_CLOSE_PRI PZERO-1 /* uninterruptible sleeps for close */ #define RIO_CLOSE_PRI PZERO-1 /* uninterruptible sleeps for close */
typedef struct DbInf typedef struct DbInf {
{ uint Flag;
uint Flag; char Name[8];
char Name[8];
} DbInf; } DbInf;
#ifndef TRUE #ifndef TRUE
...@@ -251,7 +250,7 @@ typedef struct DbInf ...@@ -251,7 +250,7 @@ typedef struct DbInf
*((uint *)PK) = PP->PacketInfo; \ *((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. */ /* prevent a really stupid race condition. */
#define NOT_INITIALISED 0 #define NOT_INITIALISED 0
...@@ -291,4 +290,4 @@ typedef struct DbInf ...@@ -291,4 +290,4 @@ typedef struct DbInf
#define DIST_LINESW_OUTPUT 0x40 #define DIST_LINESW_OUTPUT 0x40
#define DIST_LINESW_MDMINT 0x80 #define DIST_LINESW_MDMINT 0x80
#endif /* __rio_h__ */ #endif /* __rio_h__ */
This diff is collapsed.
...@@ -37,15 +37,15 @@ ...@@ -37,15 +37,15 @@
struct vpd_prom { struct vpd_prom {
unsigned short id; unsigned short id;
char hwrev; char hwrev;
char hwass; char hwass;
int uniqid; int uniqid;
char myear; char myear;
char mweek; char mweek;
char hw_feature[5]; char hw_feature[5];
char oem_id; char oem_id;
char identifier[16]; char identifier[16];
}; };
...@@ -75,13 +75,13 @@ struct vpd_prom { ...@@ -75,13 +75,13 @@ struct vpd_prom {
(L_ISIG(tty))) (L_ISIG(tty)))
#endif /* __KERNEL__ */ #endif /* __KERNEL__ */
#define RIO_BOARD_INTR_LOCK 1 #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 */ /* Allow others to gather this into "major.h" or something like that */
#define RIOCTL_MISC_MINOR 169 #define RIOCTL_MISC_MINOR 169
#endif #endif
...@@ -121,39 +121,39 @@ struct vpd_prom { ...@@ -121,39 +121,39 @@ struct vpd_prom {
spin_unlock_irqrestore(sem, flags) spin_unlock_irqrestore(sem, flags)
#define rio_spin_lock(sem) \ #define rio_spin_lock(sem) \
spin_lock(sem) spin_lock(sem)
#define rio_spin_unlock(sem) \ #define rio_spin_unlock(sem) \
spin_unlock(sem) spin_unlock(sem)
#endif #endif
#ifdef CONFIG_RIO_OLDPCI #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 *dst = dest;
char *src = source; char *src = source;
while (n--) { while (n--) {
writeb (*src++, dst++); writeb(*src++, dst++);
(void) readb (dummy); (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 *dst = dest;
char *src = source; char *src = source;
while (n--) while (n--)
*dst++ = readb (src++); *dst++ = readb(src++);
return dest; return dest;
} }
#else #else
...@@ -179,9 +179,8 @@ static inline void *rio_memcpy_fromio (void *dest, void *source, int n) ...@@ -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_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) #define func_enter2() rio_dprintk (RIO_DEBUG_FLOW, "rio: enter %s (port %d)\n",__FUNCTION__, port->line)
#else #else
#define rio_dprintk(f, str...) /* nothing */ #define rio_dprintk(f, str...) /* nothing */
#define func_enter() #define func_enter()
#define func_exit() #define func_exit()
#define func_enter2() #define func_enter2()
#endif #endif
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment