virtio*: remove trailing spaces
This commit is contained in:
@@ -118,12 +118,12 @@ VirtioDevice::NegociateFeatures(uint32 supported, uint32* negociated,
|
|||||||
/*| VIRTIO_FEATURE_RING_INDIRECT_DESC*/ | VIRTIO_FEATURE_RING_EVENT_IDX);
|
/*| VIRTIO_FEATURE_RING_INDIRECT_DESC*/ | VIRTIO_FEATURE_RING_EVENT_IDX);
|
||||||
|
|
||||||
*negociated = fFeatures;
|
*negociated = fFeatures;
|
||||||
|
|
||||||
DumpFeatures("negociated features", fFeatures, get_feature_name);
|
DumpFeatures("negociated features", fFeatures, get_feature_name);
|
||||||
|
|
||||||
return fController->write_guest_features(fCookie, fFeatures);
|
return fController->write_guest_features(fCookie, fFeatures);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
status_t
|
status_t
|
||||||
VirtioDevice::ReadDeviceConfig(uint8 offset, void* buffer, size_t bufferSize)
|
VirtioDevice::ReadDeviceConfig(uint8 offset, void* buffer, size_t bufferSize)
|
||||||
@@ -183,7 +183,7 @@ VirtioDevice::SetupInterrupt(virtio_intr_func configHandler, void *driverCookie)
|
|||||||
if (status != B_OK)
|
if (status != B_OK)
|
||||||
return status;
|
return status;
|
||||||
|
|
||||||
// ready to go
|
// ready to go
|
||||||
fController->set_status(fCookie, VIRTIO_CONFIG_STATUS_DRIVER_OK);
|
fController->set_status(fCookie, VIRTIO_CONFIG_STATUS_DRIVER_OK);
|
||||||
|
|
||||||
for (size_t index = 0; index < fQueueCount; index++)
|
for (size_t index = 0; index < fQueueCount; index++)
|
||||||
@@ -196,7 +196,7 @@ status_t
|
|||||||
VirtioDevice::SetupQueue(uint16 queueNumber, phys_addr_t physAddr)
|
VirtioDevice::SetupQueue(uint16 queueNumber, phys_addr_t physAddr)
|
||||||
{
|
{
|
||||||
return fController->setup_queue(fCookie, queueNumber, physAddr);
|
return fController->setup_queue(fCookie, queueNumber, physAddr);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void
|
void
|
||||||
@@ -214,14 +214,14 @@ VirtioDevice::QueueInterrupt(uint16 queueNumber)
|
|||||||
return B_BAD_VALUE;
|
return B_BAD_VALUE;
|
||||||
return fQueues[queueNumber]->Interrupt();
|
return fQueues[queueNumber]->Interrupt();
|
||||||
}
|
}
|
||||||
|
|
||||||
status_t status = B_OK;
|
status_t status = B_OK;
|
||||||
for (uint16 i = 0; i < fQueueCount; i++) {
|
for (uint16 i = 0; i < fQueueCount; i++) {
|
||||||
status = fQueues[i]->Interrupt();
|
status = fQueues[i]->Interrupt();
|
||||||
if (status != B_OK)
|
if (status != B_OK)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
return status;
|
return status;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -58,18 +58,18 @@ virtio_negociate_features(void* cookie, uint32 supported,
|
|||||||
{
|
{
|
||||||
CALLED();
|
CALLED();
|
||||||
VirtioDevice *device = (VirtioDevice *)cookie;
|
VirtioDevice *device = (VirtioDevice *)cookie;
|
||||||
|
|
||||||
return device->NegociateFeatures(supported, negociated, get_feature_name);
|
return device->NegociateFeatures(supported, negociated, get_feature_name);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
status_t
|
status_t
|
||||||
virtio_read_device_config(void* cookie, uint8 offset, void* buffer,
|
virtio_read_device_config(void* cookie, uint8 offset, void* buffer,
|
||||||
size_t bufferSize)
|
size_t bufferSize)
|
||||||
{
|
{
|
||||||
CALLED();
|
CALLED();
|
||||||
VirtioDevice *device = (VirtioDevice *)cookie;
|
VirtioDevice *device = (VirtioDevice *)cookie;
|
||||||
|
|
||||||
return device->ReadDeviceConfig(offset, buffer, bufferSize);
|
return device->ReadDeviceConfig(offset, buffer, bufferSize);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -80,7 +80,7 @@ virtio_write_device_config(void* cookie, uint8 offset,
|
|||||||
{
|
{
|
||||||
CALLED();
|
CALLED();
|
||||||
VirtioDevice *device = (VirtioDevice *)cookie;
|
VirtioDevice *device = (VirtioDevice *)cookie;
|
||||||
|
|
||||||
return device->WriteDeviceConfig(offset, buffer, bufferSize);
|
return device->WriteDeviceConfig(offset, buffer, bufferSize);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -100,7 +100,7 @@ virtio_setup_interrupt(virtio_device cookie, virtio_intr_func config_handler,
|
|||||||
{
|
{
|
||||||
CALLED();
|
CALLED();
|
||||||
VirtioDevice *device = (VirtioDevice *)cookie;
|
VirtioDevice *device = (VirtioDevice *)cookie;
|
||||||
return device->SetupInterrupt(config_handler, driverCookie);
|
return device->SetupInterrupt(config_handler, driverCookie);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -128,7 +128,7 @@ virtio_queue_request(virtio_queue cookie, const physical_entry *readEntry,
|
|||||||
entries[1] = *writtenEntry;
|
entries[1] = *writtenEntry;
|
||||||
} else if (writtenEntry != NULL)
|
} else if (writtenEntry != NULL)
|
||||||
entries[0] = *writtenEntry;
|
entries[0] = *writtenEntry;
|
||||||
|
|
||||||
return virtio_queue_request_v(cookie, entries, readEntry != NULL ? 1 : 0,
|
return virtio_queue_request_v(cookie, entries, readEntry != NULL ? 1 : 0,
|
||||||
writtenEntry != NULL? 1 : 0, callback, callbackCookie);
|
writtenEntry != NULL? 1 : 0, callback, callbackCookie);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -21,7 +21,7 @@
|
|||||||
#ifdef VIRTIO_TRACE
|
#ifdef VIRTIO_TRACE
|
||||||
# define TRACE(x...) dprintf("\33[33mvirtio:\33[0m " x)
|
# define TRACE(x...) dprintf("\33[33mvirtio:\33[0m " x)
|
||||||
#else
|
#else
|
||||||
# define TRACE(x...)
|
# define TRACE(x...)
|
||||||
#endif
|
#endif
|
||||||
#define TRACE_ALWAYS(x...) dprintf("\33[33mvirtio:\33[0m " x)
|
#define TRACE_ALWAYS(x...) dprintf("\33[33mvirtio:\33[0m " x)
|
||||||
#define ERROR(x...) TRACE_ALWAYS(x)
|
#define ERROR(x...) TRACE_ALWAYS(x)
|
||||||
@@ -48,7 +48,7 @@ public:
|
|||||||
status_t NegociateFeatures(uint32 supported,
|
status_t NegociateFeatures(uint32 supported,
|
||||||
uint32* negociated,
|
uint32* negociated,
|
||||||
const char* (*get_feature_name)(uint32));
|
const char* (*get_feature_name)(uint32));
|
||||||
|
|
||||||
status_t ReadDeviceConfig(uint8 offset, void* buffer,
|
status_t ReadDeviceConfig(uint8 offset, void* buffer,
|
||||||
size_t bufferSize);
|
size_t bufferSize);
|
||||||
status_t WriteDeviceConfig(uint8 offset,
|
status_t WriteDeviceConfig(uint8 offset,
|
||||||
@@ -75,7 +75,7 @@ private:
|
|||||||
void DumpFeatures(const char* title,
|
void DumpFeatures(const char* title,
|
||||||
uint32 features,
|
uint32 features,
|
||||||
const char* (*get_feature_name)(uint32));
|
const char* (*get_feature_name)(uint32));
|
||||||
|
|
||||||
|
|
||||||
device_node * fNode;
|
device_node * fNode;
|
||||||
uint32 fID;
|
uint32 fID;
|
||||||
@@ -123,7 +123,7 @@ public:
|
|||||||
void *callbackCookie);
|
void *callbackCookie);
|
||||||
void EnableInterrupt();
|
void EnableInterrupt();
|
||||||
void DisableInterrupt();
|
void DisableInterrupt();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void UpdateAvailable(uint16 index);
|
void UpdateAvailable(uint16 index);
|
||||||
uint16 QueueVector(uint16 insertIndex,
|
uint16 QueueVector(uint16 insertIndex,
|
||||||
|
|||||||
@@ -51,7 +51,7 @@ alloc_mem(void **virt, phys_addr_t *phy, size_t size, uint32 protection,
|
|||||||
class TransferDescriptor {
|
class TransferDescriptor {
|
||||||
public:
|
public:
|
||||||
TransferDescriptor(VirtioQueue* queue,
|
TransferDescriptor(VirtioQueue* queue,
|
||||||
uint16 size,
|
uint16 size,
|
||||||
virtio_callback_func callback,
|
virtio_callback_func callback,
|
||||||
void *callbackCookie);
|
void *callbackCookie);
|
||||||
~TransferDescriptor();
|
~TransferDescriptor();
|
||||||
@@ -69,7 +69,7 @@ private:
|
|||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
TransferDescriptor::TransferDescriptor(VirtioQueue* queue, uint16 size,
|
TransferDescriptor::TransferDescriptor(VirtioQueue* queue, uint16 size,
|
||||||
virtio_callback_func callback, void *callbackCookie)
|
virtio_callback_func callback, void *callbackCookie)
|
||||||
: fQueue(queue),
|
: fQueue(queue),
|
||||||
fCookie(callbackCookie),
|
fCookie(callbackCookie),
|
||||||
@@ -127,7 +127,7 @@ VirtioQueue::VirtioQueue(VirtioDevice* device, uint16 queueNumber,
|
|||||||
for (uint16 i = 0; i < fRingSize - 1; i++)
|
for (uint16 i = 0; i < fRingSize - 1; i++)
|
||||||
fRing.desc[i].next = i + 1;
|
fRing.desc[i].next = i + 1;
|
||||||
fRing.desc[fRingSize - 1].next = UINT16_MAX;
|
fRing.desc[fRingSize - 1].next = UINT16_MAX;
|
||||||
|
|
||||||
DisableInterrupt();
|
DisableInterrupt();
|
||||||
|
|
||||||
device->SetupQueue(fQueueNumber, physAddr);
|
device->SetupQueue(fQueueNumber, physAddr);
|
||||||
@@ -172,7 +172,7 @@ VirtioQueue::Interrupt()
|
|||||||
|
|
||||||
while (fRingUsedIndex != fRing.used->idx)
|
while (fRingUsedIndex != fRing.used->idx)
|
||||||
Finish();
|
Finish();
|
||||||
|
|
||||||
EnableInterrupt();
|
EnableInterrupt();
|
||||||
return B_OK;
|
return B_OK;
|
||||||
}
|
}
|
||||||
@@ -199,7 +199,7 @@ VirtioQueue::Finish()
|
|||||||
index = fRing.desc[index].next;
|
index = fRing.desc[index].next;
|
||||||
size--;
|
size--;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (size > 0)
|
if (size > 0)
|
||||||
panic("VirtioQueue::Finish() descriptors left %d\n", size);
|
panic("VirtioQueue::Finish() descriptors left %d\n", size);
|
||||||
|
|
||||||
@@ -221,7 +221,7 @@ VirtioQueue::QueueRequest(const physical_entry* vector, size_t readVectorCount,
|
|||||||
if (count < 1)
|
if (count < 1)
|
||||||
return B_BAD_VALUE;
|
return B_BAD_VALUE;
|
||||||
if ((fDevice->Features() & VIRTIO_FEATURE_RING_INDIRECT_DESC) != 0) {
|
if ((fDevice->Features() & VIRTIO_FEATURE_RING_INDIRECT_DESC) != 0) {
|
||||||
return QueueRequestIndirect(vector, readVectorCount,
|
return QueueRequestIndirect(vector, readVectorCount,
|
||||||
writtenVectorCount, callback, callbackCookie);
|
writtenVectorCount, callback, callbackCookie);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -233,7 +233,7 @@ VirtioQueue::QueueRequest(const physical_entry* vector, size_t readVectorCount,
|
|||||||
count, callback, callbackCookie);
|
count, callback, callbackCookie);
|
||||||
if (fDescriptors[insertIndex] == NULL)
|
if (fDescriptors[insertIndex] == NULL)
|
||||||
return B_NO_MEMORY;
|
return B_NO_MEMORY;
|
||||||
|
|
||||||
// enqueue
|
// enqueue
|
||||||
uint16 index = QueueVector(insertIndex, fRing.desc, vector,
|
uint16 index = QueueVector(insertIndex, fRing.desc, vector,
|
||||||
readVectorCount, writtenVectorCount);
|
readVectorCount, writtenVectorCount);
|
||||||
@@ -244,7 +244,7 @@ VirtioQueue::QueueRequest(const physical_entry* vector, size_t readVectorCount,
|
|||||||
UpdateAvailable(insertIndex);
|
UpdateAvailable(insertIndex);
|
||||||
|
|
||||||
NotifyHost();
|
NotifyHost();
|
||||||
|
|
||||||
return B_OK;
|
return B_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -42,7 +42,7 @@ VirtioSCSIController::VirtioSCSIController(device_node *node)
|
|||||||
|
|
||||||
if (gSCSI->alloc_dpc(&fEventDPC) != B_OK)
|
if (gSCSI->alloc_dpc(&fEventDPC) != B_OK)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
// get the Virtio device from our parent's parent
|
// get the Virtio device from our parent's parent
|
||||||
device_node *parent = gDeviceManager->get_parent_node(node);
|
device_node *parent = gDeviceManager->get_parent_node(node);
|
||||||
device_node *virtioParent = gDeviceManager->get_parent_node(parent);
|
device_node *virtioParent = gDeviceManager->get_parent_node(parent);
|
||||||
@@ -90,14 +90,14 @@ VirtioSCSIController::VirtioSCSIController(device_node *node)
|
|||||||
|
|
||||||
for (uint32 i = 0; i < VIRTIO_SCSI_NUM_EVENTS; i++)
|
for (uint32 i = 0; i < VIRTIO_SCSI_NUM_EVENTS; i++)
|
||||||
_SubmitEvent(i);
|
_SubmitEvent(i);
|
||||||
|
|
||||||
fStatus = fVirtio->setup_interrupt(fVirtioDevice, NULL, this);
|
fStatus = fVirtio->setup_interrupt(fVirtioDevice, NULL, this);
|
||||||
if (fStatus != B_OK) {
|
if (fStatus != B_OK) {
|
||||||
ERROR("interrupt setup failed (%s)\n", strerror(fStatus));
|
ERROR("interrupt setup failed (%s)\n", strerror(fStatus));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -149,7 +149,7 @@ VirtioSCSIController::GetRestrictions(uint8 targetID, bool *isATAPI,
|
|||||||
bool *noAutoSense, uint32 *maxBlocks)
|
bool *noAutoSense, uint32 *maxBlocks)
|
||||||
{
|
{
|
||||||
*isATAPI = false;
|
*isATAPI = false;
|
||||||
*noAutoSense = true;
|
*noAutoSense = true;
|
||||||
*maxBlocks = fConfig.cmd_per_lun;
|
*maxBlocks = fConfig.cmd_per_lun;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -219,7 +219,7 @@ VirtioSCSIController::ExecuteRequest(scsi_ccb *ccb)
|
|||||||
|
|
||||||
result = fInterruptConditionEntry.Wait(B_RELATIVE_TIMEOUT,
|
result = fInterruptConditionEntry.Wait(B_RELATIVE_TIMEOUT,
|
||||||
fRequest->Timeout());
|
fRequest->Timeout());
|
||||||
|
|
||||||
{
|
{
|
||||||
InterruptsSpinLocker locker(fInterruptLock);
|
InterruptsSpinLocker locker(fInterruptLock);
|
||||||
fExpectsInterrupt = false;
|
fExpectsInterrupt = false;
|
||||||
@@ -233,7 +233,7 @@ VirtioSCSIController::ExecuteRequest(scsi_ccb *ccb)
|
|||||||
|
|
||||||
|
|
||||||
uchar
|
uchar
|
||||||
VirtioSCSIController::AbortRequest(scsi_ccb *request)
|
VirtioSCSIController::AbortRequest(scsi_ccb *request)
|
||||||
{
|
{
|
||||||
return SCSI_REQ_CMP;
|
return SCSI_REQ_CMP;
|
||||||
}
|
}
|
||||||
@@ -250,7 +250,7 @@ status_t
|
|||||||
VirtioSCSIController::Control(uint8 targetID, uint32 op, void *buffer,
|
VirtioSCSIController::Control(uint8 targetID, uint32 op, void *buffer,
|
||||||
size_t length)
|
size_t length)
|
||||||
{
|
{
|
||||||
CALLED();
|
CALLED();
|
||||||
return B_DEV_INVALID_IOCTL;
|
return B_DEV_INVALID_IOCTL;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -293,7 +293,7 @@ VirtioSCSIController::_EventInterrupt(struct virtio_scsi_event* event)
|
|||||||
} else switch (event->event) {
|
} else switch (event->event) {
|
||||||
case VIRTIO_SCSI_T_TRANSPORT_RESET:
|
case VIRTIO_SCSI_T_TRANSPORT_RESET:
|
||||||
ERROR("transport reset\n");
|
ERROR("transport reset\n");
|
||||||
break;
|
break;
|
||||||
case VIRTIO_SCSI_T_ASYNC_NOTIFY:
|
case VIRTIO_SCSI_T_ASYNC_NOTIFY:
|
||||||
ERROR("async notify\n");
|
ERROR("async notify\n");
|
||||||
break;
|
break;
|
||||||
|
|||||||
@@ -60,7 +60,7 @@ public:
|
|||||||
uchar TerminateRequest(scsi_ccb* request);
|
uchar TerminateRequest(scsi_ccb* request);
|
||||||
status_t Control(uint8 targetID, uint32 op,
|
status_t Control(uint8 targetID, uint32 op,
|
||||||
void* buffer, size_t length);
|
void* buffer, size_t length);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
static void _RequestCallback(void* driverCookie,
|
static void _RequestCallback(void* driverCookie,
|
||||||
void *cookie);
|
void *cookie);
|
||||||
@@ -141,7 +141,7 @@ private:
|
|||||||
bool fHasLock;
|
bool fHasLock;
|
||||||
|
|
||||||
uint8 fStatus;
|
uint8 fStatus;
|
||||||
|
|
||||||
bigtime_t fTimeout;
|
bigtime_t fTimeout;
|
||||||
size_t fBytesLeft;
|
size_t fBytesLeft;
|
||||||
bool fIsWrite;
|
bool fIsWrite;
|
||||||
|
|||||||
@@ -181,7 +181,7 @@ VirtioSCSIRequest::FillRequest(uint32 inCount, uint32 outCount,
|
|||||||
entries[outCount].address = entries[0].address
|
entries[outCount].address = entries[0].address
|
||||||
+ sizeof(struct virtio_scsi_cmd_req);
|
+ sizeof(struct virtio_scsi_cmd_req);
|
||||||
entries[outCount].size = sizeof(struct virtio_scsi_cmd_resp);
|
entries[outCount].size = sizeof(struct virtio_scsi_cmd_resp);
|
||||||
|
|
||||||
if (inCount > 1) {
|
if (inCount > 1) {
|
||||||
memcpy(entries + outCount + 1, fCCB->sg_list, fCCB->sg_count
|
memcpy(entries + outCount + 1, fCCB->sg_list, fCCB->sg_count
|
||||||
* sizeof(physical_entry));
|
* sizeof(physical_entry));
|
||||||
|
|||||||
@@ -198,7 +198,7 @@ virtio_scsi_register_device(device_node *parent)
|
|||||||
|
|
||||||
gDeviceManager->get_driver(parent, (driver_module_info **)&virtio,
|
gDeviceManager->get_driver(parent, (driver_module_info **)&virtio,
|
||||||
(void **)&virtioDevice);
|
(void **)&virtioDevice);
|
||||||
|
|
||||||
status_t status = virtio->read_device_config(virtioDevice, 0, &config,
|
status_t status = virtio->read_device_config(virtioDevice, 0, &config,
|
||||||
sizeof(struct virtio_scsi_config));
|
sizeof(struct virtio_scsi_config));
|
||||||
if (status != B_OK)
|
if (status != B_OK)
|
||||||
@@ -221,7 +221,7 @@ virtio_scsi_register_device(device_node *parent)
|
|||||||
{ ui32: config.seg_max }},
|
{ ui32: config.seg_max }},
|
||||||
{ NULL }
|
{ NULL }
|
||||||
};
|
};
|
||||||
|
|
||||||
return gDeviceManager->register_node(parent, VIRTIO_SCSI_DEVICE_MODULE_NAME,
|
return gDeviceManager->register_node(parent, VIRTIO_SCSI_DEVICE_MODULE_NAME,
|
||||||
attrs, NULL, NULL);
|
attrs, NULL, NULL);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -11,6 +11,6 @@ KernelAddon virtio_pci :
|
|||||||
;
|
;
|
||||||
|
|
||||||
SEARCH on [ FGristFiles
|
SEARCH on [ FGristFiles
|
||||||
kernel_cpp.cpp
|
kernel_cpp.cpp
|
||||||
] = [ FDirName $(HAIKU_TOP) src system kernel util ] ;
|
] = [ FDirName $(HAIKU_TOP) src system kernel util ] ;
|
||||||
|
|
||||||
|
|||||||
@@ -68,7 +68,7 @@ int32
|
|||||||
virtio_pci_interrupt(void *data)
|
virtio_pci_interrupt(void *data)
|
||||||
{
|
{
|
||||||
virtio_pci_sim_info* bus = (virtio_pci_sim_info*)data;
|
virtio_pci_sim_info* bus = (virtio_pci_sim_info*)data;
|
||||||
uint8 isr = bus->pci->read_io_8(bus->device,
|
uint8 isr = bus->pci->read_io_8(bus->device,
|
||||||
bus->base_addr + VIRTIO_PCI_ISR);
|
bus->base_addr + VIRTIO_PCI_ISR);
|
||||||
if (isr == 0)
|
if (isr == 0)
|
||||||
return B_UNHANDLED_INTERRUPT;
|
return B_UNHANDLED_INTERRUPT;
|
||||||
@@ -129,7 +129,7 @@ virtio_pci_setup_msix_interrupts(virtio_pci_sim_info* bus)
|
|||||||
ERROR("msix queue vector incorrect\n");
|
ERROR("msix queue vector incorrect\n");
|
||||||
return B_BAD_VALUE;
|
return B_BAD_VALUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (bus->irq_type == VIRTIO_IRQ_MSI_X)
|
if (bus->irq_type == VIRTIO_IRQ_MSI_X)
|
||||||
irq++;
|
irq++;
|
||||||
}
|
}
|
||||||
@@ -156,7 +156,7 @@ read_host_features(void* cookie, uint32 *features)
|
|||||||
TRACE("read_host_features() %p node %p pci %p device %p\n", bus,
|
TRACE("read_host_features() %p node %p pci %p device %p\n", bus,
|
||||||
bus->node, bus->pci, bus->device);
|
bus->node, bus->pci, bus->device);
|
||||||
|
|
||||||
*features = bus->pci->read_io_32(bus->device,
|
*features = bus->pci->read_io_32(bus->device,
|
||||||
bus->base_addr + VIRTIO_PCI_HOST_FEATURES);
|
bus->base_addr + VIRTIO_PCI_HOST_FEATURES);
|
||||||
return B_OK;
|
return B_OK;
|
||||||
}
|
}
|
||||||
@@ -206,17 +206,17 @@ read_device_config(void* cookie, uint8 _offset, void* _buffer,
|
|||||||
uint8 size = 4;
|
uint8 size = 4;
|
||||||
if (bufferSize == 1) {
|
if (bufferSize == 1) {
|
||||||
size = 1;
|
size = 1;
|
||||||
*buffer = bus->pci->read_io_8(bus->device,
|
*buffer = bus->pci->read_io_8(bus->device,
|
||||||
offset);
|
offset);
|
||||||
} else if (bufferSize <= 3) {
|
} else if (bufferSize <= 3) {
|
||||||
size = 2;
|
size = 2;
|
||||||
*(uint16*)buffer = bus->pci->read_io_16(bus->device,
|
*(uint16*)buffer = bus->pci->read_io_16(bus->device,
|
||||||
offset);
|
offset);
|
||||||
} else {
|
} else {
|
||||||
*(uint32*)buffer = bus->pci->read_io_32(bus->device,
|
*(uint32*)buffer = bus->pci->read_io_32(bus->device,
|
||||||
offset);
|
offset);
|
||||||
}
|
}
|
||||||
buffer += size;
|
buffer += size;
|
||||||
bufferSize -= size;
|
bufferSize -= size;
|
||||||
offset += size;
|
offset += size;
|
||||||
}
|
}
|
||||||
@@ -238,17 +238,17 @@ write_device_config(void* cookie, uint8 _offset, const void* _buffer,
|
|||||||
uint8 size = 4;
|
uint8 size = 4;
|
||||||
if (bufferSize == 1) {
|
if (bufferSize == 1) {
|
||||||
size = 1;
|
size = 1;
|
||||||
bus->pci->write_pci_config(bus->device,
|
bus->pci->write_pci_config(bus->device,
|
||||||
offset, size, *buffer);
|
offset, size, *buffer);
|
||||||
} else if (bufferSize <= 3) {
|
} else if (bufferSize <= 3) {
|
||||||
size = 2;
|
size = 2;
|
||||||
bus->pci->write_pci_config(bus->device,
|
bus->pci->write_pci_config(bus->device,
|
||||||
offset, size, *(const uint16*)buffer);
|
offset, size, *(const uint16*)buffer);
|
||||||
} else {
|
} else {
|
||||||
bus->pci->write_pci_config(bus->device,
|
bus->pci->write_pci_config(bus->device,
|
||||||
offset, size, *(const uint32*)buffer);
|
offset, size, *(const uint32*)buffer);
|
||||||
}
|
}
|
||||||
buffer += size;
|
buffer += size;
|
||||||
bufferSize -= size;
|
bufferSize -= size;
|
||||||
offset += size;
|
offset += size;
|
||||||
}
|
}
|
||||||
@@ -275,13 +275,13 @@ setup_queue(void* cookie, uint16 queue, phys_addr_t phy)
|
|||||||
virtio_pci_sim_info* bus = (virtio_pci_sim_info*)cookie;
|
virtio_pci_sim_info* bus = (virtio_pci_sim_info*)cookie;
|
||||||
bus->pci->write_io_16(bus->device, bus->base_addr + VIRTIO_PCI_QUEUE_SEL,
|
bus->pci->write_io_16(bus->device, bus->base_addr + VIRTIO_PCI_QUEUE_SEL,
|
||||||
queue);
|
queue);
|
||||||
bus->pci->write_io_32(bus->device, bus->base_addr + VIRTIO_PCI_QUEUE_PFN,
|
bus->pci->write_io_32(bus->device, bus->base_addr + VIRTIO_PCI_QUEUE_PFN,
|
||||||
(uint32)phy >> VIRTIO_PCI_QUEUE_ADDR_SHIFT);
|
(uint32)phy >> VIRTIO_PCI_QUEUE_ADDR_SHIFT);
|
||||||
return B_OK;
|
return B_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
status_t
|
status_t
|
||||||
setup_interrupt(void* cookie, uint16 queueCount)
|
setup_interrupt(void* cookie, uint16 queueCount)
|
||||||
{
|
{
|
||||||
CALLED();
|
CALLED();
|
||||||
@@ -327,7 +327,7 @@ setup_interrupt(void* cookie, uint16 queueCount)
|
|||||||
}
|
}
|
||||||
} else if (sPCIx86Module->get_msi_count(
|
} else if (sPCIx86Module->get_msi_count(
|
||||||
pciInfo->bus, pciInfo->device, pciInfo->function) >= 1) {
|
pciInfo->bus, pciInfo->device, pciInfo->function) >= 1) {
|
||||||
// try MSI
|
// try MSI
|
||||||
uint8 vector;
|
uint8 vector;
|
||||||
if (sPCIx86Module->configure_msi(pciInfo->bus, pciInfo->device,
|
if (sPCIx86Module->configure_msi(pciInfo->bus, pciInfo->device,
|
||||||
pciInfo->function, 1, &vector) == B_OK
|
pciInfo->function, 1, &vector) == B_OK
|
||||||
@@ -514,13 +514,13 @@ register_child_devices(void* cookie)
|
|||||||
pci_device* device;
|
pci_device* device;
|
||||||
gDeviceManager->get_driver(parent, (driver_module_info**)&pci,
|
gDeviceManager->get_driver(parent, (driver_module_info**)&pci,
|
||||||
(void**)&device);
|
(void**)&device);
|
||||||
|
|
||||||
uint16 pciSubDeviceId = pci->read_pci_config(device, PCI_subsystem_id,
|
uint16 pciSubDeviceId = pci->read_pci_config(device, PCI_subsystem_id,
|
||||||
2);
|
2);
|
||||||
|
|
||||||
char prettyName[25];
|
char prettyName[25];
|
||||||
sprintf(prettyName, "Virtio Device %" B_PRIu16, pciSubDeviceId);
|
sprintf(prettyName, "Virtio Device %" B_PRIu16, pciSubDeviceId);
|
||||||
|
|
||||||
device_attr attrs[] = {
|
device_attr attrs[] = {
|
||||||
// properties of this controller for virtio bus manager
|
// properties of this controller for virtio bus manager
|
||||||
{ B_DEVICE_PRETTY_NAME, B_STRING_TYPE,
|
{ B_DEVICE_PRETTY_NAME, B_STRING_TYPE,
|
||||||
|
|||||||
@@ -201,7 +201,7 @@ do_io(void* cookie, IOOperation* operation)
|
|||||||
1 + (operation->IsWrite() ? operation->VecCount() : 0 ),
|
1 + (operation->IsWrite() ? operation->VecCount() : 0 ),
|
||||||
1 + (operation->IsWrite() ? 0 : operation->VecCount()),
|
1 + (operation->IsWrite() ? 0 : operation->VecCount()),
|
||||||
virtio_block_callback, info);
|
virtio_block_callback, info);
|
||||||
|
|
||||||
acquire_sem(info->sem_cb);
|
acquire_sem(info->sem_cb);
|
||||||
|
|
||||||
switch (*ack) {
|
switch (*ack) {
|
||||||
@@ -258,7 +258,7 @@ virtio_block_init_device(void* _info, void** _cookie)
|
|||||||
uint64 capacity = info->config.capacity * 512 / block_size;
|
uint64 capacity = info->config.capacity * 512 / block_size;
|
||||||
|
|
||||||
virtio_block_set_capacity(info, capacity, block_size);
|
virtio_block_set_capacity(info, capacity, block_size);
|
||||||
|
|
||||||
TRACE("virtio_block: capacity: %" B_PRIu64 ", block_size %" B_PRIu32 "\n",
|
TRACE("virtio_block: capacity: %" B_PRIu64 ", block_size %" B_PRIu32 "\n",
|
||||||
info->capacity, info->block_size);
|
info->capacity, info->block_size);
|
||||||
|
|
||||||
@@ -269,7 +269,7 @@ virtio_block_init_device(void* _info, void** _cookie)
|
|||||||
return status;
|
return status;
|
||||||
}
|
}
|
||||||
status = info->virtio->setup_interrupt(info->virtio_device, NULL, NULL);
|
status = info->virtio->setup_interrupt(info->virtio_device, NULL, NULL);
|
||||||
|
|
||||||
*_cookie = info;
|
*_cookie = info;
|
||||||
return status;
|
return status;
|
||||||
}
|
}
|
||||||
@@ -298,7 +298,7 @@ virtio_block_open(void* _info, const char* path, int openMode, void** _cookie)
|
|||||||
return B_NO_MEMORY;
|
return B_NO_MEMORY;
|
||||||
|
|
||||||
handle->info = info;
|
handle->info = info;
|
||||||
|
|
||||||
*_cookie = handle;
|
*_cookie = handle;
|
||||||
return B_OK;
|
return B_OK;
|
||||||
}
|
}
|
||||||
@@ -319,7 +319,7 @@ virtio_block_free(void* cookie)
|
|||||||
{
|
{
|
||||||
CALLED();
|
CALLED();
|
||||||
virtio_block_handle* handle = (virtio_block_handle*)cookie;
|
virtio_block_handle* handle = (virtio_block_handle*)cookie;
|
||||||
|
|
||||||
free(handle);
|
free(handle);
|
||||||
return B_OK;
|
return B_OK;
|
||||||
}
|
}
|
||||||
@@ -476,7 +476,7 @@ virtio_block_set_capacity(virtio_block_driver_info* info, uint64 capacity,
|
|||||||
restrictions.max_segment_size = info->config.size_max;
|
restrictions.max_segment_size = info->config.size_max;
|
||||||
if ((info->features & VIRTIO_BLK_F_SEG_MAX) != 0)
|
if ((info->features & VIRTIO_BLK_F_SEG_MAX) != 0)
|
||||||
restrictions.max_segment_count = info->config.seg_max;
|
restrictions.max_segment_count = info->config.seg_max;
|
||||||
|
|
||||||
// TODO: we need to replace the DMAResource in our IOScheduler
|
// TODO: we need to replace the DMAResource in our IOScheduler
|
||||||
status_t status = info->dma_resource->Init(restrictions, blockSize,
|
status_t status = info->dma_resource->Init(restrictions, blockSize,
|
||||||
1024, 32);
|
1024, 32);
|
||||||
|
|||||||
Reference in New Issue
Block a user