1 //---------------------------------------------------------------------------
2 // FT1000 driver for Flarion Flash OFDM NIC Device
3 //
4 // Copyright (C) 2002 Flarion Technologies, All rights reserved.
5 //
6 // This program is free software; you can redistribute it and/or modify it
7 // under the terms of the GNU General Public License as published by the Free
8 // Software Foundation; either version 2 of the License, or (at your option) any
9 // later version. This program is distributed in the hope that it will be useful,
10 // but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
11 // or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
12 // more details. You should have received a copy of the GNU General Public
13 // License along with this program; if not, write to the
14 // Free Software Foundation, Inc., 59 Temple Place -
15 // Suite 330, Boston, MA 02111-1307, USA.
16 //---------------------------------------------------------------------------
17 //
18 // File:         ft1000_ioctl.h
19 //
20 // Description:    Common structures and defines relating to IOCTL
21 //
22 // History:
23 // 11/5/02    Whc                Created.
24 //
25 //---------------------------------------------------------------------------//---------------------------------------------------------------------------
26 #ifndef _FT1000IOCTLH_
27 #define _FT1000IOCTLH_
28 
29 #define DSPVERSZ                4
30 #define HWSERNUMSZ              16
31 #define SKUSZ                   20
32 #define EUISZ                   8
33 #define CALVERSZ                2
34 #define CALDATESZ               6
35 
36 #define MAX_DNLD_BLKSZ          1024
37 
38 // Standard Flarion Pseudo header
39 struct pseudo_hdr {
40    unsigned short    length;           //length of msg body
41    unsigned char     source;           //source address (0x10=Host 0x20=DSP)
42    unsigned char     destination;      //destination address (refer to source address)
43    unsigned char     portdest;         //destination port id
44                                        //    0x00=Driver
45                                        //    0x10=Application Broadcast
46                                        //    0x20=Network Stack
47                                        //    0x80=Dsp OAM
48                                        //    0x90=Dsp Airlink
49                                        //    0xa0=Dsp Loader
50                                        //    0xb0=Dsp MIP
51    unsigned char     portsrc;          //source port id (refer to portdest)
52    unsigned short    sh_str_id;        //stream id (Not applicable on Mobile)
53    unsigned char     control;          //stream id (Not applicable on Mobile)
54    unsigned char     rsvd1;            //reserved
55    unsigned char     seq_num;          //sequence number
56    unsigned char     rsvd2;            //reserved
57    unsigned short    qos_class;        //Quality of Service class (Not applicable on Mobile)
58    unsigned short    checksum;         //Pseudo header checksum
59 } __attribute__ ((packed));
60 
61 typedef struct _IOCTL_GET_VER
62 {
63     unsigned long drv_ver;
64 } __attribute__ ((packed)) IOCTL_GET_VER, *PIOCTL_GET_VER;
65 
66 //Data structure for Dsp statistics
67 typedef struct _IOCTL_GET_DSP_STAT
68 {
69     unsigned char DspVer[DSPVERSZ];        // DSP version number
70     unsigned char HwSerNum[HWSERNUMSZ];    // Hardware Serial Number
71     unsigned char Sku[SKUSZ];              // SKU
72     unsigned char eui64[EUISZ];            // EUI64
73     unsigned short ConStat;                // Connection Status
74                                 //    Bits 0-3 = Connection Status Field
75                                 //               0000=Idle (Disconnect)
76                                 //               0001=Searching
77                                 //               0010=Active (Connected)
78                                 //               0011=Waiting for L2 down
79                                 //               0100=Sleep
80     unsigned short LedStat;                // Led Status
81                                 //    Bits 0-3   = Signal Strength Field
82                                 //                 0000 = -105dBm to -92dBm
83                                 //                 0001 = -92dBm to -85dBm
84                                 //                 0011 = -85dBm to -75dBm
85                                 //                 0111 = -75dBm to -50dBm
86                                 //                 1111 = -50dBm to 0dBm
87                                 //    Bits 4-7   = Reserved
88                                 //    Bits 8-11  = SNR Field
89                                 //                 0000 = <2dB
90                                 //                 0001 = 2dB to 8dB
91                                 //                 0011 = 8dB to 15dB
92                                 //                 0111 = 15dB to 22dB
93                                 //                 1111 = >22dB
94                                 //    Bits 12-15 = Reserved
95     unsigned long nTxPkts;                // Number of packets transmitted from host to dsp
96     unsigned long nRxPkts;                // Number of packets received from dsp to host
97     unsigned long nTxBytes;               // Number of bytes transmitted from host to dsp
98     unsigned long nRxBytes;               // Number of bytes received from dsp to host
99     unsigned long ConTm;                  // Current session connection time in seconds
100     unsigned char CalVer[CALVERSZ];       // Proprietary Calibration Version
101     unsigned char CalDate[CALDATESZ];     // Proprietary Calibration Date
102 } __attribute__ ((packed)) IOCTL_GET_DSP_STAT, *PIOCTL_GET_DSP_STAT;
103 
104 //Data structure for Dual Ported RAM messaging between Host and Dsp
105 typedef struct _IOCTL_DPRAM_BLK
106 {
107     unsigned short total_len;
108 	struct pseudo_hdr pseudohdr;
109     unsigned char buffer[1780];
110 } __attribute__ ((packed)) IOCTL_DPRAM_BLK, *PIOCTL_DPRAM_BLK;
111 
112 typedef struct _IOCTL_DPRAM_COMMAND
113 {
114     unsigned short extra;
115     IOCTL_DPRAM_BLK dpram_blk;
116 } __attribute__ ((packed)) IOCTL_DPRAM_COMMAND, *PIOCTL_DPRAM_COMMAND;
117 
118 //
119 // Custom IOCTL command codes
120 //
121 #define FT1000_MAGIC_CODE      'F'
122 
123 #define IOCTL_REGISTER_CMD					0
124 #define IOCTL_SET_DPRAM_CMD					3
125 #define IOCTL_GET_DPRAM_CMD					4
126 #define IOCTL_GET_DSP_STAT_CMD      6
127 #define IOCTL_GET_VER_CMD           7
128 #define IOCTL_CONNECT               10
129 #define IOCTL_DISCONNECT            11
130 
131 #define IOCTL_FT1000_GET_DSP_STAT _IOR (FT1000_MAGIC_CODE, IOCTL_GET_DSP_STAT_CMD, sizeof(IOCTL_GET_DSP_STAT) )
132 #define IOCTL_FT1000_GET_VER _IOR (FT1000_MAGIC_CODE, IOCTL_GET_VER_CMD, sizeof(IOCTL_GET_VER) )
133 #define IOCTL_FT1000_CONNECT _IOW (FT1000_MAGIC_CODE, IOCTL_CONNECT, 0 )
134 #define IOCTL_FT1000_DISCONNECT _IOW (FT1000_MAGIC_CODE, IOCTL_DISCONNECT, 0 )
135 #define IOCTL_FT1000_SET_DPRAM _IOW (FT1000_MAGIC_CODE, IOCTL_SET_DPRAM_CMD, sizeof(IOCTL_DPRAM_BLK) )
136 #define IOCTL_FT1000_GET_DPRAM _IOR (FT1000_MAGIC_CODE, IOCTL_GET_DPRAM_CMD, sizeof(IOCTL_DPRAM_BLK) )
137 #define IOCTL_FT1000_REGISTER  _IOW (FT1000_MAGIC_CODE, IOCTL_REGISTER_CMD, sizeof(unsigned short *) )
138 #endif // _FT1000IOCTLH_
139 
140