pandora: defconfig: update
[pandora-kernel.git] / drivers / staging / crystalhd / bc_dts_glob_lnx.h
1 /********************************************************************
2  * Copyright(c) 2006-2009 Broadcom Corporation.
3  *
4  *  Name: bc_dts_glob_lnx.h
5  *
6  *  Description: Wrapper to Windows dts_glob.h for Link-Linux usage.
7  *               The idea is to define additional Linux related defs
8  *               in this file to avoid changes to existing Windows
9  *               glob file.
10  *
11  *  AU
12  *
13  *  HISTORY:
14  *
15  ********************************************************************
16  * This header is free software: you can redistribute it and/or modify
17  * it under the terms of the GNU Lesser General Public License as published
18  * by the Free Software Foundation, either version 2.1 of the License.
19  *
20  * This header is distributed in the hope that it will be useful,
21  * but WITHOUT ANY WARRANTY; without even the implied warranty of
22  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
23  * GNU Lesser General Public License for more details.
24  * You should have received a copy of the GNU Lesser General Public License
25  * along with this header.  If not, see <http://www.gnu.org/licenses/>.
26  *******************************************************************/
27
28 #ifndef _BC_DTS_GLOB_LNX_H_
29 #define _BC_DTS_GLOB_LNX_H_
30
31 #ifdef __LINUX_USER__
32 #include <stdio.h>
33 #include <stdlib.h>
34 #include <unistd.h>
35 #include <fcntl.h>
36 #include <ctype.h>
37 #include <string.h>
38 #include <errno.h>
39 #include <netdb.h>
40 #include <sys/time.h>
41 #include <time.h>
42 #include <arpa/inet.h>
43 #include <linux/param.h>
44 #include <linux/ioctl.h>
45 #include <sys/select.h>
46
47 #define DRVIFLIB_INT_API
48
49 #endif
50
51 #include "bc_dts_defs.h"
52 #include "bcm_70012_regs.h"     /* Link Register defs */
53
54 #define CRYSTALHD_API_NAME      "crystalhd"
55 #define CRYSTALHD_API_DEV_NAME  "/dev/crystalhd"
56
57 /*
58  * These are SW stack tunable parameters shared
59  * between the driver and the application.
60  */
61 enum BC_DTS_GLOBALS {
62         BC_MAX_FW_CMD_BUFF_SZ   = 0x40,         /* FW passthrough cmd/rsp buffer size */
63         PCI_CFG_SIZE            = 256,          /* PCI config size buffer */
64         BC_IOCTL_DATA_POOL_SIZE = 8,            /* BC_IOCTL_DATA Pool size */
65         BC_LINK_MAX_OPENS       = 3,            /* Maximum simultaneous opens*/
66         BC_LINK_MAX_SGLS        = 1024,         /* Maximum SG elements 4M/4K */
67         BC_TX_LIST_CNT          = 2,            /* Max Tx DMA Rings */
68         BC_RX_LIST_CNT          = 8,            /* Max Rx DMA Rings*/
69         BC_PROC_OUTPUT_TIMEOUT  = 3000,         /* Milliseconds */
70         BC_INFIFO_THRESHOLD     = 0x10000,
71 };
72
73 struct BC_CMD_REG_ACC {
74         uint32_t                Offset;
75         uint32_t                Value;
76 };
77
78 struct BC_CMD_DEV_MEM {
79         uint32_t                StartOff;
80         uint32_t                NumDwords;
81         uint32_t                Rsrd;
82 };
83
84 /* FW Passthrough command structure */
85 enum bc_fw_cmd_flags {
86         BC_FW_CMD_FLAGS_NONE    = 0,
87         BC_FW_CMD_PIB_QS        = 0x01,
88 };
89
90 struct BC_FW_CMD {
91         uint32_t                cmd[BC_MAX_FW_CMD_BUFF_SZ];
92         uint32_t                rsp[BC_MAX_FW_CMD_BUFF_SZ];
93         uint32_t                flags;
94         uint32_t                add_data;
95 };
96
97 struct BC_HW_TYPE {
98         uint16_t                PciDevId;
99         uint16_t                PciVenId;
100         uint8_t                 HwRev;
101         uint8_t                 Align[3];
102 };
103
104 struct BC_PCI_CFG {
105         uint32_t                Size;
106         uint32_t                Offset;
107         uint8_t                 pci_cfg_space[PCI_CFG_SIZE];
108 };
109
110 struct BC_VERSION_INFO {
111         uint8_t                 DriverMajor;
112         uint8_t                 DriverMinor;
113         uint16_t                DriverRevision;
114 };
115
116 struct BC_START_RX_CAP {
117         uint32_t                Rsrd;
118         uint32_t                StartDeliveryThsh;
119         uint32_t                PauseThsh;
120         uint32_t                ResumeThsh;
121 };
122
123 struct BC_FLUSH_RX_CAP {
124         uint32_t                Rsrd;
125         uint32_t                bDiscardOnly;
126 };
127
128 struct BC_DTS_STATS {
129         uint8_t                 drvRLL;
130         uint8_t                 drvFLL;
131         uint8_t                 eosDetected;
132         uint8_t                 pwr_state_change;
133
134         /* Stats from App */
135         uint32_t                opFrameDropped;
136         uint32_t                opFrameCaptured;
137         uint32_t                ipSampleCnt;
138         uint64_t                ipTotalSize;
139         uint32_t                reptdFrames;
140         uint32_t                pauseCount;
141         uint32_t                pibMisses;
142         uint32_t                discCounter;
143
144         /* Stats from Driver */
145         uint32_t                TxFifoBsyCnt;
146         uint32_t                intCount;
147         uint32_t                DrvIgnIntrCnt;
148         uint32_t                DrvTotalFrmDropped;
149         uint32_t                DrvTotalHWErrs;
150         uint32_t                DrvTotalPIBFlushCnt;
151         uint32_t                DrvTotalFrmCaptured;
152         uint32_t                DrvPIBMisses;
153         uint32_t                DrvPauseTime;
154         uint32_t                DrvRepeatedFrms;
155         uint32_t                res1[13];
156
157 };
158
159 struct BC_PROC_INPUT {
160         uint8_t                 *pDmaBuff;
161         uint32_t                BuffSz;
162         uint8_t                 Mapped;
163         uint8_t                 Encrypted;
164         uint8_t                 Rsrd[2];
165         uint32_t                DramOffset;     /* For debug use only */
166 };
167
168 struct BC_DEC_YUV_BUFFS {
169         uint32_t                b422Mode;
170         uint8_t                 *YuvBuff;
171         uint32_t                YuvBuffSz;
172         uint32_t                UVbuffOffset;
173         uint32_t                YBuffDoneSz;
174         uint32_t                UVBuffDoneSz;
175         uint32_t                RefCnt;
176 };
177
178 enum DECOUT_COMPLETION_FLAGS {
179         COMP_FLAG_NO_INFO       = 0x00,
180         COMP_FLAG_FMT_CHANGE    = 0x01,
181         COMP_FLAG_PIB_VALID     = 0x02,
182         COMP_FLAG_DATA_VALID    = 0x04,
183         COMP_FLAG_DATA_ENC      = 0x08,
184         COMP_FLAG_DATA_BOT      = 0x10,
185 };
186
187 struct BC_DEC_OUT_BUFF {
188         struct BC_DEC_YUV_BUFFS OutPutBuffs;
189         struct BC_PIC_INFO_BLOCK PibInfo;
190         uint32_t                Flags;
191         uint32_t                BadFrCnt;
192 };
193
194 struct BC_NOTIFY_MODE {
195         uint32_t                Mode;
196         uint32_t                Rsvr[3];
197 };
198
199 struct BC_CLOCK {
200         uint32_t                clk;
201         uint32_t                Rsvr[3];
202 };
203
204 struct BC_IOCTL_DATA {
205         enum BC_STATUS          RetSts;
206         uint32_t                IoctlDataSz;
207         uint32_t                Timeout;
208         union {
209                 struct BC_CMD_REG_ACC   regAcc;
210                 struct BC_CMD_DEV_MEM   devMem;
211                 struct BC_FW_CMD        fwCmd;
212                 struct BC_HW_TYPE       hwType;
213                 struct BC_PCI_CFG       pciCfg;
214                 struct BC_VERSION_INFO  VerInfo;
215                 struct BC_PROC_INPUT    ProcInput;
216                 struct BC_DEC_YUV_BUFFS RxBuffs;
217                 struct BC_DEC_OUT_BUFF  DecOutData;
218                 struct BC_START_RX_CAP  RxCap;
219                 struct BC_FLUSH_RX_CAP  FlushRxCap;
220                 struct BC_DTS_STATS     drvStat;
221                 struct BC_NOTIFY_MODE   NotifyMode;
222                 struct BC_CLOCK         clockValue;
223         } u;
224         struct _BC_IOCTL_DATA   *next;
225 };
226
227 enum BC_DRV_CMD {
228         DRV_CMD_VERSION = 0,    /* Get SW version */
229         DRV_CMD_GET_HWTYPE,     /* Get HW version and type Dozer/Tank */
230         DRV_CMD_REG_RD,         /* Read Device Register */
231         DRV_CMD_REG_WR,         /* Write Device Register */
232         DRV_CMD_FPGA_RD,        /* Read FPGA Register */
233         DRV_CMD_FPGA_WR,        /* Wrtie FPGA Reister */
234         DRV_CMD_MEM_RD,         /* Read Device Memory */
235         DRV_CMD_MEM_WR,         /* Write Device Memory */
236         DRV_CMD_RD_PCI_CFG,     /* Read PCI Config Space */
237         DRV_CMD_WR_PCI_CFG,     /* Write the PCI Configuration Space*/
238         DRV_CMD_FW_DOWNLOAD,    /* Download Firmware */
239         DRV_ISSUE_FW_CMD,       /* Issue FW Cmd (pass through mode) */
240         DRV_CMD_PROC_INPUT,     /* Process Input Sample */
241         DRV_CMD_ADD_RXBUFFS,    /* Add Rx side buffers to driver pool */
242         DRV_CMD_FETCH_RXBUFF,   /* Get Rx DMAed buffer */
243         DRV_CMD_START_RX_CAP,   /* Start Rx Buffer Capture */
244         DRV_CMD_FLUSH_RX_CAP,   /* Stop the capture for now...we will enhance this later*/
245         DRV_CMD_GET_DRV_STAT,   /* Get Driver Internal Statistics */
246         DRV_CMD_RST_DRV_STAT,   /* Reset Driver Internal Statistics */
247         DRV_CMD_NOTIFY_MODE,    /* Notify the Mode to driver in which the application is Operating*/
248         DRV_CMD_CHANGE_CLOCK,   /* Change the core clock to either save power or improve performance */
249
250         /* MUST be the last one.. */
251         DRV_CMD_END,                    /* End of the List.. */
252 };
253
254 #define BC_IOC_BASE             'b'
255 #define BC_IOC_VOID             _IOC_NONE
256 #define BC_IOC_IOWR(nr, type)   _IOWR(BC_IOC_BASE, nr, type)
257 #define BC_IOCTL_MB             struct BC_IOCTL_DATA
258
259 #define BCM_IOC_GET_VERSION     BC_IOC_IOWR(DRV_CMD_VERSION, BC_IOCTL_MB)
260 #define BCM_IOC_GET_HWTYPE      BC_IOC_IOWR(DRV_CMD_GET_HWTYPE, BC_IOCTL_MB)
261 #define BCM_IOC_REG_RD          BC_IOC_IOWR(DRV_CMD_REG_RD, BC_IOCTL_MB)
262 #define BCM_IOC_REG_WR          BC_IOC_IOWR(DRV_CMD_REG_WR, BC_IOCTL_MB)
263 #define BCM_IOC_MEM_RD          BC_IOC_IOWR(DRV_CMD_MEM_RD, BC_IOCTL_MB)
264 #define BCM_IOC_MEM_WR          BC_IOC_IOWR(DRV_CMD_MEM_WR, BC_IOCTL_MB)
265 #define BCM_IOC_FPGA_RD         BC_IOC_IOWR(DRV_CMD_FPGA_RD, BC_IOCTL_MB)
266 #define BCM_IOC_FPGA_WR         BC_IOC_IOWR(DRV_CMD_FPGA_WR, BC_IOCTL_MB)
267 #define BCM_IOC_RD_PCI_CFG      BC_IOC_IOWR(DRV_CMD_RD_PCI_CFG, BC_IOCTL_MB)
268 #define BCM_IOC_WR_PCI_CFG      BC_IOC_IOWR(DRV_CMD_WR_PCI_CFG, BC_IOCTL_MB)
269 #define BCM_IOC_PROC_INPUT      BC_IOC_IOWR(DRV_CMD_PROC_INPUT, BC_IOCTL_MB)
270 #define BCM_IOC_ADD_RXBUFFS     BC_IOC_IOWR(DRV_CMD_ADD_RXBUFFS, BC_IOCTL_MB)
271 #define BCM_IOC_FETCH_RXBUFF    BC_IOC_IOWR(DRV_CMD_FETCH_RXBUFF, BC_IOCTL_MB)
272 #define BCM_IOC_FW_CMD          BC_IOC_IOWR(DRV_ISSUE_FW_CMD, BC_IOCTL_MB)
273 #define BCM_IOC_START_RX_CAP    BC_IOC_IOWR(DRV_CMD_START_RX_CAP, BC_IOCTL_MB)
274 #define BCM_IOC_FLUSH_RX_CAP    BC_IOC_IOWR(DRV_CMD_FLUSH_RX_CAP, BC_IOCTL_MB)
275 #define BCM_IOC_GET_DRV_STAT    BC_IOC_IOWR(DRV_CMD_GET_DRV_STAT, BC_IOCTL_MB)
276 #define BCM_IOC_RST_DRV_STAT    BC_IOC_IOWR(DRV_CMD_RST_DRV_STAT, BC_IOCTL_MB)
277 #define BCM_IOC_NOTIFY_MODE     BC_IOC_IOWR(DRV_CMD_NOTIFY_MODE, BC_IOCTL_MB)
278 #define BCM_IOC_FW_DOWNLOAD     BC_IOC_IOWR(DRV_CMD_FW_DOWNLOAD, BC_IOCTL_MB)
279 #define BCM_IOC_CHG_CLK         BC_IOC_IOWR(DRV_CMD_CHANGE_CLOCK, BC_IOCTL_MB)
280 #define BCM_IOC_END             BC_IOC_VOID
281
282 /* Wrapper for main IOCTL data */
283 struct crystalhd_ioctl_data {
284         struct BC_IOCTL_DATA    udata;          /* IOCTL from App..*/
285         uint32_t                u_id;           /* Driver specific user ID */
286         uint32_t                cmd;            /* Cmd ID for driver's use. */
287         void                    *add_cdata;     /* Additional command specific data..*/
288         uint32_t                add_cdata_sz;   /* Additional command specific data size */
289         struct crystalhd_ioctl_data *next;      /* List/Fifo management */
290 };
291
292 enum crystalhd_kmod_ver {
293         crystalhd_kmod_major    = 0,
294         crystalhd_kmod_minor    = 9,
295         crystalhd_kmod_rev      = 27,
296 };
297
298 #endif