• Home
  • History
  • Annotate
  • Line#
  • Navigate
  • Raw
  • Download
  • only in /asuswrt-rt-n18u-9.0.0.4.380.2695/release/src-rt-6.x.4708/linux/linux-2.6/drivers/char/rio/
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/*
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*/
51struct BootSequence {
52	u16 NumPackets;
53	u16 LoadBase;
54	u16 CodeSize;
55};
56
57#define	BOOT_SEQUENCE_LEN	8
58
59struct SamTop {
60	u8 Unit;
61	u8 Link;
62};
63
64struct CmdHdr {
65	u8 PcCommand;
66	union {
67		u8 PcPhbNum;
68		u8 PcLinkNum;
69		u8 PcIDNum;
70	} U0;
71};
72
73
74struct PktCmd {
75	union {
76		struct {
77			struct CmdHdr CmdHdr;
78			struct BootSequence PcBootSequence;
79		} S1;
80		struct {
81			u16 PcSequence;
82			u8 PcBootData[RTA_BOOT_DATA_SIZE];
83		} S2;
84		struct {
85			u16 __crud__;
86			u8 PcUniqNum[4];	/* this is really a uint. */
87			u8 PcModuleTypes;	/* what modules are fitted */
88		} S3;
89		struct {
90			struct CmdHdr CmdHdr;
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 */
97		} S4;
98		struct {
99			struct CmdHdr CmdHdr;
100			u8 PcCommandText[1];
101			u8 __crud__[20];
102			u8 PcIDNum2;	/* It had to go somewhere! */
103		} S5;
104		struct {
105			struct CmdHdr CmdHdr;
106			struct SamTop Topology[LINKS_PER_UNIT];
107		} S6;
108	} U1;
109};
110
111struct PktCmd_M {
112	union {
113		struct {
114			struct {
115				u8 PcCommand;
116				union {
117					u8 PcPhbNum;
118					u8 PcLinkNum;
119					u8 PcIDNum;
120				} U0;
121			} CmdHdr;
122			struct {
123				u16 NumPackets;
124				u16 LoadBase;
125				u16 CodeSize;
126			} PcBootSequence;
127		} S1;
128		struct {
129			u16 PcSequence;
130			u8 PcBootData[RTA_BOOT_DATA_SIZE];
131		} S2;
132		struct {
133			u16 __crud__;
134			u8 PcUniqNum[4];	/* this is really a uint. */
135			u8 PcModuleTypes;	/* what modules are fitted */
136		} S3;
137		struct {
138			u16 __cmd_hdr__;
139			u8 __undefined__;
140			u8 PcModemStatus;
141			u8 PcPortStatus;
142			u8 PcSubCommand;
143			u16 PcSubAddr;
144			u8 PcSubData[64];
145		} S4;
146		struct {
147			u16 __cmd_hdr__;
148			u8 PcCommandText[1];
149			u8 __crud__[20];
150			u8 PcIDNum2;	/* Tacked on end */
151		} S5;
152		struct {
153			u16 __cmd_hdr__;
154			struct Top Topology[LINKS_PER_UNIT];
155		} S6;
156	} U1;
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
178