Commit | Line | Data |
---|---|---|
1da177e4 LT |
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 | ||
1da177e4 LT |
35 | /* |
36 | ** overlays for the data area of a packet. Used in both directions | |
37 | ** (to build a packet to send, and to interpret a packet that arrives) | |
38 | ** and is very inconvenient for MIPS, so they appear as two separate | |
39 | ** structures - those used for modifying/reading packets on the card | |
40 | ** and those for modifying/reading packets in real memory, which have an _M | |
41 | ** suffix. | |
42 | */ | |
43 | ||
44 | #define RTA_BOOT_DATA_SIZE (PKT_MAX_DATA_LEN-2) | |
45 | ||
46 | /* | |
47 | ** The boot information packet looks like this: | |
48 | ** This structure overlays a PktCmd->CmdData structure, and so starts | |
49 | ** at Data[2] in the actual pkt! | |
50 | */ | |
8d8706e2 | 51 | struct BootSequence { |
74769abf AC |
52 | u16 NumPackets; |
53 | u16 LoadBase; | |
54 | u16 CodeSize; | |
1da177e4 LT |
55 | }; |
56 | ||
57 | #define BOOT_SEQUENCE_LEN 8 | |
58 | ||
8d8706e2 | 59 | struct SamTop { |
74769abf AC |
60 | u8 Unit; |
61 | u8 Link; | |
1da177e4 LT |
62 | }; |
63 | ||
8d8706e2 | 64 | struct CmdHdr { |
74769abf | 65 | u8 PcCommand; |
8d8706e2 | 66 | union { |
74769abf AC |
67 | u8 PcPhbNum; |
68 | u8 PcLinkNum; | |
69 | u8 PcIDNum; | |
8d8706e2 | 70 | } U0; |
1da177e4 LT |
71 | }; |
72 | ||
73 | ||
8d8706e2 AM |
74 | struct PktCmd { |
75 | union { | |
76 | struct { | |
77 | struct CmdHdr CmdHdr; | |
78 | struct BootSequence PcBootSequence; | |
79 | } S1; | |
80 | struct { | |
74769abf AC |
81 | u16 PcSequence; |
82 | u8 PcBootData[RTA_BOOT_DATA_SIZE]; | |
8d8706e2 AM |
83 | } S2; |
84 | struct { | |
74769abf AC |
85 | u16 __crud__; |
86 | u8 PcUniqNum[4]; /* this is really a uint. */ | |
87 | u8 PcModuleTypes; /* what modules are fitted */ | |
8d8706e2 AM |
88 | } S3; |
89 | struct { | |
90 | struct CmdHdr CmdHdr; | |
74769abf AC |
91 | u8 __undefined__; |
92 | u8 PcModemStatus; | |
93 | u8 PcPortStatus; | |
94 | u8 PcSubCommand; /* commands like mem or register dump */ | |
95 | u16 PcSubAddr; /* Address for command */ | |
96 | u8 PcSubData[64]; /* Date area for command */ | |
8d8706e2 AM |
97 | } S4; |
98 | struct { | |
99 | struct CmdHdr CmdHdr; | |
74769abf AC |
100 | u8 PcCommandText[1]; |
101 | u8 __crud__[20]; | |
102 | u8 PcIDNum2; /* It had to go somewhere! */ | |
8d8706e2 AM |
103 | } S5; |
104 | struct { | |
105 | struct CmdHdr CmdHdr; | |
106 | struct SamTop Topology[LINKS_PER_UNIT]; | |
107 | } S6; | |
108 | } U1; | |
1da177e4 LT |
109 | }; |
110 | ||
8d8706e2 AM |
111 | struct PktCmd_M { |
112 | union { | |
113 | struct { | |
114 | struct { | |
27c6e526 | 115 | u8 PcCommand; |
8d8706e2 | 116 | union { |
27c6e526 AC |
117 | u8 PcPhbNum; |
118 | u8 PcLinkNum; | |
119 | u8 PcIDNum; | |
8d8706e2 AM |
120 | } U0; |
121 | } CmdHdr; | |
122 | struct { | |
27c6e526 AC |
123 | u16 NumPackets; |
124 | u16 LoadBase; | |
125 | u16 CodeSize; | |
8d8706e2 AM |
126 | } PcBootSequence; |
127 | } S1; | |
128 | struct { | |
27c6e526 AC |
129 | u16 PcSequence; |
130 | u8 PcBootData[RTA_BOOT_DATA_SIZE]; | |
8d8706e2 AM |
131 | } S2; |
132 | struct { | |
27c6e526 AC |
133 | u16 __crud__; |
134 | u8 PcUniqNum[4]; /* this is really a uint. */ | |
135 | u8 PcModuleTypes; /* what modules are fitted */ | |
8d8706e2 AM |
136 | } S3; |
137 | struct { | |
27c6e526 AC |
138 | u16 __cmd_hdr__; |
139 | u8 __undefined__; | |
140 | u8 PcModemStatus; | |
141 | u8 PcPortStatus; | |
142 | u8 PcSubCommand; | |
143 | u16 PcSubAddr; | |
144 | u8 PcSubData[64]; | |
8d8706e2 AM |
145 | } S4; |
146 | struct { | |
27c6e526 AC |
147 | u16 __cmd_hdr__; |
148 | u8 PcCommandText[1]; | |
149 | u8 __crud__[20]; | |
150 | u8 PcIDNum2; /* Tacked on end */ | |
8d8706e2 AM |
151 | } S5; |
152 | struct { | |
27c6e526 | 153 | u16 __cmd_hdr__; |
8d8706e2 AM |
154 | struct Top Topology[LINKS_PER_UNIT]; |
155 | } S6; | |
156 | } U1; | |
1da177e4 LT |
157 | }; |
158 | ||
159 | #define Command U1.S1.CmdHdr.PcCommand | |
160 | #define PhbNum U1.S1.CmdHdr.U0.PcPhbNum | |
161 | #define IDNum U1.S1.CmdHdr.U0.PcIDNum | |
162 | #define IDNum2 U1.S5.PcIDNum2 | |
163 | #define LinkNum U1.S1.CmdHdr.U0.PcLinkNum | |
164 | #define Sequence U1.S2.PcSequence | |
165 | #define BootData U1.S2.PcBootData | |
166 | #define BootSequence U1.S1.PcBootSequence | |
167 | #define UniqNum U1.S3.PcUniqNum | |
168 | #define ModemStatus U1.S4.PcModemStatus | |
169 | #define PortStatus U1.S4.PcPortStatus | |
170 | #define SubCommand U1.S4.PcSubCommand | |
171 | #define SubAddr U1.S4.PcSubAddr | |
172 | #define SubData U1.S4.PcSubData | |
173 | #define CommandText U1.S5.PcCommandText | |
174 | #define RouteTopology U1.S6.Topology | |
175 | #define ModuleTypes U1.S3.PcModuleTypes | |
176 | ||
177 | #endif |