Logo Search packages:      
Sourcecode: pcmcia-cs version File versions

wvlan_hcf.h

/* This file is part of the Hardware Control Functions Light (HCF-light) library
   to control the Lucent Technologies WaveLAN/IEEE Network I/F Card.
   The HCF is the implementation of the Wireless Connection I/F (WCI).
   
   The HCF-light files are a subset of the HCF files. The complete set offers a
   number of additional facilities, e.g. firmware download, Etherner-II encapsulation,
   additional diagnostic facilities, ASSERT logic to support debugging, 802.11 support,
   Configuration Management.
   This complete set is explicitely not in the Public Domain but can be made 
   available under certain restriction. (see the pointer below for support)
   
   The HCF-light files are free software; you can redistribute it and/or modify it
   under the terms of the GNU General Public License as published by the
   Free Software Foundation; either version 2 of the License, or (at your
   option) any later version.

   This program is distributed in the hope that it will be useful, but
   WITHOUT ANY WARRANTY; without even the implied warranty of
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
   General Public License for more details.

   You should have received a copy of the GNU General Public License
   along with this program; if not, write to the Free Software Foundation,
   Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. 
   
   At the time of this writing, you can request for support at:
   betasupport@wavelan.com
   
   Documentation is expected to be available in the week of 8 Februari 1999

*/


#ifndef HCF_H
#define HCF_H 1

/*************************************************************************************************************
*
* FILE       : hcf.h *************** 2.0 *************************************************************************
*
* DATE   : 2000/01/06 23:30:52   1.2
*
* AUTHOR : Nico Valster
*
* DESC   : Definitions and Prototypes for MSF as well as HCF sources
*
*                 Customizable via HCFCFG.H
*
*
**************************************************************************************************************
Instructions to convert HCF.H to HCF.INC by means of H2INC

Use a command line which defines the specific macros and command line options
needed to build the C-part, e.g. for the DOS ODI driver
            `h2inc /C /Ni /Zp /Zn hcf      hcf.h`


**************************************************************************************************************
* COPYRIGHT (c) 1996, 1997, 1998 by Lucent Technologies.     All Rights Reserved.
**************************************************************************************************************/

/****************************************************************************
wvlan_hcf.h,v
Revision 1.2  2000/01/06 23:30:52  root
*** empty log message ***

 * 
 *    Rev 1.0   02 Feb 1999 14:32:30   NVALST
 * Initial revision.
Revision 1.2  1999/02/01 22:58:35  nico
*** empty log message ***

Revision 1.1  1999/01/30 19:24:39  nico
Initial revision

Revision 1.1  1999/01/30 19:07:57  nico
Initial revision

 * 
 *    Rev 1.110   29 Jan 1999 15:52:42   NVALST
 * intermediate, maybe working but seems to need two times to load in 
 * light-version
 * 
 *    Rev 2.12   29 Jan 1999 10:48:44   NVALST
 * 
 *    Rev 1.108   28 Jan 1999 14:43:22   NVALST
 * 
****************************************************************************/

/**************************************************************************************************************
*
* CHANGE HISTORY
*
  961018 - NV
      Original Entry

*************************************************************************************************************/


                                                                                                            
#include "wvlan_hcfcfg.h"     // System Constants to be defined by the MSF-programmer to tailor the HCF
#include <stddef.h> //do not move to hcf.cpp to keep Chris (Borland) and Marc (MSVC 4)happy (defines NULL)

#include "wvlan_mdd.h"  // Include file common for HCF, MSF, UIL, USF

/************************************************************************************************************/
/******************   H C F  F U N C T I O N   P A R A M E T E R   ****************************************/
/************************************************************************************************************/

//offsets for hcf_put_data and hcf_get_data
                        

// 802.3/E-II/802.11 offsets to access Hermes control fields
#define HFS_STAT                    -0x2E //0x0000
#define     HFS_STAT_ERR            RX_STAT_ERR //link "natural" HCF name to "natural" MSF name

#define HFS_Q_INFO                        -0x28 //0x0006
#define HFS_TX_CNTL                       -0x22 //0x000C
#define HFS_FRAME_CNTL              -0x20 //0x000E
#define HFS_ID                            -0x1E //0x0010

// 802.11 relative offsets to access 802.11 header fields 
#define HFS_ADDR_1                        0x00  //0x0012
#define HFS_ADDR_2                        0x06  //0x0018
#define HFS_ADDR_3                        0x0C  //0x001E
#define HFS_SEQ_CNTL                0x12  //0x0024
#define HFS_ADDR_4                        0x14  //0x0026
#define HFS_DAT_LEN                       0x1A  //0x002C

// 802.3 / E-II relative offsets to access 802.3 header fields
#define HFS_ADDR_DEST               0x00  //0x002E
#define HFS_ADDR_SRC                0x06  //0x0034
#define HFS_LEN                           0x0C  //0x003A
#define HFS_DAT                           0x0E  //0x003C

