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