staging: unisys: fix CamelCase struct name NetworkPolicy
[deliverable/linux.git] / drivers / staging / unisys / include / uisqueue.h
1 /* uisqueue.h
2 *
3 * Copyright (C) 2010 - 2013 UNISYS CORPORATION
4 * All rights reserved.
5 *
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by
8 * the Free Software Foundation; either version 2 of the License, or (at
9 * your option) any later version.
10 *
11 * This program is distributed in the hope that it will be useful, but
12 * WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, GOOD TITLE or
14 * NON INFRINGEMENT. See the GNU General Public License for more
15 * details.
16 */
17
18 /*
19 * Unisys IO Virtualization header NOTE: This file contains only Linux
20 * specific structs. All OS-independent structs are in iochannel.h.xx
21 */
22
23 #ifndef __UISQUEUE_H__
24 #define __UISQUEUE_H__
25
26 #include "linux/version.h"
27 #include "iochannel.h"
28 #include "uniklog.h"
29 #include <linux/atomic.h>
30 #include <linux/semaphore.h>
31 #include <linux/uuid.h>
32
33 #include "controlvmchannel.h"
34 #include "controlvmcompletionstatus.h"
35
36 struct uisqueue_info {
37
38 CHANNEL_HEADER __iomem *chan;
39 /* channel containing queues in which scsi commands &
40 * responses are queued
41 */
42 u64 packets_sent;
43 u64 packets_received;
44 u64 interrupts_sent;
45 u64 interrupts_received;
46 u64 max_not_empty_cnt;
47 u64 total_wakeup_cnt;
48 u64 non_empty_wakeup_cnt;
49
50 struct {
51 SIGNAL_QUEUE_HEADER reserved1; /* */
52 SIGNAL_QUEUE_HEADER reserved2; /* */
53 } safe_uis_queue;
54 unsigned int (*send_int_if_needed)(struct uisqueue_info *info,
55 unsigned int whichcqueue,
56 unsigned char issue_irq_if_empty,
57 u64 irq_handle,
58 unsigned char io_termination);
59 };
60
61 /* uisqueue_put_cmdrsp_with_lock_client queues a commmand or response
62 * to the specified queue, at the tail if the queue is full but
63 * oktowait == 0, then it return 0 indicating failure. otherwise it
64 * wait for the queue to become non-full. If command is queued, return
65 * 1 for success.
66 */
67 #define DONT_ISSUE_INTERRUPT 0
68 #define ISSUE_INTERRUPT 1
69
70 #define DONT_WAIT 0
71 #define OK_TO_WAIT 1
72 #define UISLIB_LOCK_PREFIX \
73 ".section .smp_locks,\"a\"\n" \
74 _ASM_ALIGN "\n" \
75 _ASM_PTR "661f\n" /* address */ \
76 ".previous\n" \
77 "661:\n\tlock; "
78
79 unsigned long long uisqueue_interlocked_or(unsigned long long __iomem *tgt,
80 unsigned long long set);
81 unsigned long long uisqueue_interlocked_and(unsigned long long __iomem *tgt,
82 unsigned long long set);
83
84 int uisqueue_put_cmdrsp_with_lock_client(struct uisqueue_info *queueinfo,
85 struct uiscmdrsp *cmdrsp,
86 unsigned int queue,
87 void *insertlock,
88 unsigned char issue_irq_if_empty,
89 u64 irq_handle,
90 char oktowait,
91 u8 *channel_id);
92
93 /* uisqueue_get_cmdrsp gets the cmdrsp entry at the head of the queue
94 * and copies it to the area pointed by cmdrsp param.
95 * returns 0 if queue is empty, 1 otherwise
96 */
97 int
98
99 uisqueue_get_cmdrsp(struct uisqueue_info *queueinfo, void *cmdrsp,
100 unsigned int queue);
101
102 #define MAX_NAME_SIZE_UISQUEUE 64
103
104 struct extport_info {
105 u8 valid:1;
106 /* if 1, indicates this extport slot is occupied
107 * if 0, indicates that extport slot is unoccupied */
108
109 u32 num_devs_using;
110 /* When extport is added, this is set to 0. For exports
111 * located in NETWORK switches:
112 * Each time a VNIC, i.e., intport, is added to the switch this
113 * is used to assign a pref_pnic for the VNIC and when assigned
114 * to a VNIC this counter is incremented. When a VNIC is
115 * deleted, the extport corresponding to the VNIC's pref_pnic
116 * is located and its num_devs_using is decremented. For VNICs,
117 * num_devs_using is basically used to load-balance transmit
118 * traffic from VNICs.
119 */
120
121 struct switch_info *swtch;
122 struct PciId pci_id;
123 char name[MAX_NAME_SIZE_UISQUEUE];
124 union {
125 struct vhba_wwnn wwnn;
126 unsigned char macaddr[MAX_MACADDR_LEN];
127 };
128 };
129
130 struct device_info {
131 void __iomem *chanptr;
132 u64 channel_addr;
133 u64 channel_bytes;
134 uuid_le channel_uuid;
135 uuid_le instance_uuid;
136 struct InterruptInfo intr;
137 struct switch_info *swtch;
138 char devid[30]; /* "vbus<busno>:dev<devno>" */
139 u16 polling;
140 struct semaphore interrupt_callback_lock;
141 u32 bus_no;
142 u32 dev_no;
143 int (*interrupt)(void *);
144 void *interrupt_context;
145 void *private_data;
146 struct list_head list_polling_device_channels;
147 unsigned long long moved_to_tail_cnt;
148 unsigned long long first_busy_cnt;
149 unsigned long long last_on_list_cnt;
150 };
151
152 typedef enum {
153 RECOVERY_LAN = 1,
154 IB_LAN = 2
155 } SWITCH_TYPE;
156
157 struct bus_info {
158 u32 busNo, deviceCount;
159 struct device_info **device;
160 u64 guestHandle, recvBusInterruptHandle;
161 uuid_le busInstGuid;
162 ULTRA_VBUS_CHANNEL_PROTOCOL __iomem *pBusChannel;
163 int busChannelBytes;
164 struct proc_dir_entry *proc_dir; /* proc/uislib/vbus/<x> */
165 struct proc_dir_entry *proc_info; /* proc/uislib/vbus/<x>/info */
166 char name[25];
167 char partitionName[99];
168 struct bus_info *next;
169 u8 localVnic; /* 1 if local vnic created internally
170 * by IOVM; 0 otherwise... */
171 };
172
173 #define DEDICATED_SWITCH(s) ((s->extPortCount == 1) && \
174 (s->intPortCount == 1))
175
176 struct sn_list_entry {
177 struct uisscsi_dest pdest; /* scsi bus, target, lun for
178 * phys disk */
179 u8 sernum[MAX_SERIAL_NUM]; /* serial num of physical
180 * disk.. The length is always
181 * MAX_SERIAL_NUM, padded with
182 * spaces */
183 struct sn_list_entry *next;
184 };
185
186 struct network_policy {
187 u32 promiscuous:1;
188 u32 macassign:1;
189 u32 peerforwarding:1;
190 u32 nonotify:1;
191 u32 standby:1;
192 u32 callhome:2;
193 char ip_addr[30];
194 };
195
196 /*
197 * IO messages sent to UisnicControlChanFunc & UissdControlChanFunc by
198 * code that processes the ControlVm channel messages.
199 */
200
201
202 typedef enum {
203 IOPART_ADD_VNIC,
204 IOPART_DEL_VNIC,
205 IOPART_DEL_ALL_VNICS,
206 IOPART_ADD_VHBA,
207 IOPART_ADD_VDISK,
208 IOPART_DEL_VHBA,
209 IOPART_DEL_VDISK,
210 IOPART_DEL_ALL_VDISKS_FOR_VHBA,
211 IOPART_DEL_ALL_VHBAS,
212 IOPART_ATTACH_PHBA,
213 IOPART_DETACH_PHBA, /* 10 */
214 IOPART_ATTACH_PNIC,
215 IOPART_DETACH_PNIC,
216 IOPART_DETACH_VHBA,
217 IOPART_DETACH_VNIC,
218 IOPART_PAUSE_VDISK,
219 IOPART_RESUME_VDISK,
220 IOPART_ADD_DEVICE, /* add generic device */
221 IOPART_DEL_DEVICE, /* del generic device */
222 } IOPART_MSG_TYPE;
223
224 struct add_virt_iopart {
225 void *chanptr; /* pointer to data channel */
226 u64 guestHandle; /* used to convert guest physical
227 * address to real physical address
228 * for DMA, for ex. */
229 u64 recvBusInterruptHandle; /* used to register to receive
230 * bus level interrupts. */
231 struct InterruptInfo intr; /* contains recv & send
232 * interrupt info */
233 /* recvInterruptHandle is used to register to receive
234 * interrupts on the data channel. Used by GuestLinux/Windows
235 * IO drivers to connect to interrupt. sendInterruptHandle is
236 * used by IOPart drivers as parameter to
237 * Issue_VMCALL_IO_QUEUE_TRANSITION to interrupt thread in
238 * guest linux/windows IO drivers when data channel queue for
239 * vhba/vnic goes from EMPTY to NON-EMPTY. */
240 struct switch_info *swtch; /* pointer to the virtual
241 * switch to which the vnic is
242 * connected */
243
244 u8 useG2GCopy; /* Used to determine if a virtual HBA
245 * needs to use G2G copy. */
246 u8 Filler[7];
247
248 u32 busNo;
249 u32 devNo;
250 char *params;
251 ulong params_bytes;
252
253 };
254
255 struct add_vdisk_iopart {
256 void *chanptr; /* pointer to data channel */
257 int implicit;
258 struct uisscsi_dest vdest; /* scsi bus, target, lun for virt disk */
259 struct uisscsi_dest pdest; /* scsi bus, target, lun for phys disk */
260 u8 sernum[MAX_SERIAL_NUM]; /* serial num of physical disk */
261 u32 serlen; /* length of serial num */
262 u32 busNo;
263 u32 devNo;
264 };
265
266 struct del_vdisk_iopart {
267 void *chanptr; /* pointer to data channel */
268 struct uisscsi_dest vdest; /* scsi bus, target, lun for virt disk */
269 u32 busNo;
270 u32 devNo;
271 };
272
273 struct del_virt_iopart {
274 void *chanptr; /* pointer to data channel */
275 u32 busNo;
276 u32 devNo;
277 };
278
279 struct det_virt_iopart { /* detach internal port */
280 void *chanptr; /* pointer to data channel */
281 struct switch_info *swtch;
282 };
283
284 struct paures_vdisk_iopart {
285 void *chanptr; /* pointer to data channel */
286 struct uisscsi_dest vdest; /* scsi bus, target, lun for virt disk */
287 };
288
289 struct add_switch_iopart { /* add switch */
290 struct switch_info *swtch;
291 char *params;
292 ulong params_bytes;
293 };
294
295 struct del_switch_iopart { /* destroy switch */
296 struct switch_info *swtch;
297 };
298
299 struct io_msgs {
300
301 IOPART_MSG_TYPE msgtype;
302
303 /* additional params needed by some messages */
304 union {
305 struct add_virt_iopart add_vhba;
306 struct add_virt_iopart add_vnic;
307 struct add_vdisk_iopart add_vdisk;
308 struct del_virt_iopart del_vhba;
309 struct del_virt_iopart del_vnic;
310 struct det_virt_iopart det_vhba;
311 struct det_virt_iopart det_vnic;
312 struct del_vdisk_iopart del_vdisk;
313 struct del_virt_iopart del_all_vdisks_for_vhba;
314 struct add_virt_iopart add_device;
315 struct del_virt_iopart del_device;
316 struct det_virt_iopart det_intport;
317 struct add_switch_iopart add_switch;
318 struct del_switch_iopart del_switch;
319 struct extport_info *extPort; /* for attach or detach
320 * pnic/generic delete all
321 * vhbas/allvnics need no
322 * parameters */
323 struct paures_vdisk_iopart paures_vdisk;
324 };
325 };
326
327 /*
328 * Guest messages sent to VirtControlChanFunc by code that processes
329 * the ControlVm channel messages.
330 */
331
332 typedef enum {
333 GUEST_ADD_VBUS,
334 GUEST_ADD_VHBA,
335 GUEST_ADD_VNIC,
336 GUEST_DEL_VBUS,
337 GUEST_DEL_VHBA,
338 GUEST_DEL_VNIC,
339 GUEST_DEL_ALL_VHBAS,
340 GUEST_DEL_ALL_VNICS,
341 GUEST_DEL_ALL_VBUSES, /* deletes all vhbas & vnics on all
342 * buses and deletes all buses */
343 GUEST_PAUSE_VHBA,
344 GUEST_PAUSE_VNIC,
345 GUEST_RESUME_VHBA,
346 GUEST_RESUME_VNIC
347 } GUESTPART_MSG_TYPE;
348
349 struct add_vbus_guestpart {
350 void __iomem *chanptr; /* pointer to data channel for bus -
351 * NOT YET USED */
352 u32 busNo; /* bus number to be created/deleted */
353 u32 deviceCount; /* max num of devices on bus */
354 uuid_le busTypeGuid; /* indicates type of bus */
355 uuid_le busInstGuid; /* instance guid for device */
356 };
357
358 struct del_vbus_guestpart {
359 u32 busNo; /* bus number to be deleted */
360 /* once we start using the bus's channel, add can dump busNo
361 * into the channel header and then delete will need only one
362 * parameter, chanptr. */
363 };
364
365 struct add_virt_guestpart {
366 void __iomem *chanptr; /* pointer to data channel */
367 u32 busNo; /* bus number for the operation */
368 u32 deviceNo; /* number of device on the bus */
369 uuid_le devInstGuid; /* instance guid for device */
370 struct InterruptInfo intr; /* recv/send interrupt info */
371 /* recvInterruptHandle contains info needed in order to
372 * register to receive interrupts on the data channel.
373 * sendInterruptHandle contains handle which is provided to
374 * monitor VMCALL that will cause an interrupt to be generated
375 * for the other end.
376 */
377 };
378
379 struct pause_virt_guestpart {
380 void __iomem *chanptr; /* pointer to data channel */
381 };
382
383 struct resume_virt_guestpart {
384 void __iomem *chanptr; /* pointer to data channel */
385 };
386
387 struct del_virt_guestpart {
388 void __iomem *chanptr; /* pointer to data channel */
389 };
390
391 struct init_chipset_guestpart {
392 u32 busCount; /* indicates the max number of busses */
393 u32 switchCount; /* indicates the max number of switches */
394 };
395
396 struct guest_msgs {
397
398 GUESTPART_MSG_TYPE msgtype;
399
400 /* additional params needed by messages */
401 union {
402 struct add_vbus_guestpart add_vbus;
403 struct add_virt_guestpart add_vhba;
404 struct add_virt_guestpart add_vnic;
405 struct pause_virt_guestpart pause_vhba;
406 struct pause_virt_guestpart pause_vnic;
407 struct resume_virt_guestpart resume_vhba;
408 struct resume_virt_guestpart resume_vnic;
409 struct del_vbus_guestpart del_vbus;
410 struct del_virt_guestpart del_vhba;
411 struct del_virt_guestpart del_vnic;
412 struct del_vbus_guestpart del_all_vhbas;
413 struct del_vbus_guestpart del_all_vnics;
414 /* del_all_vbuses needs no parameters */
415 };
416 struct init_chipset_guestpart init_chipset;
417
418 };
419
420 #endif /* __UISQUEUE_H__ */
This page took 0.053465 seconds and 5 git commands to generate.