* Completed SubmitTransfer
* Added SubmitAsyncTransfer and SubmitPeriodicTransfer (not implemented) * Removed unecessary spinlock * Wrapped some lines to follow coding guidelines git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@22932 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
parent
76748b3cb1
commit
3f652d19a6
@ -66,7 +66,6 @@ OHCI::OHCI(pci_info *info, Stack *stack)
|
||||
fPCIInfo(info),
|
||||
fStack(stack),
|
||||
fRegisterArea(-1),
|
||||
fSpinLock(0),
|
||||
fHccaArea(-1),
|
||||
fDummyControl(NULL),
|
||||
fDummyBulk(NULL),
|
||||
@ -264,10 +263,9 @@ OHCI::OHCI(pci_info *info, Stack *stack)
|
||||
}
|
||||
|
||||
// The controller is now in SUSPEND state, we have 2ms to go OPERATIONAL.
|
||||
// In order to do so we need a spinlock
|
||||
// In order to do so we need to disable interrupts.
|
||||
|
||||
cpu_status former = disable_interrupts();
|
||||
acquire_spinlock(&fSpinLock);
|
||||
|
||||
// Set up host controller register
|
||||
_WriteReg(OHCI_HCCA, (uint32)hccaPhysicalAddress);
|
||||
@ -286,7 +284,6 @@ OHCI::OHCI(pci_info *info, Stack *stack)
|
||||
// And finally start the controller
|
||||
_WriteReg(OHCI_CONTROL, control);
|
||||
|
||||
release_spinlock(&fSpinLock);
|
||||
restore_interrupts(former);
|
||||
|
||||
// The controller is now OPERATIONAL.
|
||||
@ -429,6 +426,33 @@ OHCI::SubmitTransfer(Transfer *transfer)
|
||||
if (transfer->TransferPipe()->DeviceAddress() == fRootHubAddress)
|
||||
return fRootHub->ProcessTransfer(this, transfer);
|
||||
|
||||
uint32 type = transfer->TransferPipe()->Type();
|
||||
if ((type & USB_OBJECT_CONTROL_PIPE) || (type & USB_OBJECT_BULK_PIPE)) {
|
||||
TRACE(("usb_ohci: submitting async transfer\n"));
|
||||
return _SubmitAsyncTransfer(transfer);
|
||||
}
|
||||
|
||||
if ((type & USB_OBJECT_INTERRUPT_PIPE) || (type & USB_OBJECT_ISO_PIPE)) {
|
||||
TRACE(("usb_ohci: submitting periodic transfer\n"));
|
||||
return _SubmitPeriodicTransfer(transfer);
|
||||
}
|
||||
|
||||
TRACE_ERROR(("usb_ohci: tried to submit transfer for unknow pipe"
|
||||
" type %lu\n", type));
|
||||
return B_ERROR;
|
||||
}
|
||||
|
||||
|
||||
status_t
|
||||
OHCI::_SubmitAsyncTransfer(Transfer *transfer)
|
||||
{
|
||||
return B_ERROR;
|
||||
}
|
||||
|
||||
|
||||
status_t
|
||||
OHCI::_SubmitPeriodicTransfer(Transfer *transfer)
|
||||
{
|
||||
return B_ERROR;
|
||||
}
|
||||
|
||||
|
@ -59,7 +59,6 @@ public:
|
||||
virtual status_t SubmitTransfer(Transfer *transfer);
|
||||
virtual status_t CancelQueuedTransfers(Pipe *pipe,
|
||||
bool force);
|
||||
status_t SubmitRequest(Transfer *transfer);
|
||||
|
||||
virtual status_t NotifyPipeChange(Pipe *pipe,
|
||||
usb_change change);
|
||||
@ -68,7 +67,8 @@ static status_t AddTo(Stack *stack);
|
||||
|
||||
// Port operations
|
||||
uint8 PortCount() { return fPortCount; };
|
||||
status_t GetPortStatus(uint8 index, usb_port_status *status);
|
||||
status_t GetPortStatus(uint8 index,
|
||||
usb_port_status *status);
|
||||
status_t SetPortFeature(uint8 index, uint16 feature);
|
||||
status_t ClearPortFeature(uint8 index, uint16 feature);
|
||||
|
||||
@ -82,9 +82,13 @@ static int32 _InterruptHandler(void *data);
|
||||
|
||||
static int32 _FinishThread(void *data);
|
||||
void _FinishTransfer();
|
||||
|
||||
status_t _SubmitAsyncTransfer(Transfer *transfer);
|
||||
status_t _SubmitPeriodicTransfer(Transfer *transfer);
|
||||
|
||||
// Endpoint related methods
|
||||
status_t _CreateEndpoint(Pipe *pipe, bool isIsochronous);
|
||||
status_t _CreateEndpoint(Pipe *pipe,
|
||||
bool isIsochronous);
|
||||
ohci_endpoint_descriptor *_AllocateEndpoint();
|
||||
void _FreeEndpoint(
|
||||
ohci_endpoint_descriptor *endpoint);
|
||||
@ -109,8 +113,6 @@ static pci_module_info *sPCIModule;
|
||||
uint32 *fOperationalRegisters;
|
||||
area_id fRegisterArea;
|
||||
|
||||
spinlock fSpinLock;
|
||||
|
||||
// Host Controller Communication Area related stuff
|
||||
area_id fHccaArea;
|
||||
ohci_hcca *fHcca;
|
||||
|
Loading…
x
Reference in New Issue
Block a user