// E-II relative offsets to access SNAP header fields
#define HFS_TYPE                    0x14  //0x0042    //Eternet-II type in 1042/Bridge-Tunnel encapsulated frame


//#define HCF_ACT_INT_PENDING 0x0001            //interrupt pending, return status HCF_ACT_INT_OFF



/*************************************************************************************************************/
/****************   H C F  F U N C T I O N   R E T U R N   C O D E S   ***************************************/
/*************************************************************************************************************/

//Debug Purposes only                     !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
#define HREG_EV_TICK          0x8000      //WMAC Controller Auxiliary Timer Tick
#define HREG_EV_RES                 0x4000      //WMAC Controller H/W error (Wait Time-out)
#define HREG_EV_INFO_DROP     0x2000      //WMAC did not have sufficient RAM to build Unsollicited Frame
#define HREG_EV_NO_CARD       0x0800      /* PSEUDO event: card removed                                                               */
#define HREG_EV_DUIF_RX     0x0400  /* PSEUDO event: WMP frame received                                                         */
#define HREG_EV_INFO          0x0080      //WMAC Controller Asynchronous Information Frame
#define HREG_EV_CMD                 0x0010      //WMAC Controller Command completed, Status and Response avaialble
#define HREG_EV_ALLOC         0x0008      //WMAC Controller Asynchronous part of Allocation/Reclaim completed
#define HREG_EV_TX_EXC        0x0004      //WMAC Controller Asynchronous Transmission unsuccessful completed
#define HREG_EV_TX                  0x0002      //WMAC Controller Asynchronous Transmission successful completed
#define HREG_EV_RX                  0x0001      //WMAC Controller Asynchronous Receive Frame



//=========================================  T A L L I E S  ===================================================

typedef struct CFG_HERMES_TALLIES_STRCT {  //Hermes Tallies (IFB substructure)
  hcf_32    TxUnicastFrames;
  hcf_32    TxMulticastFrames;
  hcf_32    TxFragments;
  hcf_32    TxUnicastOctets;
  hcf_32    TxMulticastOctets;
  hcf_32    TxDeferredTransmissions;
  hcf_32    TxSingleRetryFrames;
  hcf_32    TxMultipleRetryFrames;
  hcf_32    TxRetryLimitExceeded;
  hcf_32    TxDiscards;
  hcf_32    RxUnicastFrames;
  hcf_32    RxMulticastFrames;
  hcf_32    RxFragments;
  hcf_32    RxUnicastOctets;
  hcf_32    RxMulticastOctets;
  hcf_32    RxFCSErrors;
  hcf_32    RxDiscards_NoBuffer;
  hcf_32    TxDiscardsWrongSA;
  hcf_32    RxWEPUndecryptable;
  hcf_32    RxMsgInMsgFragments;
  hcf_32    RxMsgInBadMsgFragments;
}CFG_HERMES_TALLIES_STRCT;


//Note this way to define CFG_TALLIES_STRCT_SIZE implies that all tallies must keep the same (hcf_32) size
#define           HCF_NIC_TAL_CNT   (sizeof(CFG_HERMES_TALLIES_STRCT)/ sizeof(hcf_32))
#define           HCF_TOT_TAL_CNT   (HCF_NIC_TAL_CNT)

/************************************************************************************************************/
/***********   W C I    F U N C T I O N S    P R O T O T Y P E S   ******************************************/
/************************************************************************************************************/

#define IFB_VERSION 0x82                        /* initially 80, to be incremented by every IFB layout change           */



