#ifndef ZUMA_PBB_H
#define ZUMA_PBB_H

#define MAX_NUM_BUFFER_PER_RING	32

#ifdef __BIG_ENDIAN
#define cpu_bits _be_s_bits	/* use with le32_to_cpu only */
#define pci_bits _be_bits	/* may contain swapped bytes,
				   but dont need le32_to_cpu */
#endif

#ifdef __LITTLE_ENDIAN
#define cpu_bits _le_bits
#define pci_bits _le_bits
#endif

#define VENDOR_ID_ZUMA		0x1172
#define DEVICE_ID_ZUMA_PBB	0x0004

#define RXDBP(chan)		(&sip->rx_desc[chan].base)	/* ch*8      */
#define RXDP(chan)		(&sip->rx_desc[chan].current)	/* ch*8 +  4 */
#define TXDBP(chan)		(&sip->tx_desc[chan].base)	/* ch*8 + 64 */
#define TXDP(chan)		(&sip->tx_desc[chan].current)	/* ch*8 + 68 */

#define PBB_DMA_OWN_BIT		0x80000000
#define PBB_DMA_LAST_BIT	0x40000000

#define EOF_RX_FLAG		1	/* bit 0 */
#define EOB_RX_FLAG		2	/* bit 1 */
#define EOF_TX_FLAG		4	/* bit 2 */
#define EOB_TX_FLAG		8	/* bit 3 */

#define TX_MODE(m)		(((m)&7) << 16)

#define RX_DESC(i)		(cs->rx_desc[i])
#define TX_DESC(i)		(cs->tx_desc[i])

#define RX_CONTROL(i)		(RX_DESC(i).control.word)
#define RX_CONTROL_SIZE(i)	(RX_DESC(i).control.rx.size)
#define TX_CONTROL(i)		(TX_DESC(i).control.word)

#define RX_DATA_P(i)		(&RX_DESC(i).ptr)
#define TX_DATA_P(i)		(&TX_DESC(i).ptr)

typedef volatile unsigned char V8;
typedef volatile unsigned short V16;
typedef volatile unsigned int V32;

/* RAM descriptor layout */
typedef struct _tag_dma_descriptor {
    V32 ptr;
    union {
	struct {
	    V32 owner:1;
	    V32 last:1;
	    V32 reserved0: 10;
	    V32 tx_mode: 4;

	    V32 reserved1: 5;
	    V32 size: 11;
	} tx;
	struct {
	    V32 owner:1;
	    V32 last:1;
	    V32 reserved0: 14;

	    V32 reserved1: 5;
	    V32 size: 11;
	} rx;
	V32 word;
    } control;
} DMA_DESCRIPTOR;

/*
 * NOTE: DO NOT USE structure to write non-word values... all registers
 * MUST be written 4 bytes at a time in SI version 0.
 * Non-word writes will result in "unaccessed" bytes written as zero.
 *
 * Byte reads are allowed.
 *
 * V32 pads are because the registers are spaced every 8 bytes (64 bits)
 *
 */

/* NOTE!!! 4 dwords */
typedef struct _tag_dma_descriptor_ring {
    DMA_DESCRIPTOR *base;
    V32 pad1;	/* skip high dword */
    volatile DMA_DESCRIPTOR *current;
    V32 pad3;	/* skip high dword */
} DMA_DESCRIPTOR_RING;

