/*
 *
 Copyright (c) Eicon Networks, 2002.
 *
 This source file is supplied for the use with
 Eicon Networks range of DIVA Server Adapters.
 *
 Eicon File Revision :    2.1
 *
 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, or (at your option)
 any later version.
 *
 This program is distributed in the hope that it will be useful,
 but WITHOUT ANY WARRANTY OF ANY KIND WHATSOEVER INCLUDING ANY
 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.
 *
 */
#ifdef PLATFORM_GT_32BIT
/* #define POINTER_32BIT byte * __ptr32 */
#define POINTER_32BIT dword
#else
#define POINTER_32BIT byte *
#endif
#if !defined(MIPS_SCOM)
#define BUFFER_SZ  48
#define MAINT_OFFS 0x380
#else
#define BUFFER_SZ  128
#if defined(PRI)
#define MAINT_OFFS 0xef00
#else
#define MAINT_OFFS 0xff00
#endif
#endif
#define MIPS_BUFFER_SZ  128
#if defined(PRI)
#define MIPS_MAINT_OFFS 0xef00
#else
#define MIPS_MAINT_OFFS 0xff00
#endif
#define LOG                     1
#define MEMR                    2
#define MEMW                    3
#define IOR                     4
#define IOW                     5
#define B1TEST                  6
#define B2TEST                  7
#define BTESTOFF                8
#define DSIG_STATS              9
#define B_CH_STATS              10
#define D_CH_STATS              11
#define BL1_STATS               12
#define BL1_STATS_C             13
#define GET_VERSION             14
#define OS_STATS                15
#define XLOG_SET_MASK           16
#define XLOG_GET_MASK           17
#define DSP_READ                20
#define DSP_WRITE               21
#define OK 0xff
#define MORE_EVENTS 0xfe
#define NO_EVENT 1
struct DSigStruc
{
	byte Id;
	byte u;
	byte listen;
	byte active;
	byte sin[3];
	byte bc[6];
	byte llc[6];
	byte hlc[6];
	byte oad[20];
};
struct BL1Struc {
	dword cx_b1;
	dword cx_b2;
	dword cr_b1;
	dword cr_b2;
	dword px_b1;
	dword px_b2;
	dword pr_b1;
	dword pr_b2;
	word er_b1;
	word er_b2;
};
struct L2Struc {
	dword XTotal;
	dword RTotal;
	word XError;
	word RError;
};
struct OSStruc {
	dword free_n;
};
typedef union
{
	struct DSigStruc DSigStats;
	struct BL1Struc BL1Stats;
	struct L2Struc L2Stats;
	struct OSStruc OSStats;
	byte   b[BUFFER_SZ];
	word   w[BUFFER_SZ >> 1];
	word   l[BUFFER_SZ >> 2]; /* word is wrong, do not use! Use 'd' instead. */
	dword  d[BUFFER_SZ >> 2];
} BUFFER;
typedef union
{
	struct DSigStruc DSigStats;
	struct BL1Struc BL1Stats;
	struct L2Struc L2Stats;
	struct OSStruc OSStats;
	byte   b[MIPS_BUFFER_SZ];
	word   w[MIPS_BUFFER_SZ >> 1];
	word   l[BUFFER_SZ >> 2]; /* word is wrong, do not use! Use 'd' instead. */
	dword  d[MIPS_BUFFER_SZ >> 2];
} MIPS_BUFFER;
#if !defined(MIPS_SCOM)
struct pc_maint
{
	byte req;
	byte rc;
	POINTER_32BIT mem;
	short length;
	word port;
	byte fill[6];
	BUFFER data;
};
#else
struct pc_maint
{
	byte req;
	byte rc;
	byte reserved[2];     /* R3000 alignment ... */
	POINTER_32BIT mem;
	short length;
	word port;
	byte fill[4];         /* data at offset 16   */
	BUFFER data;
};
#endif
struct mi_pc_maint
{
	byte req;
	byte rc;
	byte reserved[2];     /* R3000 alignment ... */
	POINTER_32BIT mem;
	short length;
	word port;
	byte fill[4];         /* data at offset 16   */
	MIPS_BUFFER data;
};