/* identifier IFB_STRCT on typedef line needed to get the individual fields in the MS Browser DataBase      */
typedef struct IFB_STRCT{               //I/F Block
/* MSF readable part of Result block structure                                      *************************************/
  hcf_io          IFB_IOBase;                   /* I/O address of Hermes chip as passed by MSF at hcf_connect call      */
#if defined HCF_PORT_IO
  hcf_16          IFB_IOBase_pad;               // Optional field, makes IFB-layout independent of IFB_IOBase size
#endif //HCF_PORT_IO
  hcf_16          IFB_IORange;                  // I/O Range used by Hermes chip
  hcf_8                 IFB_Version;                  /* initially 0, to be incremented by every IFB layout change            */
  hcf_8                 IFB_Slack_2;                  /* align/slack space                                                                      */
  hcf_8                 IFB_HCFVersionMajor;    // Major version of the HCF.0x01 for this release
  hcf_8                 IFB_HCFVersionMinor;    /* Minor version of the HCF.  Incremented for each coding maintenance 
                                                             * cycle. 0x01 for the Initial release                                              */
  CFG_HERMES_TALLIES_STRCT    IFB_NIC_Tallies;  //Hermes tallies

/* part I (survives hcf_disable)    ************************************************************************/
  hcf_16          IFB_CardStat;                 /* see Design spec                                                                              */
  hcf_16          IFB_FSBase;                   // frame type dependent offset (HFS_ADDR_1_ABS or HFS_ADDR_DEST_ABS)
  hcf_16          IFB_RxFence;                  // frame type dependent gap fence (HFS_ADDR_DEST_ABS or HFS_LEN_ABS)
  hcf_16          IFB_IntOffCnt;                /* see Design spec                                                                              */
  hcf_32          IFB_TickIni;                  /* initialization of counter for 1 ms processor loop                    */
                                                            /* keep this unsigned otherwise the "clever" ASSERT in hcf_disable 
                                                             * has a higher risk to get into trouble on slow machines
                                                             * keep this hcf_16 to prevent a "close to infinity" time out if
                                                             * calibration fails on 32-bits machine                                             */
  hcf_16          IFB_Magic;                    /* see Design spec                                                                              */
  hcf_16          IFB_Slack_4[2];               /* align/slack space                                                                      */

/* part II (cleared or re-initialized at hcf_disable/hcf_enable)   *****************************************/
  hcf_8           IFB_PIFRscInd;                /* see Design spec   //;?Q:int better than hcf_8 A: No!                       */
  hcf_8                 IFB_DUIFRscInd;               /* Value indicating the command resource availability for the 
                                                             * Driver-Utility I/F (i.e. hcf_send_diag_msg).                               */
                                                            /* Values: */                                                       
                                                            /* * No command resource            0                                                     */
                                                            /* * Command resource available     01h-FFh                                               */
  hcf_8           IFB_NotifyRscInd;       /* see Design spec   //;?Q:int better than hcf_8 A: No!                       */
  hcf_8                 IFB_Slack_6;                  /* align/slack space                                                                      */
  hcf_16          IFB_PIF_FID;                  /* see Design spec                                                                              */
  hcf_16          IFB_DUIF_FID;                 /* field which contains FID value identifying the Tx Frame Structure,
                                                             * to be used by hcf_send_diag_msg                                                  */
  hcf_16          IFB_Notify_FID;               /* field which contains FID value identifying the Notify Frame Struct
                                                             * to be used by hcf_put_info in case of Notify type codes              */
  hcf_16          IFB_RxFID;                    /* see Design spec                                                                              */
  hcf_16          IFB_MB_FID;                   /* pass appropriate FID to hcf_put_mb_info                                          */
  hcf_16          IFB_TxFrameType;        /* see Design spec                                                                              */
  hcf_16          IFB_RxLen;                    /* see Design spec                                                                              */
  hcf_16          IFB_RxStat;                   /* see Design spec                                                                              */
  hcf_16          IFB_UnloadIdx;                /* see Design spec                                                                              */
  hcf_16          IFB_PIFLoadIdx;               /* see Design spec                                                                              */
  hcf_8           IFB_TxCntl[2];                /* contents of HFS_TX_CNTL field of TFS
                                                             * 0: MACPort, 1: StrucType,TxEx,TxOK                                               */
  hcf_16          IFB_BAP_0[2];                 /* offset
                                                             * RID/FID                                                                                      */
  hcf_16          IFB_BAP_1[2];                 /* offset
                                                             * RID/FID                                                                                      */
  hcf_16          IFB_IntEnMask;                /* see Design spec                                                                              */
  hcf_16          IFB_TimStat;                  /* BAP initialization or Cmd Completion failed once                           */

}IFB_STRCT;



typedef IFB_STRCT*      IFBP;


EXTERN_C int      hcf_action              (IFBP ifbp, hcf_action_cmd cmd );
EXTERN_C void     hcf_assert              (IFBP ifbp, wci_bufp file_name, unsigned int line_number, int q );
EXTERN_C void     hcf_connect             (IFBP ifbp, hcf_io io_base );
EXTERN_C int      hcf_disable             (IFBP ifbp, hcf_16 port );
EXTERN_C void     hcf_disconnect          (IFBP ifbp );
EXTERN_C int      hcf_enable              (IFBP ifbp, hcf_16 port );
EXTERN_C int      hcf_get_info            (IFBP ifbp, LTVP ltvp );
EXTERN_C int      hcf_get_data            (IFBP ifbp, int offset, wci_bufp bufp, int len );
EXTERN_C int      hcf_service_nic         (IFBP ifbp );
//EXTERN_C void   hcf_put_data            (IFBP ifbp, wci_bufp bufp, int len );
EXTERN_C void     hcf_put_data            (IFBP ifbp, wci_bufp bufp, int len, hcf_16 port );
EXTERN_C int      hcf_put_info            (IFBP ifbp, LTVP ltvp );
EXTERN_C int      hcf_put_header          (IFBP ifbp, int offset, wci_bufp bufp, int len, hcf_8 check );
EXTERN_C int      hcf_send                (IFBP ifbp, hcf_16 type );
EXTERN_C int      hcf_send_diag_msg (IFBP ifbp, hcf_16 type, wci_bufp bufp, int len );




#endif  /* HCF_H */


Generated by  Doxygen 1.6.0   Back to index