/* 1 dword */
typedef union _tag_dma_generic {
    struct {	/* byte 3 2 1 0 */
	V32 chan7:4;	/* bits 31-28 */
	V32 chan6:4;	/* bits 27-24 */
	V32 chan5:4;	/* bits 23-20 */
	V32 chan4:4;	/* bits 19-16 */
	V32 chan3:4;	/* bits 15-12 */
	V32 chan2:4;	/* bits 11-8 */
	V32 chan1:4;	/* bits 7-4 */
	V32 chan0:4;	/* bits 3-0 */
    } _be_s_bits;
    struct {	/* byte 0 1 2 3 */
	V32 chan1:4;	/* bits 7-4 */
	V32 chan0:4;	/* bits 3-0 */
	V32 chan3:4;	/* bits 15-12 */
	V32 chan2:4;	/* bits 11-8 */
	V32 chan5:4;	/* bits 23-20 */
	V32 chan4:4;	/* bits 19-16 */
	V32 chan7:4;	/* bits 31-28 */
	V32 chan6:4;	/* bits 27-24 */
    } _be_bits;
    struct {	/* byte 0 1 2 3 */
	V32 chan0:4;	/* bits 0-3 */
	V32 chan1:4;	/* bits 4-7 */
	V32 chan2:4;	/* bits 8-11 */
	V32 chan3:4;	/* bits 12-15 */
	V32 chan4:4;	/* bits 16-19 */
	V32 chan5:4;	/* bits 20-23 */
	V32 chan6:4;	/* bits 24-27 */
	V32 chan7:4;	/* bits 28-31 */
    } _le_bits;
    V8 byte[4];
    V32 word;
} DMA_RXTX_ENABLE, DMA_RX_DELETE,
  DMA_INT_STATUS, DMA_INT_MASK,
  DMA_RX_LEVEL_STATUS, DMA_RX_LEVEL_INT_MASK;

/* 1 dword */
typedef union _tag_dma_rx_timer{
    struct {
	V32 res0:8;	/* bits 32-24 */
	V32 res1:7;	/* bits 23-17 */
	V32 enable:1;	/* bit 16 */
	V32 value:16;	/* bits 15-0 */
    } _be_s_bits;
    struct {
	/* crosses byte boundary. must use swap. */
	V32 s_value:16;	/* bits 7-0,15-8 */
	V32 enable:1;	/* bit 16 */
	V32 res1:7;	/* bits 23-17 */
	V32 res0:8;	/* bits 32-24 */
    } _be_bits;
    struct {
	V32 value:16;	/* bits 0-15 */
	V32 enable:1;	/* bit 16 */
	V32 res1:7;	/* bits 17-23 */
	V32 res0:8;	/* bits 24-32 */
    } _le_bits;
    V8 byte[4];
    V32 word;
} DMA_RX_TIMER;

/* NOTE!!!: 2 dwords */
typedef struct _tag_dma_desc_level{
    union {
	struct {
	    V32 res1:8;	/* bits 31-24 */
	    V32 res0:7;	/* bits 23-17 */
	    V32 write:1;	/* bit 16 */
	    V32 thresh:8;	/* bits 15-8 */
	    V32 level:8;	/* bits 7-0 */
	} _be_s_bits;
	struct {
	    V32 level:8;	/* bits 7-0 */
	    V32 thresh:8;	/* bits 15-8 */
	    V32 res0:7;	/* bits 30-17 */
	    V32 write:1;	/* bit 16 */
	    V32 res1:8;	/* bits 31-24 */
	} _be_bits;
	struct {
	    V32 level:8;	/* bits 0-7 */
	    V32 thresh:8;	/* bits 8-15 */
	    V32 write:1;	/* bit 16 */
	    V32 res0:7;	/* bit 17-30 */
	    V32 res1:8;	/* bits 24-31 */
	} _le_bits;
	V8 byte[4];
    	V32 word;
    } desc;
    V32 pad1;
} DMA_DESC_LEVEL;

