Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • uspace/lib/virtio/virtio.c

    r8591b31 r13eecc4  
    5050 *                     buffers.
    5151 *
    52  * The buffers can be deallocated by virtio_net_teardown_bufs().
     52 * The buffers can be deallocated by virtio_teardown_dma_bufs().
    5353 *
    5454 * @return  EOK on success or error code.
     
    6363        uintptr_t phys;
    6464        errno_t rc = dmamem_map_anonymous(buffers * size, 0,
    65             write ? AS_AREA_WRITE : AS_AREA_READ, 0, &phys, &virt);
     65            write ? AS_AREA_WRITE | AS_AREA_READ : AS_AREA_READ, 0, &phys,
     66            &virt);
    6667        if (rc != EOK)
    6768                return rc;
     
    8384 *
    8485 * @param buf[in]  Array holding the virtual addresses of the DMA buffers
    85  *                 previously allocated by virtio_net_setup_bufs().
    86  */
    87 extern void virtio_teardown_dma_bufs(void *buf[])
     86 *                 previously allocated by virtio_setup_dma_bufs().
     87 */
     88void virtio_teardown_dma_bufs(void *buf[])
    8889{
    8990        if (buf[0]) {
     
    319320        uint32_t device_features = pio_read_le32(&cfg->device_feature);
    320321
    321         ddf_msg(LVL_NOTE, "offered features %x", device_features);
     322        uint32_t reserved_features = VIRTIO_F_VERSION_1;
     323        pio_write_le32(&cfg->device_feature_select, VIRTIO_FEATURES_32_63);
     324        uint32_t device_reserved_features = pio_read_le32(&cfg->device_feature);
     325
     326        ddf_msg(LVL_NOTE, "offered features %x, reserved features %x",
     327            device_features, device_reserved_features);
    322328
    323329        if (features != (features & device_features))
     
    325331        features &= device_features;
    326332
     333        if (reserved_features != (reserved_features & device_reserved_features))
     334                return ENOTSUP;
     335        reserved_features &= device_reserved_features;
     336
    327337        /* 4. Write the accepted feature flags */
    328338        pio_write_le32(&cfg->driver_feature_select, VIRTIO_FEATURES_0_31);
    329339        pio_write_le32(&cfg->driver_feature, features);
    330 
    331         ddf_msg(LVL_NOTE, "accepted features %x", features);
     340        pio_write_le32(&cfg->driver_feature_select, VIRTIO_FEATURES_32_63);
     341        pio_write_le32(&cfg->driver_feature, reserved_features);
     342
     343        ddf_msg(LVL_NOTE, "accepted features %x, reserved features %x",
     344            features, reserved_features);
    332345
    333346        /* 5. Set FEATURES_OK */
Note: See TracChangeset for help on using the changeset viewer.