/*
 * (C) Copyright 2003 Stefan Roese, stefan.roese@esd-electronics.com
 *
 * SPDX-License-Identifier:	GPL-2.0+
 */

#ifndef _universe_h
#define _universe_h

typedef struct _UNIVERSE UNIVERSE;
typedef struct _SLAVE_IMAGE SLAVE_IMAGE;
typedef struct _TDMA_CMD_PACKET TDMA_CMD_PACKET;

struct _SLAVE_IMAGE {
	unsigned int ctl;      /* Control     */
	unsigned int bs;       /* Base        */
	unsigned int bd;       /* Bound       */
	unsigned int to;       /* Translation */
	unsigned int reserved;
};

struct _UNIVERSE {
	unsigned int pci_id;
	unsigned int pci_csr;
	unsigned int pci_class;
	unsigned int pci_misc0;
	unsigned int pci_bs;
	unsigned int spare0[10];
	unsigned int pci_misc1;
	unsigned int spare1[48];
	SLAVE_IMAGE  lsi[4];
	unsigned int spare2[8];
	unsigned int scyc_ctl;
	unsigned int scyc_addr;
	unsigned int scyc_en;
	unsigned int scyc_cmp;
	unsigned int scyc_swp;
	unsigned int lmisc;
	unsigned int slsi;
	unsigned int l_cmderr;
	unsigned int laerr;
	unsigned int spare3[27];
	unsigned int dctl;
	unsigned int dtbc;
	unsigned int dla;
	unsigned int spare4[1];
	unsigned int dva;
	unsigned int spare5[1];
	unsigned int dcpp;
	unsigned int spare6[1];
	unsigned int dgcs;
	unsigned int d_llue;
	unsigned int spare7[54];
	unsigned int lint_en;
	unsigned int lint_stat;
	unsigned int lint_map0;
	unsigned int lint_map1;
	unsigned int vint_en;
	unsigned int vint_stat;
	unsigned int vint_map0;
	unsigned int vint_map1;
	unsigned int statid;
	unsigned int vx_statid[7];
	unsigned int spare8[48];
	unsigned int mast_ctl;
	unsigned int misc_ctl;
	unsigned int misc_stat;
	unsigned int user_am;
	unsigned int spare9[700];
	SLAVE_IMAGE  vsi[4];
	unsigned int spare10[8];
	unsigned int vrai_ctl;
	unsigned int vrai_bs;
	unsigned int spare11[2];
	unsigned int vcsr_ctl;
	unsigned int vcsr_to;
	unsigned int v_amerr;
	unsigned int vaerr;
	unsigned int spare12[25];
	unsigned int vcsr_clr;
	unsigned int vcsr_set;
	unsigned int vcsr_bs;
};

#define IRQ_VOWN    0x0001
#define IRQ_VIRQ1   0x0002
#define IRQ_VIRQ2   0x0004
#define IRQ_VIRQ3   0x0008
#define IRQ_VIRQ4   0x0010
#define IRQ_VIRQ5   0x0020
#define IRQ_VIRQ6   0x0040
#define IRQ_VIRQ7   0x0080
#define IRQ_DMA     0x0100
#define IRQ_LERR    0x0200
#define IRQ_VERR    0x0400
#define IRQ_res     0x0800
#define IRQ_IACK    0x1000
#define IRQ_SWINT   0x2000
#define IRQ_SYSFAIL 0x4000
#define IRQ_ACFAIL  0x8000

struct _TDMA_CMD_PACKET {
	unsigned int dctl;   /* DMA Control         */
	unsigned int dtbc;   /* Transfer Byte Count */
	unsigned int dlv;    /* PCI Address         */
	unsigned int res1;   /* Reserved            */
	unsigned int dva;    /* Vme Address         */
	unsigned int res2;   /* Reserved            */
	unsigned int dcpp;   /* Pointer to Numed Cmd Packet with rPN */
	unsigned int res3;   /* Reserved                             */
};

#define VME_AM_A16		0x01
#define VME_AM_A24		0x02
#define VME_AM_A32		0x03
#define VME_AM_Axx		0x03
#define VME_AM_SUP		0x04
#define VME_AM_DATA		0x10
#define VME_AM_PROG		0x20
#define VME_AM_Mxx		0x30

#define VME_FLAG_D8             0x01
#define VME_FLAG_D16            0x02
#define VME_FLAG_D32            0x03
#define VME_FLAG_Dxx		0x03

#define PCI_MS_MEM		0x01
#define PCI_MS_IO		0x02
#define PCI_MS_CONFIG		0x03
#define PCI_MS_Mxx		0x03

#endif