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 37 static 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 seperate 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 */ 57 struct BootSequence 58 { 59 WORD NumPackets; 60 WORD LoadBase; 61 WORD CodeSize; 62 }; 63 64 #define BOOT_SEQUENCE_LEN 8 65 66 struct SamTop 67 { 68 BYTE Unit; 69 BYTE Link; 70 }; 71 72 struct CmdHdr 73 { 74 BYTE PcCommand; 75 union 76 { 77 BYTE PcPhbNum; 78 BYTE PcLinkNum; 79 BYTE PcIDNum; 80 } U0; 81 }; 82 83 84 struct PktCmd 85 { 86 union 87 { 88 struct 89 { 90 struct CmdHdr CmdHdr; 91 struct BootSequence PcBootSequence; 92 } S1; 93 struct 94 { 95 WORD PcSequence; 96 BYTE PcBootData[RTA_BOOT_DATA_SIZE]; 97 } S2; 98 struct 99 { 100 WORD __crud__; 101 BYTE PcUniqNum[4]; /* this is really a uint. */ 102 BYTE PcModuleTypes; /* what modules are fitted */ 103 } S3; 104 struct 105 { 106 struct CmdHdr CmdHdr; 107 BYTE __undefined__; 108 BYTE PcModemStatus; 109 BYTE PcPortStatus; 110 BYTE PcSubCommand; /* commands like mem or register dump */ 111 WORD PcSubAddr; /* Address for command */ 112 BYTE PcSubData[64]; /* Date area for command */ 113 } S4; 114 struct 115 { 116 struct CmdHdr CmdHdr; 117 BYTE PcCommandText[1]; 118 BYTE __crud__[20]; 119 BYTE PcIDNum2; /* It had to go somewhere! */ 120 } S5; 121 struct 122 { 123 struct CmdHdr CmdHdr; 124 struct SamTop Topology[LINKS_PER_UNIT]; 125 } S6; 126 } U1; 127 }; 128 129 struct PktCmd_M 130 { 131 union 132 { 133 struct 134 { 135 struct 136 { 137 uchar PcCommand; 138 union 139 { 140 uchar PcPhbNum; 141 uchar PcLinkNum; 142 uchar PcIDNum; 143 } U0; 144 } CmdHdr; 145 struct 146 { 147 ushort NumPackets; 148 ushort LoadBase; 149 ushort CodeSize; 150 } PcBootSequence; 151 } S1; 152 struct 153 { 154 ushort PcSequence; 155 uchar PcBootData[RTA_BOOT_DATA_SIZE]; 156 } S2; 157 struct 158 { 159 ushort __crud__; 160 uchar PcUniqNum[4]; /* this is really a uint. */ 161 uchar PcModuleTypes; /* what modules are fitted */ 162 } S3; 163 struct 164 { 165 ushort __cmd_hdr__; 166 uchar __undefined__; 167 uchar PcModemStatus; 168 uchar PcPortStatus; 169 uchar PcSubCommand; 170 ushort PcSubAddr; 171 uchar PcSubData[64]; 172 } S4; 173 struct 174 { 175 ushort __cmd_hdr__; 176 uchar PcCommandText[1]; 177 uchar __crud__[20]; 178 uchar PcIDNum2; /* Tacked on end */ 179 } S5; 180 struct 181 { 182 ushort __cmd_hdr__; 183 struct Top Topology[LINKS_PER_UNIT]; 184 } S6; 185 } U1; 186 }; 187 188 #define Command U1.S1.CmdHdr.PcCommand 189 #define PhbNum U1.S1.CmdHdr.U0.PcPhbNum 190 #define IDNum U1.S1.CmdHdr.U0.PcIDNum 191 #define IDNum2 U1.S5.PcIDNum2 192 #define LinkNum U1.S1.CmdHdr.U0.PcLinkNum 193 #define Sequence U1.S2.PcSequence 194 #define BootData U1.S2.PcBootData 195 #define BootSequence U1.S1.PcBootSequence 196 #define UniqNum U1.S3.PcUniqNum 197 #define ModemStatus U1.S4.PcModemStatus 198 #define PortStatus U1.S4.PcPortStatus 199 #define SubCommand U1.S4.PcSubCommand 200 #define SubAddr U1.S4.PcSubAddr 201 #define SubData U1.S4.PcSubData 202 #define CommandText U1.S5.PcCommandText 203 #define RouteTopology U1.S6.Topology 204 #define ModuleTypes U1.S3.PcModuleTypes 205 206 #endif 207