1 // Copyright 2021 The ChromiumOS Authors 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 use vmm_vhost::message::VhostUserProtocolFeatures; 6 7 use crate::virtio::device_constants::wl::QUEUE_SIZE; 8 use crate::virtio::device_constants::wl::QUEUE_SIZES; 9 use crate::virtio::device_constants::wl::VIRTIO_WL_F_SEND_FENCES; 10 use crate::virtio::device_constants::wl::VIRTIO_WL_F_TRANS_FLAGS; 11 use crate::virtio::device_constants::wl::VIRTIO_WL_F_USE_SHMEM; 12 use crate::virtio::vhost::user::vmm::Connection; 13 use crate::virtio::vhost::user::vmm::QueueSizes; 14 use crate::virtio::vhost::user::vmm::Result; 15 use crate::virtio::vhost::user::vmm::VhostUserVirtioDevice; 16 use crate::virtio::DeviceType; 17 18 impl VhostUserVirtioDevice { new_wl(base_features: u64, connection: Connection) -> Result<VhostUserVirtioDevice>19 pub fn new_wl(base_features: u64, connection: Connection) -> Result<VhostUserVirtioDevice> { 20 let queue_sizes = QueueSizes::AskDevice { 21 queue_size: QUEUE_SIZE, 22 default_queues: QUEUE_SIZES.len(), 23 }; 24 let max_queues = QUEUE_SIZES.len(); 25 26 let allow_features = 1 << VIRTIO_WL_F_TRANS_FLAGS 27 | 1 << VIRTIO_WL_F_SEND_FENCES 28 | 1 << VIRTIO_WL_F_USE_SHMEM; 29 30 let allow_protocol_features = VhostUserProtocolFeatures::MQ 31 | VhostUserProtocolFeatures::CONFIG 32 | VhostUserProtocolFeatures::SLAVE_REQ 33 | VhostUserProtocolFeatures::SHARED_MEMORY_REGIONS; 34 35 VhostUserVirtioDevice::new( 36 connection, 37 DeviceType::Wl, 38 queue_sizes, 39 max_queues, 40 allow_features, 41 allow_protocol_features, 42 base_features, 43 None, 44 false, 45 ) 46 } 47 } 48