1 /* SPDX-License-Identifier: GPL-2.0 */ 2 /* 3 * Copyright (C) 2010 - 2015 UNISYS CORPORATION 4 * All rights reserved. 5 */ 6 7 #ifndef __VBUSCHANNEL_H__ 8 #define __VBUSCHANNEL_H__ 9 10 /* 11 * The vbus channel is the channel area provided via the BUS_CREATE controlvm 12 * message for each virtual bus. This channel area is provided to both server 13 * and client ends of the bus. The channel header area is initialized by 14 * the server, and the remaining information is filled in by the client. 15 * We currently use this for the client to provide various information about 16 * the client devices and client drivers for the server end to see. 17 */ 18 19 #include <linux/uuid.h> 20 #include <linux/visorbus.h> 21 22 /* {193b331b-c58f-11da-95a9-00e08161165f} */ 23 #define VISOR_VBUS_CHANNEL_GUID \ 24 GUID_INIT(0x193b331b, 0xc58f, 0x11da, \ 25 0x95, 0xa9, 0x0, 0xe0, 0x81, 0x61, 0x16, 0x5f) 26 27 /* 28 * Must increment this whenever you insert or delete fields within this channel 29 * struct. Also increment whenever you change the meaning of fields within this 30 * channel struct so as to break pre-existing software. Note that you can 31 * usually add fields to the END of the channel struct withOUT needing to 32 * increment this. 33 */ 34 #define VISOR_VBUS_CHANNEL_VERSIONID 1 35 36 /* 37 * struct visor_vbus_deviceinfo 38 * @devtype: Short string identifying the device type. 39 * @drvname: Driver .sys file name. 40 * @infostrs: Kernel vversion. 41 * @reserved: Pad size to 256 bytes. 42 * 43 * An array of this struct is present in the channel area for each vbus. It is 44 * filled in by the client side to provide info about the device and driver from 45 * the client's perspective. 46 */ 47 struct visor_vbus_deviceinfo { 48 u8 devtype[16]; 49 u8 drvname[16]; 50 u8 infostrs[96]; 51 u8 reserved[128]; 52 } __packed; 53 54 /* 55 * struct visor_vbus_headerinfo 56 * @struct_bytes: Size of this struct in bytes. 57 * @device_info_struct_bytes: Size of VISOR_VBUS_DEVICEINFO. 58 * @dev_info_count: Num of items in DevInfo member. This is the 59 * allocated size. 60 * @chp_info_offset: Byte offset from beginning of this struct to the 61 * ChpInfo struct. 62 * @bus_info_offset: Byte offset from beginning of this struct to the 63 * BusInfo struct. 64 * @dev_info_offset: Byte offset from beginning of this struct to the 65 * DevInfo array. 66 * @reserved: Natural alignment. 67 */ 68 struct visor_vbus_headerinfo { 69 u32 struct_bytes; 70 u32 device_info_struct_bytes; 71 u32 dev_info_count; 72 u32 chp_info_offset; 73 u32 bus_info_offset; 74 u32 dev_info_offset; 75 u8 reserved[104]; 76 } __packed; 77 78 /* 79 * struct visor_vbus_channel 80 * @channel_header: Initialized by server. 81 * @hdr_info: Initialized by server. 82 * @chp_info: Describes client chipset device and driver. 83 * @bus_info: Describes client bus device and driver. 84 * @dev_info: Describes client device and driver for each device on the 85 * bus. 86 */ 87 struct visor_vbus_channel { 88 struct channel_header channel_header; 89 struct visor_vbus_headerinfo hdr_info; 90 struct visor_vbus_deviceinfo chp_info; 91 struct visor_vbus_deviceinfo bus_info; 92 struct visor_vbus_deviceinfo dev_info[0]; 93 } __packed; 94 95 #endif 96