/*
*---------------------------------------------------------------------------
* FT1000 driver for Flarion Flash OFDM NIC Device
*
* Copyright (C) 2002 Flarion Technologies, 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 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.
*---------------------------------------------------------------------------
*
* File:         ft1000_ioctl.h
*
* Description:    Common structures and defines relating to IOCTL
*
* History:
* 11/5/02    Whc                Created.
*
*---------------------------------------------------------------------------//---------------------------------------------------------------------------
*/
#ifndef _FT1000IOCTLH_
#define _FT1000IOCTLH_

typedef struct _IOCTL_GET_VER {
    unsigned long drv_ver;
} __packed IOCTL_GET_VER, *PIOCTL_GET_VER;

/* Data structure for Dsp statistics */
typedef struct _IOCTL_GET_DSP_STAT {
    unsigned char DspVer[DSPVERSZ];        /* DSP version number */
    unsigned char HwSerNum[HWSERNUMSZ];    /* Hardware Serial Number */
    unsigned char Sku[SKUSZ];              /* SKU */
    unsigned char eui64[EUISZ];            /* EUI64 */
    unsigned short ConStat;                /* Connection Status */
                                /*    Bits 0-3 = Connection Status Field */
                                /*               0000=Idle (Disconnect) */
                                /*               0001=Searching */
                                /*               0010=Active (Connected) */
                                /*               0011=Waiting for L2 down */
                                /*               0100=Sleep */
    unsigned short LedStat;                /* Led Status */
                                /*    Bits 0-3   = Signal Strength Field */
                                /*                 0000 = -105dBm to -92dBm */
                                /*                 0001 = -92dBm to -85dBm */
                                /*                 0011 = -85dBm to -75dBm */
                                /*                 0111 = -75dBm to -50dBm */
                                /*                 1111 = -50dBm to 0dBm */
                                /*    Bits 4-7   = Reserved */
                                /*    Bits 8-11  = SNR Field */
                                /*                 0000 = <2dB */
                                /*                 0001 = 2dB to 8dB */
                                /*                 0011 = 8dB to 15dB */
                                /*                 0111 = 15dB to 22dB */
                                /*                 1111 = >22dB */
                                /*    Bits 12-15 = Reserved */
    unsigned long nTxPkts;                /* Number of packets transmitted from host to dsp */
    unsigned long nRxPkts;                /* Number of packets received from dsp to host */
    unsigned long nTxBytes;               /* Number of bytes transmitted from host to dsp */
    unsigned long nRxBytes;               /* Number of bytes received from dsp to host */
    unsigned long ConTm;                  /* Current session connection time in seconds */
    unsigned char CalVer[CALVERSZ];       /* Proprietary Calibration Version */
    unsigned char CalDate[CALDATESZ];     /* Proprietary Calibration Date */
} __packed IOCTL_GET_DSP_STAT, *PIOCTL_GET_DSP_STAT;

/* Data structure for Dual Ported RAM messaging between Host and Dsp */
typedef struct _IOCTL_DPRAM_BLK {
    unsigned short total_len;
	struct pseudo_hdr pseudohdr;
    unsigned char buffer[1780];
} __packed IOCTL_DPRAM_BLK, *PIOCTL_DPRAM_BLK;

typedef struct _IOCTL_DPRAM_COMMAND {
    unsigned short extra;
    IOCTL_DPRAM_BLK dpram_blk;
} __packed IOCTL_DPRAM_COMMAND, *PIOCTL_DPRAM_COMMAND;

/*
* Custom IOCTL command codes
*/
#define FT1000_MAGIC_CODE      'F'

#define IOCTL_REGISTER_CMD					0
#define IOCTL_SET_DPRAM_CMD					3
#define IOCTL_GET_DPRAM_CMD					4
#define IOCTL_GET_DSP_STAT_CMD      6
#define IOCTL_GET_VER_CMD           7
#define IOCTL_CONNECT               10
#define IOCTL_DISCONNECT            11

#define IOCTL_FT1000_GET_DSP_STAT _IOR(FT1000_MAGIC_CODE, IOCTL_GET_DSP_STAT_CMD, sizeof(IOCTL_GET_DSP_STAT)
#define IOCTL_FT1000_GET_VER _IOR(FT1000_MAGIC_CODE, IOCTL_GET_VER_CMD, sizeof(IOCTL_GET_VER)
#define IOCTL_FT1000_CONNECT _IOW(FT1000_MAGIC_CODE, IOCTL_CONNECT, 0
#define IOCTL_FT1000_DISCONNECT _IOW(FT1000_MAGIC_CODE, IOCTL_DISCONNECT, 0
#define IOCTL_FT1000_SET_DPRAM _IOW(FT1000_MAGIC_CODE, IOCTL_SET_DPRAM_CMD, sizeof(IOCTL_DPRAM_BLK)
#define IOCTL_FT1000_GET_DPRAM _IOR(FT1000_MAGIC_CODE, IOCTL_GET_DPRAM_CMD, sizeof(IOCTL_DPRAM_BLK)
#define IOCTL_FT1000_REGISTER  _IOW(FT1000_MAGIC_CODE, IOCTL_REGISTER_CMD, sizeof(unsigned short *)
#endif /* _FT1000IOCTLH_ */

