/*
 * Copyright (C) 2005 - 2008 ServerEngines
 * All rights reserved.
 *
 * This program is free software; you can redistribute it and/or
 * modify it under the terms of the GNU General Public License version 2
 * as published by the Free Software Foundation.  The full GNU General
 * Public License is included in this distribution in the file called COPYING.
 *
 * Contact Information:
 * linux-drivers@serverengines.com
 *
 * ServerEngines
 * 209 N. Fair Oaks Ave
 * Sunnyvale, CA 94085
 */
/*
 * Autogenerated by srcgen version: 0127
 */
#ifndef __etx_context_amap_h__
#define __etx_context_amap_h__

/* ETX ring  context structure. */
struct BE_ETX_CONTEXT_AMAP {
	u8 tx_cidx[11];	/* DWORD 0 */
	u8 rsvd0[5];	/* DWORD 0 */
	u8 rsvd1[16];	/* DWORD 0 */
	u8 tx_pidx[11];	/* DWORD 1 */
	u8 rsvd2;		/* DWORD 1 */
	u8 tx_ring_size[4];	/* DWORD 1 */
	u8 pd_id[5];	/* DWORD 1 */
	u8 pd_id_not_valid;	/* DWORD 1 */
	u8 cq_id_send[10];	/* DWORD 1 */
	u8 rsvd3[32];	/* DWORD 2 */
	u8 rsvd4[32];	/* DWORD 3 */
	u8 cur_bytes[32];	/* DWORD 4 */
	u8 max_bytes[32];	/* DWORD 5 */
	u8 time_stamp[32];	/* DWORD 6 */
	u8 rsvd5[11];	/* DWORD 7 */
	u8 func;		/* DWORD 7 */
	u8 rsvd6[20];	/* DWORD 7 */
	u8 cur_txd_count[32];	/* DWORD 8 */
	u8 max_txd_count[32];	/* DWORD 9 */
	u8 rsvd7[32];	/* DWORD 10 */
	u8 rsvd8[32];	/* DWORD 11 */
	u8 rsvd9[32];	/* DWORD 12 */
	u8 rsvd10[32];	/* DWORD 13 */
	u8 rsvd11[32];	/* DWORD 14 */
	u8 rsvd12[32];	/* DWORD 15 */
} __packed;
struct ETX_CONTEXT_AMAP {
	u32 dw[16];
};

#endif /* __etx_context_amap_h__ */
