staging: nvshm: create new communication channel for RPC
[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_RPC (256)
48 #define NVSHM_RATE_LIMIT_TRESHOLD (8)
49
50 /* NVSHM_IPC mailbox messages ids */
51 enum nvshm_ipc_mailbox {
52         /* Boot status */
53         NVSHM_IPC_BOOT_COLD_BOOT_IND = 0x01,
54         NVSHM_IPC_BOOT_FW_REQ,
55         NVSHM_IPC_BOOT_RESTART_FW_REQ,
56         NVSHM_IPC_BOOT_FW_CONF,
57         NVSHM_IPC_READY,
58
59         /* Boot errors */
60         NVSHM_IPC_BOOT_ERROR_BT2_HDR = 0x1000,
61         NVSHM_IPC_BOOT_ERROR_BT2_SIGN,
62         NVSHM_IPC_BOOT_ERROR_HWID,
63         NVSHM_IPC_BOOT_ERROR_APP_HDR,
64         NVSHM_IPC_BOOT_ERROR_APP_SIGN,
65         NVSHM_IPC_BOOT_ERROR_UNLOCK_HEADER,
66         NVSHM_IPC_BOOT_ERROR_UNLOCK_SIGN,
67         NVSHM_IPC_BOOT_ERROR_UNLOCK_PCID,
68
69         NVSHM_IPC_MAX_MSG = 0xFFFF
70 };
71
72 /* NVSHM Config */
73
74 /* Channel type */
75 enum nvshm_chan_type {
76         NVSHM_CHAN_UNMAP = 0,
77         NVSHM_CHAN_TTY,
78         NVSHM_CHAN_LOG,
79         NVSHM_CHAN_NET,
80         NVSHM_CHAN_RPC,
81 };
82
83 /* Channel mapping structure */
84 struct nvshm_chan_map {
85         /* tty/net/log */
86         int type;
87         /* Name of device - reflected in sysfs */
88         char name[NVSHM_CHAN_NAME_SIZE+1];
89 };
90
91 /*
92  * This structure is set by BB after boot to give AP its current shmem mapping
93  * BB initialize all descriptor content and give initial empty element
94  * for each queue
95  * BB enqueue free AP descriptor element into AP queue
96  * AP initialize its queues pointer with empty descriptors offset
97  * and retreive its decriptors
98  * from ap queue.
99  */
100 struct nvshm_config {
101         int version;
102         int shmem_size;
103         int region_ap_desc_offset;
104         int region_ap_desc_size;
105         int region_bb_desc_offset;
106         int region_bb_desc_size;
107         int region_ap_data_offset;
108         int region_ap_data_size;
109         int region_bb_data_offset;
110         int region_bb_data_size;
111         int queue_ap_offset;
112         int queue_bb_offset;
113         struct nvshm_chan_map chan_map[NVSHM_MAX_CHANNELS];
114         char serial[NVSHM_SERIAL_BYTE_SIZE];
115 };
116
117 /*
118  * This structure holds data fragments reference
119  * WARNING: ALL POINTERS ARE IN BASEBAND MAPPING
120  * NO POINTER SHOULD BE USED WITHOUT PROPER MACRO
121  * see nvshm_iobuf.h for reference
122  */
123 struct nvshm_iobuf {
124         /* Standard iobuf part - This part is fixed and cannot be changed */
125         unsigned char   *npduData;
126         unsigned short   length;
127         unsigned short   dataOffset;
128         unsigned short   totalLength;
129         unsigned char ref;
130         unsigned char pool_id;
131         struct nvshm_iobuf *next;
132         struct nvshm_iobuf *sg_next;
133         unsigned short flags;
134         unsigned short _size;
135         void *_handle;
136         unsigned int _reserved;
137
138         /* Extended iobuf - This part is not yet fixed (under spec/review) */
139         struct nvshm_iobuf *qnext;
140         int chan;
141         int qflags;
142         int _reserved1;
143         int _reserved2;
144         int _reserved3;
145         int _reserved4;
146         int _reserved5;
147 };
148
149 /* channel structure */
150 struct nvshm_channel {
151         int index;
152         struct nvshm_chan_map map;
153         struct nvshm_if_operations *ops;
154         void *data;
155         int rate_counter;
156 };
157
158
159 #endif /* _NVSHM_TYPES_H */