/* aheader.h: [one line description of the file]
*    --------------------------------------------------------------------
*
*   [Project Name]
*
*   [License Statement, eg.
*   The contents of this file are subject to the Mozilla Public
*   License Version 1.0 (the "License"); you may not use this file
*   except in compliance with the License. You may obtain a copy of
*   the License at http://www.mozilla.org/MPL/ ]
*
*   [Warranty Statement, eg.
*   Software distributed under the License is distributed on an "AS
*   IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
*   implied. See the License for the specific language governing
*   rights and limitations under the License. ]
*
*   [Author contact, eg.
*   Copyright (C) 1998 AbsoluteValue Software, Inc.  All Rights Reserved.
*
*   Inquiries regarding the linux-wlan Open Source project can be
*   made directly to:
*
*   AbsoluteValue Systems Inc.
*   info@linux-wlan.com
*   http://www.linux-wlan.com ]
*
*   [Change History]
*
*   [Verbose Description]
*
*   [Implementation and usage notes]
*
*   [References]
*
*    --------------------------------------------------------------------
*/

#ifndef _AHEADER_H
#define _AHEADER_H

/*=============================================================*/
/*------ Constants --------------------------------------------*/

/*--- Fixed memory offsets --------------------------*/
#define SU_OFF_LAST_TXDESC        0x3ec
#define SU_OFF_RSVD1              0x400
#define SU_OFF_BANNER             0x480
#define SU_OFF_CMD_BLK            0x4a0
#define SU_OFF_CNTL_STATUS_BLK    0x4f0
#define SU_OFF_VBM                0x500
#define SU_OFF_BUFFER             0x600

/*--- Global Sizes ----------------------------------*/
#define SU_LEN_BANNER             32



/*=============================================================*/
/*------ Macros -----------------------------------------------*/

/*--- next testing macro (applies to Rx and Tx) -------*/
#define SUTXD_ISLAST(x)            ((x) & BIT31)
#define SURXD_ISLAST(x)            ((x) & BIT31)


/*=============================================================*/
/*------ Types and their related constants --------------------*/

/*--- Last Completed Tx Descriptor Block ---------------*/
__WLAN_PRAGMA_PACK1__
typedef struct am930txcmplt_blk
{
    volatile UINT32    last_bcast    __WLAN_ATTRIB_PACK__;
    volatile UINT32    last_mgmt     __WLAN_ATTRIB_PACK__;
    volatile UINT32    last_data     __WLAN_ATTRIB_PACK__;
    volatile UINT32    last_pspoll   __WLAN_ATTRIB_PACK__;
    volatile UINT32    last_cfpoll   __WLAN_ATTRIB_PACK__;
} am930txcmplt_blk_t;
__WLAN_PRAGMA_PACKDFLT__

#define TXCMPLT_OFF_BCAST     0
#define TXCMPLT_OFF_MGMT      4
#define TXCMPLT_OFF_DATA      8
#define TXCMPLT_OFF_PSPOLL    12
#define TXCMPLT_OFF_CFPOLL    16      

typedef void (*am930hw_scan_callback_t)(void *);

/*=============================================================*/
/*--- Function Declarations -----------------------------------*/
/*=============================================================*/
/* public: */
am930hw_t*    
am930hw_construct(UINT32 irq, UINT32 iobase,
                  UINT32 membase, am930mac_t *mac);

void        
am930hw_destruct(am930hw_t *hw);

int
am930hw_init_rx_tx( am930hw_t *hw );

void
am930hw_ISR( am930hw_t *hw );

UINT32
am930hw_joinbss( am930hw_t *hw, UINT32 ch, UINT32 newBSS, 
                 UINT8 *bssid, wlan_ie_ssid_t *ssid, UINT32 bcn_int,
                 wlan_bss_ts_t ts, UINT32 sutro_ref_time );

UINT32
am930hw_scan( am930hw_t *hw, UINT32 cntl, UINT8 *bssid, 
              UINT32 ch, UINT32 duration,
              am930hw_scan_callback_t cb, void *callback_arg );

UINT32
am930hw_reset( am930hw_t *hw );

/*=============================================================*/
/*--- Inline Function Definitions (if supported) --------------*/
/*=============================================================*/

/*----------------------------------------------------------------
*	am930hw_reset
*
*   Perform reset of am930 part and test for valid operation
*   operation following reset.
*
*	returns: zero on success, non-zero if part fails to come up
*            after reset.
----------------------------------------------------------------*/
__INLINE__ UINT32 am930hw_reset( am930hw_t* hw)
{
	UINT32   result = 0;

	/* perform reset */
	/* test part */
	return result;
}

#endif /* _AHEADER_H */
