1 /* Copyright (C) 2010 - 2015 UNISYS CORPORATION 2 * All rights reserved. 3 * 4 * This program is free software; you can redistribute it and/or modify it 5 * under the terms and conditions of the GNU General Public License, 6 * version 2, as published by the Free Software Foundation. 7 * 8 * This program is distributed in the hope that it will be useful, but 9 * WITHOUT ANY WARRANTY; without even the implied warranty of 10 * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, GOOD TITLE or 11 * NON INFRINGEMENT. See the GNU General Public License for more 12 * details. 13 */ 14 15 #ifndef __CONTROLVMCHANNEL_H__ 16 #define __CONTROLVMCHANNEL_H__ 17 18 #include <linux/uuid.h> 19 #include "channel.h" 20 21 /* {2B3C2D10-7EF5-4ad8-B966-3448B7386B3D} */ 22 #define SPAR_CONTROLVM_CHANNEL_PROTOCOL_UUID \ 23 UUID_LE(0x2b3c2d10, 0x7ef5, 0x4ad8, \ 24 0xb9, 0x66, 0x34, 0x48, 0xb7, 0x38, 0x6b, 0x3d) 25 26 #define ULTRA_CONTROLVM_CHANNEL_PROTOCOL_SIGNATURE \ 27 ULTRA_CHANNEL_PROTOCOL_SIGNATURE 28 #define CONTROLVM_MESSAGE_MAX 64 29 30 /* Must increment this whenever you insert or delete fields within 31 * this channel struct. Also increment whenever you change the meaning 32 * of fields within this channel struct so as to break pre-existing 33 * software. Note that you can usually add fields to the END of the 34 * channel struct withOUT needing to increment this. 35 */ 36 #define ULTRA_CONTROLVM_CHANNEL_PROTOCOL_VERSIONID 1 37 38 #define SPAR_CONTROLVM_CHANNEL_OK_CLIENT(ch) \ 39 spar_check_channel_client(ch, \ 40 SPAR_CONTROLVM_CHANNEL_PROTOCOL_UUID, \ 41 "controlvm", \ 42 sizeof(struct spar_controlvm_channel_protocol), \ 43 ULTRA_CONTROLVM_CHANNEL_PROTOCOL_VERSIONID, \ 44 ULTRA_CONTROLVM_CHANNEL_PROTOCOL_SIGNATURE) 45 46 #define MAX_SERIAL_NUM 32 47 48 /* Defines for various channel queues */ 49 #define CONTROLVM_QUEUE_REQUEST 0 50 #define CONTROLVM_QUEUE_RESPONSE 1 51 #define CONTROLVM_QUEUE_EVENT 2 52 #define CONTROLVM_QUEUE_ACK 3 53 54 /* Max num of messages stored during IOVM creation to be reused after crash */ 55 #define CONTROLVM_CRASHMSG_MAX 2 56 57 struct spar_segment_state { 58 /* Bit 0: May enter other states */ 59 u16 enabled:1; 60 /* Bit 1: Assigned to active partition */ 61 u16 active:1; 62 /* Bit 2: Configure message sent to service/server */ 63 u16 alive:1; 64 /* Bit 3: similar to partition state ShuttingDown */ 65 u16 revoked:1; 66 /* Bit 4: memory (device/port number) has been selected by Command */ 67 u16 allocated:1; 68 /* Bit 5: has been introduced to the service/guest partition */ 69 u16 known:1; 70 /* Bit 6: service/Guest partition has responded to introduction */ 71 u16 ready:1; 72 /* Bit 7: resource is configured and operating */ 73 u16 operating:1; 74 /* Note: don't use high bit unless we need to switch to ushort 75 * which is non-compliant 76 */ 77 }; 78 79 static const struct spar_segment_state segment_state_running = { 80 1, 1, 1, 0, 1, 1, 1, 1 81 }; 82 83 static const struct spar_segment_state segment_state_paused = { 84 1, 1, 1, 0, 1, 1, 1, 0 85 }; 86 87 static const struct spar_segment_state segment_state_standby = { 88 1, 1, 0, 0, 1, 1, 1, 0 89 }; 90 91 /* Ids for commands that may appear in either queue of a ControlVm channel. 92 * 93 * Commands that are initiated by the command partition (CP), by an IO or 94 * console service partition (SP), or by a guest partition (GP)are: 95 * - issued on the RequestQueue queue (q #0) in the ControlVm channel 96 * - responded to on the ResponseQueue queue (q #1) in the ControlVm channel 97 * 98 * Events that are initiated by an IO or console service partition (SP) or 99 * by a guest partition (GP) are: 100 * - issued on the EventQueue queue (q #2) in the ControlVm channel 101 * - responded to on the EventAckQueue queue (q #3) in the ControlVm channel 102 */ 103 enum controlvm_id { 104 CONTROLVM_INVALID = 0, 105 /* SWITCH commands required Parameter: SwitchNumber */ 106 /* BUS commands required Parameter: BusNumber */ 107 CONTROLVM_BUS_CREATE = 0x101, /* CP --> SP, GP */ 108 CONTROLVM_BUS_DESTROY = 0x102, /* CP --> SP, GP */ 109 CONTROLVM_BUS_CONFIGURE = 0x104, /* CP --> SP */ 110 CONTROLVM_BUS_CHANGESTATE = 0x105, /* CP --> SP, GP */ 111 CONTROLVM_BUS_CHANGESTATE_EVENT = 0x106, /* SP, GP --> CP */ 112 /* DEVICE commands required Parameter: BusNumber, DeviceNumber */ 113 114 CONTROLVM_DEVICE_CREATE = 0x201, /* CP --> SP, GP */ 115 CONTROLVM_DEVICE_DESTROY = 0x202, /* CP --> SP, GP */ 116 CONTROLVM_DEVICE_CONFIGURE = 0x203, /* CP --> SP */ 117 CONTROLVM_DEVICE_CHANGESTATE = 0x204, /* CP --> SP, GP */ 118 CONTROLVM_DEVICE_CHANGESTATE_EVENT = 0x205, /* SP, GP --> CP */ 119 CONTROLVM_DEVICE_RECONFIGURE = 0x206, /* CP --> Boot */ 120 /* CHIPSET commands */ 121 CONTROLVM_CHIPSET_INIT = 0x301, /* CP --> SP, GP */ 122 CONTROLVM_CHIPSET_STOP = 0x302, /* CP --> SP, GP */ 123 CONTROLVM_CHIPSET_READY = 0x304, /* CP --> SP */ 124 CONTROLVM_CHIPSET_SELFTEST = 0x305, /* CP --> SP */ 125 126 }; 127 128 struct irq_info { 129 u64 reserved1; 130 131 /* specifies interrupt handle. It is used to retrieve the 132 * corresponding interrupt pin from Monitor; and the 133 * interrupt pin is used to connect to the corresponding 134 * interrupt. Used by IOPart-GP only. 135 */ 136 u64 recv_irq_handle; 137 138 /* specifies interrupt vector. It, interrupt pin, and shared are 139 * used to connect to the corresponding interrupt. Used by 140 * IOPart-GP only. 141 */ 142 u32 recv_irq_vector; 143 144 /* specifies if the recvInterrupt is shared. It, interrupt pin 145 * and vector are used to connect to 0 = not shared; 1 = shared. 146 * the corresponding interrupt. Used by IOPart-GP only. 147 */ 148 u8 recv_irq_shared; 149 u8 reserved[3]; /* Natural alignment purposes */ 150 }; 151 152 struct pci_id { 153 u16 domain; 154 u8 bus; 155 u8 slot; 156 u8 func; 157 u8 reserved[3]; /* Natural alignment purposes */ 158 }; 159 160 struct efi_spar_indication { 161 u64 boot_to_fw_ui:1; /* Bit 0: Stop in uefi ui */ 162 u64 clear_nvram:1; /* Bit 1: Clear NVRAM */ 163 u64 clear_cmos:1; /* Bit 2: Clear CMOS */ 164 u64 boot_to_tool:1; /* Bit 3: Run install tool */ 165 /* remaining bits are available */ 166 }; 167 168 enum ultra_chipset_feature { 169 ULTRA_CHIPSET_FEATURE_REPLY = 0x00000001, 170 ULTRA_CHIPSET_FEATURE_PARA_HOTPLUG = 0x00000002, 171 }; 172 173 /* This is the common structure that is at the beginning of every 174 * ControlVm message (both commands and responses) in any ControlVm 175 * queue. Commands are easily distinguished from responses by 176 * looking at the flags.response field. 177 */ 178 struct controlvm_message_header { 179 u32 id; /* See CONTROLVM_ID. */ 180 /* For requests, indicates the message type. */ 181 /* For responses, indicates the type of message we are responding to. */ 182 183 /* Includes size of this struct + size of message */ 184 u32 message_size; 185 /* Index of segment containing Vm message/information */ 186 u32 segment_index; 187 /* Error status code or result of message completion */ 188 u32 completion_status; 189 struct { 190 /* =1 in a response to signify failure */ 191 u32 failed:1; 192 /* =1 in all messages that expect a response */ 193 u32 response_expected:1; 194 /* =1 in all bus & device-related messages where the message 195 * receiver is to act as the bus or device server 196 */ 197 u32 server:1; 198 /* =1 for testing use only (Control and Command ignore this */ 199 u32 test_message:1; 200 /* =1 if there are forthcoming responses/acks associated 201 * with this message 202 */ 203 u32 partial_completion:1; 204 /* =1 this is to let us know to preserve channel contents */ 205 u32 preserve:1; 206 /* =1 the DiagWriter is active in the Diagnostic Partition */ 207 u32 writer_in_diag:1; 208 } flags; 209 /* Natural alignment */ 210 u32 reserved; 211 /* Identifies the particular message instance */ 212 u64 message_handle; 213 /* request instances with the corresponding response instance. */ 214 /* Offset of payload area from start of this instance */ 215 u64 payload_vm_offset; 216 /* Maximum bytes allocated in payload area of ControlVm segment */ 217 u32 payload_max_bytes; 218 /* Actual number of bytes of payload area to copy between IO/Command */ 219 u32 payload_bytes; 220 /* if non-zero, there is a payload to copy. */ 221 }; 222 223 struct controlvm_packet_device_create { 224 u32 bus_no; /* bus # (0..n-1) from the msg receiver's end */ 225 u32 dev_no; /* bus-relative (0..n-1) device number */ 226 /* Guest physical address of the channel, which can be dereferenced by 227 * the receiver of this ControlVm command 228 */ 229 u64 channel_addr; 230 u64 channel_bytes; /* specifies size of the channel in bytes */ 231 uuid_le data_type_uuid; /* specifies format of data in channel */ 232 uuid_le dev_inst_uuid; /* instance guid for the device */ 233 struct irq_info intr; /* specifies interrupt information */ 234 }; /* for CONTROLVM_DEVICE_CREATE */ 235 236 struct controlvm_packet_device_configure { 237 /* bus # (0..n-1) from the msg receiver's perspective */ 238 u32 bus_no; 239 /* Control uses header SegmentIndex field to access bus number... */ 240 u32 dev_no; /* bus-relative (0..n-1) device number */ 241 } ; /* for CONTROLVM_DEVICE_CONFIGURE */ 242 243 struct controlvm_message_device_create { 244 struct controlvm_message_header header; 245 struct controlvm_packet_device_create packet; 246 }; /* total 128 bytes */ 247 248 struct controlvm_message_device_configure { 249 struct controlvm_message_header header; 250 struct controlvm_packet_device_configure packet; 251 }; /* total 56 bytes */ 252 253 /* This is the format for a message in any ControlVm queue. */ 254 struct controlvm_message_packet { 255 union { 256 struct { 257 /* bus # (0..n-1) from the msg receiver's perspective */ 258 u32 bus_no; 259 /* indicates the max number of devices on this bus */ 260 u32 dev_count; 261 /* Guest physical address of the channel, which can be 262 * dereferenced by the receiver of this ControlVm command 263 */ 264 u64 channel_addr; 265 u64 channel_bytes; /* size of the channel */ 266 /* indicates format of data in bus channel*/ 267 uuid_le bus_data_type_uuid; 268 uuid_le bus_inst_uuid; /* instance uuid for the bus */ 269 } create_bus; /* for CONTROLVM_BUS_CREATE */ 270 struct { 271 /* bus # (0..n-1) from the msg receiver's perspective */ 272 u32 bus_no; 273 u32 reserved; /* Natural alignment purposes */ 274 } destroy_bus; /* for CONTROLVM_BUS_DESTROY */ 275 struct { 276 /* bus # (0..n-1) from the receiver's perspective */ 277 u32 bus_no; 278 u32 reserved1; /* for alignment purposes */ 279 /* This is used to convert guest physical address to physical address */ 280 u64 guest_handle; 281 u64 recv_bus_irq_handle; 282 /* specifies interrupt info. It is used by SP 283 * to register to receive interrupts from the 284 * CP. This interrupt is used for bus level 285 * notifications. The corresponding 286 * sendBusInterruptHandle is kept in CP. 287 */ 288 } configure_bus; /* for CONTROLVM_BUS_CONFIGURE */ 289 /* for CONTROLVM_DEVICE_CREATE */ 290 struct controlvm_packet_device_create create_device; 291 struct { 292 /* bus # (0..n-1) from the msg receiver's perspective */ 293 u32 bus_no; 294 u32 dev_no; /* bus-relative (0..n-1) device # */ 295 } destroy_device; /* for CONTROLVM_DEVICE_DESTROY */ 296 /* for CONTROLVM_DEVICE_CONFIGURE */ 297 struct controlvm_packet_device_configure configure_device; 298 struct { 299 /* bus # (0..n-1) from the msg receiver's perspective */ 300 u32 bus_no; 301 u32 dev_no; /* bus-relative (0..n-1) device # */ 302 } reconfigure_device; /* for CONTROLVM_DEVICE_RECONFIGURE */ 303 struct { 304 u32 bus_no; 305 struct spar_segment_state state; 306 u8 reserved[2]; /* Natural alignment purposes */ 307 } bus_change_state; /* for CONTROLVM_BUS_CHANGESTATE */ 308 struct { 309 u32 bus_no; 310 u32 dev_no; 311 struct spar_segment_state state; 312 struct { 313 /* =1 if message is for a physical device */ 314 u32 phys_device:1; 315 } flags; 316 u8 reserved[2]; /* Natural alignment purposes */ 317 } device_change_state; /* for CONTROLVM_DEVICE_CHANGESTATE */ 318 struct { 319 u32 bus_no; 320 u32 dev_no; 321 struct spar_segment_state state; 322 u8 reserved[6]; /* Natural alignment purposes */ 323 } device_change_state_event; 324 /* for CONTROLVM_DEVICE_CHANGESTATE_EVENT */ 325 struct { 326 /* indicates the max number of busses */ 327 u32 bus_count; 328 /* indicates the max number of switches */ 329 u32 switch_count; 330 enum ultra_chipset_feature features; 331 u32 platform_number; /* Platform Number */ 332 } init_chipset; /* for CONTROLVM_CHIPSET_INIT */ 333 struct { 334 u32 options; /* reserved */ 335 u32 test; /* bit 0 set to run embedded selftest */ 336 } chipset_selftest; /* for CONTROLVM_CHIPSET_SELFTEST */ 337 /* a physical address of something, that can be dereferenced 338 * by the receiver of this ControlVm command 339 */ 340 u64 addr; 341 /* a handle of something (depends on command id) */ 342 u64 handle; 343 }; 344 }; 345 346 /* All messages in any ControlVm queue have this layout. */ 347 struct controlvm_message { 348 struct controlvm_message_header hdr; 349 struct controlvm_message_packet cmd; 350 }; 351 352 struct spar_controlvm_channel_protocol { 353 struct channel_header header; 354 u64 gp_controlvm; /* guest phys addr of this channel */ 355 u64 gp_partition_tables;/* guest phys addr of partition tables */ 356 u64 gp_diag_guest; /* guest phys addr of diagnostic channel */ 357 u64 gp_boot_romdisk;/* guest phys addr of (read* only) Boot ROM disk */ 358 u64 gp_boot_ramdisk;/* guest phys addr of writable Boot RAM disk */ 359 u64 gp_acpi_table; /* guest phys addr of acpi table */ 360 u64 gp_control_channel;/* guest phys addr of control channel */ 361 u64 gp_diag_romdisk;/* guest phys addr of diagnostic ROM disk */ 362 u64 gp_nvram; /* guest phys addr of NVRAM channel */ 363 u64 request_payload_offset; /* Offset to request payload area */ 364 u64 event_payload_offset; /* Offset to event payload area */ 365 /* Bytes available in request payload area */ 366 u32 request_payload_bytes; 367 u32 event_payload_bytes;/* Bytes available in event payload area */ 368 u32 control_channel_bytes; 369 u32 nvram_channel_bytes; /* Bytes in PartitionNvram segment */ 370 u32 message_bytes; /* sizeof(CONTROLVM_MESSAGE) */ 371 u32 message_count; /* CONTROLVM_MESSAGE_MAX */ 372 u64 gp_smbios_table; /* guest phys addr of SMBIOS tables */ 373 u64 gp_physical_smbios_table; /* guest phys addr of SMBIOS table */ 374 /* ULTRA_MAX_GUESTS_PER_SERVICE */ 375 char gp_reserved[2688]; 376 377 /* guest physical address of EFI firmware image base */ 378 u64 virtual_guest_firmware_image_base; 379 380 /* guest physical address of EFI firmware entry point */ 381 u64 virtual_guest_firmware_entry_point; 382 383 /* guest EFI firmware image size */ 384 u64 virtual_guest_firmware_image_size; 385 386 /* GPA = 1MB where EFI firmware image is copied to */ 387 u64 virtual_guest_firmware_boot_base; 388 u64 virtual_guest_image_base; 389 u64 virtual_guest_image_size; 390 u64 prototype_control_channel_offset; 391 u64 virtual_guest_partition_handle; 392 /* Restore Action field to restore the guest partition */ 393 u16 restore_action; 394 /* For Windows guests it shows if the visordisk is in dump mode */ 395 u16 dump_action; 396 u16 nvram_fail_count; 397 u16 saved_crash_message_count; /* = CONTROLVM_CRASHMSG_MAX */ 398 /* Offset to request payload area needed for crash dump */ 399 u32 saved_crash_message_offset; 400 /* Type of error encountered during installation */ 401 u32 installation_error; 402 u32 installation_text_id; /* Id of string to display */ 403 /* Number of remaining installation steps (for progress bars) */ 404 u16 installation_remaining_steps; 405 /* ULTRA_TOOL_ACTIONS Installation Action field */ 406 u8 tool_action; 407 u8 reserved; /* alignment */ 408 struct efi_spar_indication efi_spar_ind; 409 struct efi_spar_indication efi_spar_ind_supported; 410 u32 sp_reserved; 411 /* Force signals to begin on 128-byte cache line */ 412 u8 reserved2[28]; 413 /* guest partition uses this queue to send requests to Control */ 414 struct signal_queue_header request_queue; 415 /* Control uses this queue to respond to service or guest 416 * partition requests 417 */ 418 struct signal_queue_header response_queue; 419 /* Control uses this queue to send events to guest partition */ 420 struct signal_queue_header event_queue; 421 /* Service or guest partition uses this queue to ack Control events */ 422 struct signal_queue_header event_ack_queue; 423 /* Request fixed-size message pool - does not include payload */ 424 struct controlvm_message request_msg[CONTROLVM_MESSAGE_MAX]; 425 426 /* Response fixed-size message pool - does not include payload */ 427 struct controlvm_message response_msg[CONTROLVM_MESSAGE_MAX]; 428 429 /* Event fixed-size message pool - does not include payload */ 430 struct controlvm_message event_msg[CONTROLVM_MESSAGE_MAX]; 431 432 /* Ack fixed-size message pool - does not include payload */ 433 struct controlvm_message event_ack_msg[CONTROLVM_MESSAGE_MAX]; 434 435 /* Message stored during IOVM creation to be reused after crash */ 436 struct controlvm_message saved_crash_msg[CONTROLVM_CRASHMSG_MAX]; 437 }; 438 439 /* Offsets for VM channel attributes */ 440 #define VM_CH_REQ_QUEUE_OFFSET \ 441 offsetof(struct spar_controlvm_channel_protocol, request_queue) 442 #define VM_CH_RESP_QUEUE_OFFSET \ 443 offsetof(struct spar_controlvm_channel_protocol, response_queue) 444 #define VM_CH_EVENT_QUEUE_OFFSET \ 445 offsetof(struct spar_controlvm_channel_protocol, event_queue) 446 #define VM_CH_ACK_QUEUE_OFFSET \ 447 offsetof(struct spar_controlvm_channel_protocol, event_ack_queue) 448 #define VM_CH_REQ_MSG_OFFSET \ 449 offsetof(struct spar_controlvm_channel_protocol, request_msg) 450 #define VM_CH_RESP_MSG_OFFSET \ 451 offsetof(struct spar_controlvm_channel_protocol, response_msg) 452 #define VM_CH_EVENT_MSG_OFFSET \ 453 offsetof(struct spar_controlvm_channel_protocol, event_msg) 454 #define VM_CH_ACK_MSG_OFFSET \ 455 offsetof(struct spar_controlvm_channel_protocol, event_ack_msg) 456 #define VM_CH_CRASH_MSG_OFFSET \ 457 offsetof(struct spar_controlvm_channel_protocol, saved_crash_msg) 458 459 /* The following header will be located at the beginning of PayloadVmOffset for 460 * various ControlVm commands. The receiver of a ControlVm command with a 461 * PayloadVmOffset will dereference this address and then use connection_offset, 462 * initiator_offset, and target_offset to get the location of UTF-8 formatted 463 * strings that can be parsed to obtain command-specific information. The value 464 * of total_length should equal PayloadBytes. The format of the strings at 465 * PayloadVmOffset will take different forms depending on the message. 466 */ 467 struct spar_controlvm_parameters_header { 468 u32 total_length; 469 u32 header_length; 470 u32 connection_offset; 471 u32 connection_length; 472 u32 initiator_offset; 473 u32 initiator_length; 474 u32 target_offset; 475 u32 target_length; 476 u32 client_offset; 477 u32 client_length; 478 u32 name_offset; 479 u32 name_length; 480 uuid_le id; 481 u32 revision; 482 u32 reserved; /* Natural alignment */ 483 }; 484 485 /* General Errors------------------------------------------------------[0-99] */ 486 #define CONTROLVM_RESP_SUCCESS 0 487 #define CONTROLVM_RESP_ERROR_ALREADY_DONE 1 488 #define CONTROLVM_RESP_ERROR_IOREMAP_FAILED 2 489 #define CONTROLVM_RESP_ERROR_KMALLOC_FAILED 3 490 #define CONTROLVM_RESP_ERROR_MESSAGE_ID_UNKNOWN 4 491 #define CONTROLVM_RESP_ERROR_MESSAGE_ID_INVALID_FOR_CLIENT 5 492 493 /* CONTROLVM_INIT_CHIPSET-------------------------------------------[100-199] */ 494 #define CONTROLVM_RESP_ERROR_CLIENT_SWITCHCOUNT_NONZERO 100 495 #define CONTROLVM_RESP_ERROR_EXPECTED_CHIPSET_INIT 101 496 497 /* Maximum Limit----------------------------------------------------[200-299] */ 498 #define CONTROLVM_RESP_ERROR_MAX_BUSES 201 /* BUS_CREATE */ 499 #define CONTROLVM_RESP_ERROR_MAX_DEVICES 202 /* DEVICE_CREATE */ 500 /* Payload and Parameter Related------------------------------------[400-499] */ 501 #define CONTROLVM_RESP_ERROR_PAYLOAD_INVALID 400 /* SWITCH_ATTACHEXTPORT, 502 * DEVICE_CONFIGURE 503 */ 504 #define CONTROLVM_RESP_ERROR_INITIATOR_PARAMETER_INVALID 401 /* Multiple */ 505 #define CONTROLVM_RESP_ERROR_TARGET_PARAMETER_INVALID 402 /* DEVICE_CONFIGURE */ 506 #define CONTROLVM_RESP_ERROR_CLIENT_PARAMETER_INVALID 403 /* DEVICE_CONFIGURE */ 507 /* Specified[Packet Structure] Value-------------------------------[500-599] */ 508 #define CONTROLVM_RESP_ERROR_BUS_INVALID 500 /* SWITCH_ATTACHINTPORT, 509 * BUS_CONFIGURE, 510 * DEVICE_CREATE, 511 * DEVICE_CONFIG 512 * DEVICE_DESTROY 513 */ 514 #define CONTROLVM_RESP_ERROR_DEVICE_INVALID 501 /* SWITCH_ATTACHINTPORT */ 515 /* DEVICE_CREATE, 516 * DEVICE_CONFIGURE, 517 * DEVICE_DESTROY 518 */ 519 #define CONTROLVM_RESP_ERROR_CHANNEL_INVALID 502 /* DEVICE_CREATE, 520 * DEVICE_CONFIGURE 521 */ 522 /* Partition Driver Callback Interface----------------------[600-699] */ 523 #define CONTROLVM_RESP_ERROR_VIRTPCI_DRIVER_FAILURE 604 /* BUS_CREATE, 524 * BUS_DESTROY, 525 * DEVICE_CREATE, 526 * DEVICE_DESTROY 527 */ 528 /* Unable to invoke VIRTPCI callback */ 529 #define CONTROLVM_RESP_ERROR_VIRTPCI_DRIVER_CALLBACK_ERROR 605 530 /* BUS_CREATE, 531 * BUS_DESTROY, 532 * DEVICE_CREATE, 533 * DEVICE_DESTROY 534 */ 535 /* VIRTPCI Callback returned error */ 536 #define CONTROLVM_RESP_ERROR_GENERIC_DRIVER_CALLBACK_ERROR 606 537 /* SWITCH_ATTACHEXTPORT, 538 * SWITCH_DETACHEXTPORT 539 * DEVICE_CONFIGURE 540 */ 541 542 /* generic device callback returned error */ 543 /* Bus Related------------------------------------------------------[700-799] */ 544 #define CONTROLVM_RESP_ERROR_BUS_DEVICE_ATTACHED 700 /* BUS_DESTROY */ 545 /* Channel Related--------------------------------------------------[800-899] */ 546 #define CONTROLVM_RESP_ERROR_CHANNEL_TYPE_UNKNOWN 800 /* GET_CHANNELINFO, 547 * DEVICE_DESTROY 548 */ 549 #define CONTROLVM_RESP_ERROR_CHANNEL_SIZE_TOO_SMALL 801 /* DEVICE_CREATE */ 550 /* Chipset Shutdown Related---------------------------------------[1000-1099] */ 551 #define CONTROLVM_RESP_ERROR_CHIPSET_SHUTDOWN_FAILED 1000 552 #define CONTROLVM_RESP_ERROR_CHIPSET_SHUTDOWN_ALREADY_ACTIVE 1001 553 554 /* Chipset Stop Related-------------------------------------------[1100-1199] */ 555 #define CONTROLVM_RESP_ERROR_CHIPSET_STOP_FAILED_BUS 1100 556 #define CONTROLVM_RESP_ERROR_CHIPSET_STOP_FAILED_SWITCH 1101 557 558 /* Device Related-------------------------------------------------[1400-1499] */ 559 #define CONTROLVM_RESP_ERROR_DEVICE_UDEV_TIMEOUT 1400 560 561 #endif /* __CONTROLVMCHANNEL_H__ */ 562