linux/drivers/char/rio/cmdpkt.h

184 lines
4.5 KiB
C

/*
** -----------------------------------------------------------------------------
**
** 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 {
WORD NumPackets;
WORD LoadBase;
WORD CodeSize;
};
#define BOOT_SEQUENCE_LEN 8
struct SamTop {
BYTE Unit;
BYTE Link;
};
struct CmdHdr {
BYTE PcCommand;
union {
BYTE PcPhbNum;
BYTE PcLinkNum;
BYTE PcIDNum;
} U0;
};
struct PktCmd {
union {
struct {
struct CmdHdr CmdHdr;
struct BootSequence PcBootSequence;
} S1;
struct {
WORD PcSequence;
BYTE PcBootData[RTA_BOOT_DATA_SIZE];
} S2;
struct {
WORD __crud__;
BYTE PcUniqNum[4]; /* this is really a uint. */
BYTE PcModuleTypes; /* what modules are fitted */
} S3;
struct {
struct CmdHdr CmdHdr;
BYTE __undefined__;
BYTE PcModemStatus;
BYTE PcPortStatus;
BYTE PcSubCommand; /* commands like mem or register dump */
WORD PcSubAddr; /* Address for command */
BYTE PcSubData[64]; /* Date area for command */
} S4;
struct {
struct CmdHdr CmdHdr;
BYTE PcCommandText[1];
BYTE __crud__[20];
BYTE 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 {
uchar PcCommand;
union {
uchar PcPhbNum;
uchar PcLinkNum;
uchar PcIDNum;
} U0;
} CmdHdr;
struct {
ushort NumPackets;
ushort LoadBase;
ushort CodeSize;
} PcBootSequence;
} S1;
struct {
ushort PcSequence;
uchar PcBootData[RTA_BOOT_DATA_SIZE];
} S2;
struct {
ushort __crud__;
uchar PcUniqNum[4]; /* this is really a uint. */
uchar PcModuleTypes; /* what modules are fitted */
} S3;
struct {
ushort __cmd_hdr__;
uchar __undefined__;
uchar PcModemStatus;
uchar PcPortStatus;
uchar PcSubCommand;
ushort PcSubAddr;
uchar PcSubData[64];
} S4;
struct {
ushort __cmd_hdr__;
uchar PcCommandText[1];
uchar __crud__[20];
uchar PcIDNum2; /* Tacked on end */
} S5;
struct {
ushort __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