typedef struct _tag_pbb_dma_reg_map {
    /* 0-15 (0x000-0x078) */
    DMA_DESCRIPTOR_RING rx_desc[8];	/* 4 dwords each, 128 bytes tot. */

    /* 16-31 (0x080-0x0f8) */
    DMA_DESCRIPTOR_RING tx_desc[8];	/* 4 dwords each, 128 bytes tot. */

    /* 32/33 (0x100/0x108) */
    V32 reserved_32;
    V32 pad_32;
    V32 reserved_33;
    V32 pad_33;

    /* 34 (0x110) */
    DMA_RXTX_ENABLE rxtx_enable;
    V32 pad_34;

    /* 35 (0x118) */
    DMA_RX_DELETE rx_delete;
    V32 pad_35;

    /* 36-38 (0x120-0x130) */
    DMA_INT_STATUS status;
    V32 pad_36;
    DMA_INT_STATUS last_status;
    V32 pad_37;
    DMA_INT_MASK int_mask;
    V32 pad_38;

    /* 39/40 (0x138/0x140) */
    union {
        /* NOTE!! 4 dwords */
	struct {
	    V32 channel_3:8;
	    V32 channel_2:8;
	    V32 channel_1:8;
	    V32 channel_0:8;
	    V32 pad1;
	    V32 channel_7:8;
	    V32 channel_6:8;
	    V32 channel_5:8;
	    V32 channel_4:8;
	    V32 pad3;
	} _be_s_bits;
	struct {
	    V32 channel_0:8;
	    V32 channel_1:8;
	    V32 channel_2:8;
	    V32 channel_3:8;
	    V32 pad1;
	    V32 channel_4:8;
	    V32 channel_5:8;
	    V32 channel_6:8;
	    V32 channel_7:8;
	    V32 pad3;
	} _be_bits, _le_bits;
	V8 byte[16];
	V32 word[4];
    } rx_size;

    /* 41/42 (0x148/0x150) */
    V32 reserved_41;
    V32 pad_41;
    V32 reserved_42;
    V32 pad_42;

    /* 43/44 (0x158/0x160) */
    DMA_RX_LEVEL_STATUS rx_level_status;
    V32 pad_43;
    DMA_RX_LEVEL_INT_MASK rx_level_int_mask;
    V32 pad_44;

    /* 45 (0x168) */
    DMA_RX_TIMER rx_timer;
    V32 pad_45;

    /* 46 (0x170) */
    V32 reserved_46;
    V32 pad_46;

    /* 47 (0x178) */
    V32 mbox_status;
    V32 pad_47;

    /* 48/49 (0x180/0x188) */
    V32 mbox_out;
    V32 pad_48;
    V32 mbox_in;
    V32 pad_49;

    /* 50 (0x190) */
    V32 config;
    V32 pad_50;

    /* 51/52 (0x198/0x1a0) */
    V32 c2a_ctr;
    V32 pad_51;
    V32 a2c_ctr;
    V32 pad_52;

    /* 53 (0x1a8) */
    union {
	struct {
	    V32 rev_major:8;	/* bits 31-24 */
	    V32 rev_minor:8;	/* bits 23-16 */
	    V32 reserved:16;	/* bits 15-0 */
	} _be_s_bits;
	struct {
	    V32 s_reserved:16;	/* bits 7-0, 15-8 */
	    V32 rev_minor:8;	/* bits 23-16 */
	    V32 rev_major:8;	/* bits 31-24 */
	} _be_bits;
	struct {
	    V32 reserved:16;	/* bits 0-15 */
	    V32 rev_minor:8;	/* bits 16-23 */
	    V32 rev_major:8;	/* bits 24-31 */
	} _le_bits;
	V8 byte[4];
	V32 word;
    } version;
    V32 pad_53;

    /* 54-59 (0x1b0-0x1d8) */
    V32 debug_54;
    V32 pad_54;
    V32 debug_55;
    V32 pad_55;
    V32 debug_56;
    V32 pad_56;
    V32 debug_57;
    V32 pad_57;
    V32 debug_58;
    V32 pad_58;
    V32 debug_59;
    V32 pad_59;

    /* 60 (0x1e0) */
    V32 timestamp;
    V32 pad_60;

    /* 61-63 (0x1e8-0x1f8) */
    V32 debug_61;
    V32 pad_61;
    V32 debug_62;
    V32 pad_62;
    V32 debug_63;
    V32 pad_63;

    /* 64-71 (0x200 - 0x238) */
    DMA_DESC_LEVEL rx_desc_level[8];	/* 2 dwords each, 32 bytes tot. */

    /* 72-98 (0x240 - 0x2f8) */
    /* reserved */

    /* 96-127 (0x300 - 0x3f8) */
    /* mirrors (0x100 - 0x1f8) */

} PBB_DMA_REG_MAP;


#endif /* ZUMA_PBB_H */
