|  | #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 */ |