/* ** ----------------------------------------------------------------------------- ** ** Perle Specialix driver for Linux ** Ported from existing RIO Driver for SCO sources. * * (C) 1990 - 2000 Specialix International Ltd., Byfleet, Surrey, UK. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. ** ** Module : cmdpkt.h ** SID : 1.2 ** Last Modified : 11/6/98 11:34:09 ** Retrieved : 11/6/98 11:34:20 ** ** ident @(#)cmdpkt.h 1.2 ** ** ----------------------------------------------------------------------------- */ #ifndef __rio_cmdpkt_h__ #define __rio_cmdpkt_h__ #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) ** and is very inconvenient for MIPS, so they appear as two separate ** structures - those used for modifying/reading packets on the card ** and those for modifying/reading packets in real memory, which have an _M ** suffix. */ #define RTA_BOOT_DATA_SIZE (PKT_MAX_DATA_LEN-2) /* ** The boot information packet looks like this: ** This structure overlays a PktCmd->CmdData structure, and so starts ** at Data[2] in the actual pkt! */ struct BootSequence { u16 NumPackets; u16 LoadBase; u16 CodeSize; }; #define BOOT_SEQUENCE_LEN 8 struct SamTop { u8 Unit; u8 Link; }; struct CmdHdr { u8 PcCommand; union { u8 PcPhbNum; u8 PcLinkNum; u8 PcIDNum; } U0; }; struct PktCmd { union { struct { struct CmdHdr CmdHdr; struct BootSequence PcBootSequence; } S1; struct { u16 PcSequence; u8 PcBootData[RTA_BOOT_DATA_SIZE]; } S2; struct { u16 __crud__; u8 PcUniqNum[4]; /* this is really a uint. */ u8 PcModuleTypes; /* what modules are fitted */ } S3; struct { struct CmdHdr CmdHdr; u8 __undefined__; u8 PcModemStatus; u8 PcPortStatus; u8 PcSubCommand; /* commands like mem or register dump */ u16 PcSubAddr; /* Address for command */ u8 PcSubData[64]; /* Date area for command */ } S4; struct { struct CmdHdr CmdHdr; u8 PcCommandText[1]; u8 __crud__[20]; u8 PcIDNum2; /* It had to go somewhere! */ } S5; struct { struct CmdHdr CmdHdr; struct SamTop Topology[LINKS_PER_UNIT]; } S6; } U1; }; struct PktCmd_M { union { struct { struct { u8 PcCommand; union { u8 PcPhbNum; u8 PcLinkNum; u8 PcIDNum; } U0; } CmdHdr; struct { u16 NumPackets; u16 LoadBase; u16 CodeSize; } PcBootSequence; } S1; struct { u16 PcSequence; u8 PcBootData[RTA_BOOT_DATA_SIZE]; } S2; struct { u16 __crud__; u8 PcUniqNum[4]; /* this is really a uint. */ u8 PcModuleTypes; /* what modules are fitted */ } S3; struct { u16 __cmd_hdr__; u8 __undefined__; u8 PcModemStatus; u8 PcPortStatus; u8 PcSubCommand; u16 PcSubAddr; u8 PcSubData[64]; } S4; struct { u16 __cmd_hdr__; u8 PcCommandText[1]; u8 __crud__[20]; u8 PcIDNum2; /* Tacked on end */ } S5; struct { u16 __cmd_hdr__; struct Top Topology[LINKS_PER_UNIT]; } S6; } U1; }; #define Command U1.S1.CmdHdr.PcCommand #define PhbNum U1.S1.CmdHdr.U0.PcPhbNum #define IDNum U1.S1.CmdHdr.U0.PcIDNum #define IDNum2 U1.S5.PcIDNum2 #define LinkNum U1.S1.CmdHdr.U0.PcLinkNum #define Sequence U1.S2.PcSequence #define BootData U1.S2.PcBootData #define BootSequence U1.S1.PcBootSequence #define UniqNum U1.S3.PcUniqNum #define ModemStatus U1.S4.PcModemStatus #define PortStatus U1.S4.PcPortStatus #define SubCommand U1.S4.PcSubCommand #define SubAddr U1.S4.PcSubAddr #define SubData U1.S4.PcSubData #define CommandText U1.S5.PcCommandText #define RouteTopology U1.S6.Topology #define ModuleTypes U1.S3.PcModuleTypes #endif