1/* 2** ----------------------------------------------------------------------------- 3** 4** Perle Specialix driver for Linux 5** Ported from existing RIO Driver for SCO sources. 6 * 7 * (C) 1990 - 2000 Specialix International Ltd., Byfleet, Surrey, UK. 8 * 9 * This program is free software; you can redistribute it and/or modify 10 * it under the terms of the GNU General Public License as published by 11 * the Free Software Foundation; either version 2 of the License, or 12 * (at your option) any later version. 13 * 14 * This program is distributed in the hope that it will be useful, 15 * but WITHOUT ANY WARRANTY; without even the implied warranty of 16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 17 * GNU General Public License for more details. 18 * 19 * You should have received a copy of the GNU General Public License 20 * along with this program; if not, write to the Free Software 21 * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. 22** 23** Module : cmdpkt.h 24** SID : 1.2 25** Last Modified : 11/6/98 11:34:09 26** Retrieved : 11/6/98 11:34:20 27** 28** ident @(#)cmdpkt.h 1.2 29** 30** ----------------------------------------------------------------------------- 31*/ 32#ifndef __rio_cmdpkt_h__ 33#define __rio_cmdpkt_h__ 34 35#ifdef SCCS_LABELS 36#ifndef lint 37static char *_cmdpkt_h_sccs_ = "@(#)cmdpkt.h 1.2"; 38#endif 39#endif 40 41/* 42** overlays for the data area of a packet. Used in both directions 43** (to build a packet to send, and to interpret a packet that arrives) 44** and is very inconvenient for MIPS, so they appear as two separate 45** structures - those used for modifying/reading packets on the card 46** and those for modifying/reading packets in real memory, which have an _M 47** suffix. 48*/ 49 50#define RTA_BOOT_DATA_SIZE (PKT_MAX_DATA_LEN-2) 51 52/* 53** The boot information packet looks like this: 54** This structure overlays a PktCmd->CmdData structure, and so starts 55** at Data[2] in the actual pkt! 56*/ 57struct BootSequence { 58 u16 NumPackets; 59 u16 LoadBase; 60 u16 CodeSize; 61}; 62 63#define BOOT_SEQUENCE_LEN 8 64 65struct SamTop { 66 u8 Unit; 67 u8 Link; 68}; 69 70struct CmdHdr { 71 u8 PcCommand; 72 union { 73 u8 PcPhbNum; 74 u8 PcLinkNum; 75 u8 PcIDNum; 76 } U0; 77}; 78 79 80struct PktCmd { 81 union { 82 struct { 83 struct CmdHdr CmdHdr; 84 struct BootSequence PcBootSequence; 85 } S1; 86 struct { 87 u16 PcSequence; 88 u8 PcBootData[RTA_BOOT_DATA_SIZE]; 89 } S2; 90 struct { 91 u16 __crud__; 92 u8 PcUniqNum[4]; /* this is really a uint. */ 93 u8 PcModuleTypes; /* what modules are fitted */ 94 } S3; 95 struct { 96 struct CmdHdr CmdHdr; 97 u8 __undefined__; 98 u8 PcModemStatus; 99 u8 PcPortStatus; 100 u8 PcSubCommand; /* commands like mem or register dump */ 101 u16 PcSubAddr; /* Address for command */ 102 u8 PcSubData[64]; /* Date area for command */ 103 } S4; 104 struct { 105 struct CmdHdr CmdHdr; 106 u8 PcCommandText[1]; 107 u8 __crud__[20]; 108 u8 PcIDNum2; /* It had to go somewhere! */ 109 } S5; 110 struct { 111 struct CmdHdr CmdHdr; 112 struct SamTop Topology[LINKS_PER_UNIT]; 113 } S6; 114 } U1; 115}; 116 117struct PktCmd_M { 118 union { 119 struct { 120 struct { 121 u8 PcCommand; 122 union { 123 u8 PcPhbNum; 124 u8 PcLinkNum; 125 u8 PcIDNum; 126 } U0; 127 } CmdHdr; 128 struct { 129 u16 NumPackets; 130 u16 LoadBase; 131 u16 CodeSize; 132 } PcBootSequence; 133 } S1; 134 struct { 135 u16 PcSequence; 136 u8 PcBootData[RTA_BOOT_DATA_SIZE]; 137 } S2; 138 struct { 139 u16 __crud__; 140 u8 PcUniqNum[4]; /* this is really a uint. */ 141 u8 PcModuleTypes; /* what modules are fitted */ 142 } S3; 143 struct { 144 u16 __cmd_hdr__; 145 u8 __undefined__; 146 u8 PcModemStatus; 147 u8 PcPortStatus; 148 u8 PcSubCommand; 149 u16 PcSubAddr; 150 u8 PcSubData[64]; 151 } S4; 152 struct { 153 u16 __cmd_hdr__; 154 u8 PcCommandText[1]; 155 u8 __crud__[20]; 156 u8 PcIDNum2; /* Tacked on end */ 157 } S5; 158 struct { 159 u16 __cmd_hdr__; 160 struct Top Topology[LINKS_PER_UNIT]; 161 } S6; 162 } U1; 163}; 164 165#define Command U1.S1.CmdHdr.PcCommand 166#define PhbNum U1.S1.CmdHdr.U0.PcPhbNum 167#define IDNum U1.S1.CmdHdr.U0.PcIDNum 168#define IDNum2 U1.S5.PcIDNum2 169#define LinkNum U1.S1.CmdHdr.U0.PcLinkNum 170#define Sequence U1.S2.PcSequence 171#define BootData U1.S2.PcBootData 172#define BootSequence U1.S1.PcBootSequence 173#define UniqNum U1.S3.PcUniqNum 174#define ModemStatus U1.S4.PcModemStatus 175#define PortStatus U1.S4.PcPortStatus 176#define SubCommand U1.S4.PcSubCommand 177#define SubAddr U1.S4.PcSubAddr 178#define SubData U1.S4.PcSubData 179#define CommandText U1.S5.PcCommandText 180#define RouteTopology U1.S6.Topology 181#define ModuleTypes U1.S3.PcModuleTypes 182 183#endif 184