Pull char/misc patches from Greg KH: "Here's the big char/misc driver patchset for 3.13-rc1. Lots of stuff in here, including some new drivers for Intel's "MIC" co-processor devices, and a new eeprom driver. Other things include the driver attribute cleanups, extcon driver updates, hyperv updates, and a raft of other miscellaneous driver fixes. All of these have been in linux-next for a while" * tag 'char-misc-3.13-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/char-misc: (121 commits) misc: mic: Fixes for randconfig build errors and warnings. tifm: fix error return code in tifm_7xx1_probe() w1-gpio: Use devm_* functions w1-gpio: Detect of_gpio_error for first gpio uio: Pass pointers to virt_to_page(), not integers uio: fix memory leak misc/at24: avoid infinite loop on write() misc/93xx46: avoid infinite loop on write() misc: atmel_pwm: add deferred-probing support mei: wd: host_init propagate error codes from called functions mei: replace stray pr_debug with dev_dbg mei: bus: propagate error code returned by mei_me_cl_by_id mei: mei_cl_link remove duplicated check for open_handle_count mei: print correct device state during unexpected reset mei: nfc: fix memory leak in error path lkdtm: add tests for additional page permissions lkdtm: adjust recursion size to avoid warnings lkdtm: isolate stack corruption test mei: move host_clients_map cleanup to device init mei: me: downgrade two errors to debug level ...
Showing the changes to include/uapi/linux (3 of 118 files). Show all
Unified · Split
| @@ -241,6 +241,8 @@ header-y += media.h · 240 unmodified lines | ||
| 241 | 241 | header-y += mei.h |
| 242 | 242 | header-y += mempolicy.h |
| 243 | 243 | header-y += meye.h |
| 244 | +header-y += mic_common.h | |
| 245 | +header-y += mic_ioctl.h | |
| 244 | 246 | header-y += mii.h |
| 245 | 247 | header-y += minix_fs.h |
| 246 | 248 | header-y += mman.h |
| @@ -0,0 +1,240 @@ | ||
| 1 | +/* | |
| 2 | + * Intel MIC Platform Software Stack (MPSS) | |
| 3 | + * | |
| 4 | + * Copyright(c) 2013 Intel Corporation. | |
| 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, version 2, as | |
| 8 | + * published by the Free Software Foundation. | |
| 9 | + * | |
| 10 | + * This program is distributed in the hope that it will be useful, but | |
| 11 | + * WITHOUT ANY WARRANTY; without even the implied warranty of | |
| 12 | + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | |
| 13 | + * General Public License for more details. | |
| 14 | + * | |
| 15 | + * The full GNU General Public License is included in this distribution in | |
| 16 | + * the file called "COPYING". | |
| 17 | + * | |
| 18 | + * Intel MIC driver. | |
| 19 | + * | |
| 20 | + */ | |
| 21 | +#ifndef __MIC_COMMON_H_ | |
| 22 | +#define __MIC_COMMON_H_ | |
| 23 | + | |
| 24 | +#include <linux/virtio_ring.h> | |
| 25 | + | |
| 26 | +#ifndef __KERNEL__ | |
| 27 | +#define ALIGN(a, x) (((a) + (x) - 1) & ~((x) - 1)) | |
| 28 | +#define __aligned(x) __attribute__ ((aligned(x))) | |
| 29 | +#endif | |
| 30 | + | |
| 31 | +#define mic_aligned_size(x) ALIGN(sizeof(x), 8) | |
| 32 | + | |
| 33 | +/** | |
| 34 | + * struct mic_device_desc: Virtio device information shared between the | |
| 35 | + * virtio driver and userspace backend | |
| 36 | + * | |
| 37 | + * @type: Device type: console/network/disk etc. Type 0/-1 terminates. | |
| 38 | + * @num_vq: Number of virtqueues. | |
| 39 | + * @feature_len: Number of bytes of feature bits. Multiply by 2: one for | |
| 40 | + host features and one for guest acknowledgements. | |
| 41 | + * @config_len: Number of bytes of the config array after virtqueues. | |
| 42 | + * @status: A status byte, written by the Guest. | |
| 43 | + * @config: Start of the following variable length config. | |
| 44 | + */ | |
| 45 | +struct mic_device_desc { | |
| 46 | + __s8 type; | |
| 47 | + __u8 num_vq; | |
| 48 | + __u8 feature_len; | |
| 49 | + __u8 config_len; | |
| 50 | + __u8 status; | |
| 51 | + __u64 config[0]; | |
| 52 | +} __aligned(8); | |
| 53 | + | |
| 54 | +/** | |
| 55 | + * struct mic_device_ctrl: Per virtio device information in the device page | |
| 56 | + * used internally by the host and card side drivers. | |
| 57 | + * | |
| 58 | + * @vdev: Used for storing MIC vdev information by the guest. | |
| 59 | + * @config_change: Set to 1 by host when a config change is requested. | |
| 60 | + * @vdev_reset: Set to 1 by guest to indicate virtio device has been reset. | |
| 61 | + * @guest_ack: Set to 1 by guest to ack a command. | |
| 62 | + * @host_ack: Set to 1 by host to ack a command. | |
| 63 | + * @used_address_updated: Set to 1 by guest when the used address should be | |
| 64 | + * updated. | |
| 65 | + * @c2h_vdev_db: The doorbell number to be used by guest. Set by host. | |
| 66 | + * @h2c_vdev_db: The doorbell number to be used by host. Set by guest. | |
| 67 | + */ | |
| 68 | +struct mic_device_ctrl { | |
| 69 | + __u64 vdev; | |
| 70 | + __u8 config_change; | |
| 71 | + __u8 vdev_reset; | |
| 72 | + __u8 guest_ack; | |
| 73 | + __u8 host_ack; | |
| 74 | + __u8 used_address_updated; | |
| 75 | + __s8 c2h_vdev_db; | |
| 76 | + __s8 h2c_vdev_db; | |
| 77 | +} __aligned(8); | |
| 78 | + | |
| 79 | +/** | |
| 80 | + * struct mic_bootparam: Virtio device independent information in device page | |
| 81 | + * | |
| 82 | + * @magic: A magic value used by the card to ensure it can see the host | |
| 83 | + * @c2h_shutdown_db: Card to Host shutdown doorbell set by host | |
| 84 | + * @h2c_shutdown_db: Host to Card shutdown doorbell set by card | |
| 85 | + * @h2c_config_db: Host to Card Virtio config doorbell set by card | |
| 86 | + * @shutdown_status: Card shutdown status set by card | |
| 87 | + * @shutdown_card: Set to 1 by the host when a card shutdown is initiated | |
| 88 | + */ | |
| 89 | +struct mic_bootparam { | |
| 90 | + __u32 magic; | |
| 91 | + __s8 c2h_shutdown_db; | |
| 92 | + __s8 h2c_shutdown_db; | |
| 93 | + __s8 h2c_config_db; | |
| 94 | + __u8 shutdown_status; | |
| 95 | + __u8 shutdown_card; | |
| 96 | +} __aligned(8); | |
| 97 | + | |
| 98 | +/** | |
| 99 | + * struct mic_device_page: High level representation of the device page | |
| 100 | + * | |
| 101 | + * @bootparam: The bootparam structure is used for sharing information and | |
| 102 | + * status updates between MIC host and card drivers. | |
| 103 | + * @desc: Array of MIC virtio device descriptors. | |
| 104 | + */ | |
| 105 | +struct mic_device_page { | |
| 106 | + struct mic_bootparam bootparam; | |
| 107 | + struct mic_device_desc desc[0]; | |
| 108 | +}; | |
| 109 | +/** | |
| 110 | + * struct mic_vqconfig: This is how we expect the device configuration field | |
| 111 | + * for a virtqueue to be laid out in config space. | |
| 112 | + * | |
| 113 | + * @address: Guest/MIC physical address of the virtio ring | |
| 114 | + * (avail and desc rings) | |
| 115 | + * @used_address: Guest/MIC physical address of the used ring | |
| 116 | + * @num: The number of entries in the virtio_ring | |
| 117 | + */ | |
| 118 | +struct mic_vqconfig { | |
| 119 | + __u64 address; | |
| 120 | + __u64 used_address; | |
| 121 | + __u16 num; | |
| 122 | +} __aligned(8); | |
| 123 | + | |
| 124 | +/* | |
| 125 | + * The alignment to use between consumer and producer parts of vring. | |
| 126 | + * This is pagesize for historical reasons. | |
| 127 | + */ | |
| 128 | +#define MIC_VIRTIO_RING_ALIGN 4096 | |
| 129 | + | |
| 130 | +#define MIC_MAX_VRINGS 4 | |
| 131 | +#define MIC_VRING_ENTRIES 128 | |
| 132 | + | |
| 133 | +/* | |
| 134 | + * Max vring entries (power of 2) to ensure desc and avail rings | |
| 135 | + * fit in a single page | |
| 136 | + */ | |
| 137 | +#define MIC_MAX_VRING_ENTRIES 128 | |
| 138 | + | |
| 139 | +/** | |
| 140 | + * Max size of the desc block in bytes: includes: | |
| 141 | + * - struct mic_device_desc | |
| 142 | + * - struct mic_vqconfig (num_vq of these) | |
| 143 | + * - host and guest features | |
| 144 | + * - virtio device config space | |
| 145 | + */ | |
| 146 | +#define MIC_MAX_DESC_BLK_SIZE 256 | |
| 147 | + | |
| 148 | +/** | |
| 149 | + * struct _mic_vring_info - Host vring info exposed to userspace backend | |
| 150 | + * for the avail index and magic for the card. | |
| 151 | + * | |
| 152 | + * @avail_idx: host avail idx | |
| 153 | + * @magic: A magic debug cookie. | |
| 154 | + */ | |
| 155 | +struct _mic_vring_info { | |
| 156 | + __u16 avail_idx; | |
| 157 | + int magic; | |
| 158 | +}; | |
| 159 | + | |
| 160 | +/** | |
| 161 | + * struct mic_vring - Vring information. | |
| 162 | + * | |
| 163 | + * @vr: The virtio ring. | |
| 164 | + * @info: Host vring information exposed to the userspace backend for the | |
| 165 | + * avail index and magic for the card. | |
| 166 | + * @va: The va for the buffer allocated for vr and info. | |
| 167 | + * @len: The length of the buffer required for allocating vr and info. | |
| 168 | + */ | |
| 169 | +struct mic_vring { | |
| 170 | + struct vring vr; | |
| 171 | + struct _mic_vring_info *info; | |
| 172 | + void *va; | |
| 173 | + int len; | |
| 174 | +}; | |
| 175 | + | |
| 176 | +#define mic_aligned_desc_size(d) ALIGN(mic_desc_size(d), 8) | |
| 177 | + | |
| 178 | +#ifndef INTEL_MIC_CARD | |
| 179 | +static inline unsigned mic_desc_size(const struct mic_device_desc *desc) | |
| 180 | +{ | |
| 181 | + return mic_aligned_size(*desc) | |
| 182 | + + desc->num_vq * mic_aligned_size(struct mic_vqconfig) | |
| 183 | + + desc->feature_len * 2 | |
| 184 | + + desc->config_len; | |
| 185 | +} | |
| 186 | + | |
| 187 | +static inline struct mic_vqconfig * | |
| 188 | +mic_vq_config(const struct mic_device_desc *desc) | |
| 189 | +{ | |
| 190 | + return (struct mic_vqconfig *)(desc + 1); | |
| 191 | +} | |
| 192 | + | |
| 193 | +static inline __u8 *mic_vq_features(const struct mic_device_desc *desc) | |
| 194 | +{ | |
| 195 | + return (__u8 *)(mic_vq_config(desc) + desc->num_vq); | |
| 196 | +} | |
| 197 | + | |
| 198 | +static inline __u8 *mic_vq_configspace(const struct mic_device_desc *desc) | |
| 199 | +{ | |
| 200 | + return mic_vq_features(desc) + desc->feature_len * 2; | |
| 201 | +} | |
| 202 | +static inline unsigned mic_total_desc_size(struct mic_device_desc *desc) | |
| 203 | +{ | |
| 204 | + return mic_aligned_desc_size(desc) + | |
| 205 | + mic_aligned_size(struct mic_device_ctrl); | |
| 206 | +} | |
| 207 | +#endif | |
| 208 | + | |
| 209 | +/* Device page size */ | |
| 210 | +#define MIC_DP_SIZE 4096 | |
| 211 | + | |
| 212 | +#define MIC_MAGIC 0xc0ffee00 | |
| 213 | + | |
| 214 | +/** | |
| 215 | + * enum mic_states - MIC states. | |
| 216 | + */ | |
| 217 | +enum mic_states { | |
| 218 | + MIC_OFFLINE = 0, | |
| 219 | + MIC_ONLINE, | |
| 220 | + MIC_SHUTTING_DOWN, | |
| 221 | + MIC_RESET_FAILED, | |
| 222 | + MIC_SUSPENDING, | |
| 223 | + MIC_SUSPENDED, | |
| 224 | + MIC_LAST | |
| 225 | +}; | |
| 226 | + | |
| 227 | +/** | |
| 228 | + * enum mic_status - MIC status reported by card after | |
| 229 | + * a host or card initiated shutdown or a card crash. | |
| 230 | + */ | |
| 231 | +enum mic_status { | |
| 232 | + MIC_NOP = 0, | |
| 233 | + MIC_CRASHED, | |
| 234 | + MIC_HALTED, | |
| 235 | + MIC_POWER_OFF, | |
| 236 | + MIC_RESTART, | |
| 237 | + MIC_STATUS_LAST | |
| 238 | +}; | |
| 239 | + | |
| 240 | +#endif | |
| @@ -0,0 +1,76 @@ | ||
| 1 | +/* | |
| 2 | + * Intel MIC Platform Software Stack (MPSS) | |
| 3 | + * | |
| 4 | + * Copyright(c) 2013 Intel Corporation. | |
| 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, version 2, as | |
| 8 | + * published by the Free Software Foundation. | |
| 9 | + * | |
| 10 | + * This program is distributed in the hope that it will be useful, but | |
| 11 | + * WITHOUT ANY WARRANTY; without even the implied warranty of | |
| 12 | + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | |
| 13 | + * General Public License for more details. | |
| 14 | + * | |
| 15 | + * The full GNU General Public License is included in this distribution in | |
| 16 | + * the file called "COPYING". | |
| 17 | + * | |
| 18 | + * Intel MIC Host driver. | |
| 19 | + * | |
| 20 | + */ | |
| 21 | +#ifndef _MIC_IOCTL_H_ | |
| 22 | +#define _MIC_IOCTL_H_ | |
| 23 | + | |
| 24 | +#include <linux/types.h> | |
| 25 | + | |
| 26 | +/* | |
| 27 | + * mic_copy - MIC virtio descriptor copy. | |
| 28 | + * | |
| 29 | + * @iov: An array of IOVEC structures containing user space buffers. | |
| 30 | + * @iovcnt: Number of IOVEC structures in iov. | |
| 31 | + * @vr_idx: The vring index. | |
| 32 | + * @update_used: A non zero value results in used index being updated. | |
| 33 | + * @out_len: The aggregate of the total length written to or read from | |
| 34 | + * the virtio device. | |
| 35 | + */ | |
| 36 | +struct mic_copy_desc { | |
| 37 | +#ifdef __KERNEL__ | |
| 38 | + struct iovec __user *iov; | |
| 39 | +#else | |
| 40 | + struct iovec *iov; | |
| 41 | +#endif | |
| 42 | + int iovcnt; | |
| 43 | + __u8 vr_idx; | |
| 44 | + __u8 update_used; | |
| 45 | + __u32 out_len; | |
| 46 | +}; | |
| 47 | + | |
| 48 | +/* | |
| 49 | + * Add a new virtio device | |
| 50 | + * The (struct mic_device_desc *) pointer points to a device page entry | |
| 51 | + * for the virtio device consisting of: | |
| 52 | + * - struct mic_device_desc | |
| 53 | + * - struct mic_vqconfig (num_vq of these) | |
| 54 | + * - host and guest features | |
| 55 | + * - virtio device config space | |
| 56 | + * The total size referenced by the pointer should equal the size returned | |
| 57 | + * by desc_size() in mic_common.h | |
| 58 | + */ | |
| 59 | +#define MIC_VIRTIO_ADD_DEVICE _IOWR('s', 1, struct mic_device_desc *) | |
| 60 | + | |
| 61 | +/* | |
| 62 | + * Copy the number of entries in the iovec and update the used index | |
| 63 | + * if requested by the user. | |
| 64 | + */ | |
| 65 | +#define MIC_VIRTIO_COPY_DESC _IOWR('s', 2, struct mic_copy_desc *) | |
| 66 | + | |
| 67 | +/* | |
| 68 | + * Notify virtio device of a config change | |
| 69 | + * The (__u8 *) pointer points to config space values for the device | |
| 70 | + * as they should be written into the device page. The total size | |
| 71 | + * referenced by the pointer should equal the config_len field of struct | |
| 72 | + * mic_device_desc. | |
| 73 | + */ | |
| 74 | +#define MIC_VIRTIO_CONFIG_CHANGE _IOWR('s', 5, __u8 *) | |
| 75 | + | |
| 76 | +#endif | |