| /* | |
| ** ----------------------------------------------------------------------------- | |
| ** | |
| ** 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 |