a648a1b64d0f2eef26b14e600d5068ffa64b3869
[linux-3.10.git] / drivers / staging / nvshm / nvshm_types.h
1 /*
2  * Copyright (C) 2012-2013 NVIDIA Corporation.
3  *
4  * This software is licensed under the terms of the GNU General Public
5  * License version 2, as published by the Free Software Foundation, and
6  * may be copied, distributed, and modified under those terms.
7  *
8  * This program is distributed in the hope that it will be useful,
9  * but WITHOUT ANY WARRANTY; without even the implied warranty of
10  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
11  * GNU General Public License for more details.
12  *
13  */
14
15 #ifndef _NVSHM_TYPES_H
16 #define _NVSHM_TYPES_H
17
18 #include <linux/platform_data/nvshm.h> /* NVSHM_SERIAL_BYTE_SIZE */
19
20 /* NVSHM common types */
21
22 /* Shared memory fixed offsets */
23
24 #define NVSHM_IPC_BASE (0x0)              /* IPC mailbox base offset */
25 #define NVSHM_IPC_MAILBOX (0x0)           /* IPC mailbox offset */
26 #define NVSHM_IPC_RETCODE (0x4)           /* IPC mailbox return code offset */
27 #define NVSHM_IPC_SIZE (4096)             /* IPC mailbox region size */
28 #define NVSHM_CONFIG_OFFSET (8)           /* shared memory config offset */
29 #define NVSHM_MAX_CHANNELS (12)           /* Maximum number of channels */
30 #define NVSHM_CHAN_NAME_SIZE (27)         /* max channel name size in chars */
31
32 /* Versions: */
33 /* Original version */
34 #define NVSHM_CONFIG_ORIGINAL_VERSION (0x00010001)
35 /** Serial version: support for SHM serial version in SHM
36  *  config: SHM serial version is PCID */
37 #define NVSHM_CONFIG_SERIAL_VERSION (0x00010002)
38 /** Current configuration version (major/minor) */
39 #define NVSHM_CONFIG_VERSION NVSHM_CONFIG_SERIAL_VERSION
40
41
42 #define NVSHM_AP_POOL_ID (128) /* IOPOOL ID - use 128-255 for AP */
43
44 #define NVSHM_RATE_LIMIT_TTY (256)
45 #define NVSHM_RATE_LIMIT_LOG (512)
46 #define NVSHM_RATE_LIMIT_NET (2048)
47 #define NVSHM_RATE_LIMIT_TRESHOLD (8)
48
49 /* NVSHM_IPC mailbox messages ids */
50 enum nvshm_ipc_mailbox {
51         /* Boot status */
52         NVSHM_IPC_BOOT_COLD_BOOT_IND = 0x01,
53         NVSHM_IPC_BOOT_FW_REQ,
54         NVSHM_IPC_BOOT_RESTART_FW_REQ,
55         NVSHM_IPC_BOOT_FW_CONF,
56         NVSHM_IPC_READY,
57
58         /* Boot errors */
59         NVSHM_IPC_BOOT_ERROR_BT2_HDR = 0x1000,
60         NVSHM_IPC_BOOT_ERROR_BT2_SIGN,
61         NVSHM_IPC_BOOT_ERROR_HWID,
62         NVSHM_IPC_BOOT_ERROR_APP_HDR,
63         NVSHM_IPC_BOOT_ERROR_APP_SIGN,
64         NVSHM_IPC_BOOT_ERROR_UNLOCK_HEADER,
65         NVSHM_IPC_BOOT_ERROR_UNLOCK_SIGN,
66         NVSHM_IPC_BOOT_ERROR_UNLOCK_PCID,
67
68         NVSHM_IPC_MAX_MSG = 0xFFFF
69 };
70
71 /* NVSHM Config */
72
73 /* Channel type */
74 enum nvshm_chan_type {
75         NVSHM_CHAN_UNMAP = 0,
76         NVSHM_CHAN_TTY,
77         NVSHM_CHAN_LOG,
78         NVSHM_CHAN_NET,
79 };
80
81 /* Channel mapping structure */
82 struct nvshm_chan_map {
83         /* tty/net/log */
84         int type;
85         /* Name of device - reflected in sysfs */
86         char name[NVSHM_CHAN_NAME_SIZE+1];
87 };
88
89 /*
90  * This structure is set by BB after boot to give AP its current shmem mapping
91  * BB initialize all descriptor content and give initial empty element
92  * for each queue
93  * BB enqueue free AP descriptor element into AP queue
94  * AP initialize its queues pointer with empty descriptors offset
95  * and retreive its decriptors
96  * from ap queue.
97  */
98 struct nvshm_config {
99         int version;
100         int shmem_size;
101         int region_ap_desc_offset;
102         int region_ap_desc_size;
103         int region_bb_desc_offset;
104         int region_bb_desc_size;
105         int region_ap_data_offset;
106         int region_ap_data_size;
107         int region_bb_data_offset;
108         int region_bb_data_size;
109         int queue_ap_offset;
110         int queue_bb_offset;
111         struct nvshm_chan_map chan_map[NVSHM_MAX_CHANNELS];
112         char serial[NVSHM_SERIAL_BYTE_SIZE];
113 };
114
115 /*
116  * This structure holds data fragments reference
117  * WARNING: ALL POINTERS ARE IN BASEBAND MAPPING
118  * NO POINTER SHOULD BE USED WITHOUT PROPER MACRO
119  * see nvshm_iobuf.h for reference
120  */
121 struct nvshm_iobuf {
122         /* Standard iobuf part - This part is fixed and cannot be changed */
123         unsigned char   *npduData;
124         unsigned short   length;
125         unsigned short   dataOffset;
126         unsigned short   totalLength;
127         unsigned char ref;
128         unsigned char pool_id;
129         struct nvshm_iobuf *next;
130         struct nvshm_iobuf *sg_next;
131         unsigned short flags;
132         unsigned short _size;
133         void *_handle;
134         unsigned int _reserved;
135
136         /* Extended iobuf - This part is not yet fixed (under spec/review) */
137         struct nvshm_iobuf *qnext;
138         int chan;
139         int qflags;
140         int _reserved1;
141         int _reserved2;
142         int _reserved3;
143         int _reserved4;
144         int _reserved5;
145 };
146
147 /* channel structure */
148 struct nvshm_channel {
149         int index;
150         struct nvshm_chan_map map;
151         struct nvshm_if_operations *ops;
152         void *data;
153         int rate_counter;
154 };
155
156
157 #endif /* _NVSHM_TYPES_H */