mirror of
https://github.com/holub/mame
synced 2025-04-22 16:31:49 +03:00
xbox: more usb (nw)
This commit is contained in:
parent
4df54c9986
commit
c1e3a3fcac
@ -74,17 +74,57 @@ enum OHCIRegisters {
|
||||
|
||||
enum HcControlBits
|
||||
{
|
||||
CBSR = 1 << 0, // ControlBulkServiceRatio
|
||||
CBSR = 3 << 0, // ControlBulkServiceRatio
|
||||
PLE = 1 << 2, // PeriodicListEnable
|
||||
IE = 1 << 3, // IsochronousEnable
|
||||
CLE = 1 << 4, // ControlListEnable
|
||||
BLE = 1 << 5, // BulkListEnable
|
||||
HCFS = 1 << 6, // HostControllerFunctionalState
|
||||
HCFS = 3 << 6, // HostControllerFunctionalState
|
||||
IR = 1 << 8, // InterruptRouting
|
||||
RWC = 1 << 9, // RemoteWakeupConnected
|
||||
RWE = 1 << 10 // RemoteWakeupEnable
|
||||
};
|
||||
|
||||
enum HcCommandStatusBits
|
||||
{
|
||||
HCR = 1 << 0, // HostControllerReset
|
||||
CLF = 1 << 1, // ControlListFilled
|
||||
BLF = 1 << 2, // BulkListFilled
|
||||
OCR = 1 << 3, // OwnershipChangeRequest
|
||||
SOC = 3 << 16 // SchedulingOverrunCount
|
||||
};
|
||||
|
||||
enum HcInterruptEnableBits
|
||||
{
|
||||
SO = 1 << 0, // SchedulingOverrun
|
||||
WDH = 1 << 1, // WritebackDoneHead
|
||||
SF = 1 << 2, // StartofFrame
|
||||
RD = 1 << 3, // ResumeDetected
|
||||
UE = 1 << 4, // UnrecoverableError
|
||||
FNO = 1 << 5, // FrameNumberOverflow
|
||||
RHSC = 1 << 6, // RootHubStatusChange
|
||||
OC = 1 << 30, // OwnershipChange
|
||||
MIE = 1 << 31, // MasterInterruptEnable
|
||||
};
|
||||
|
||||
|
||||
enum HcRhDescriptorABits
|
||||
{
|
||||
NDP = 0xff << 0, // NumberDownstreamPorts
|
||||
PSM = 1 << 8, // PowerSwitchingMode
|
||||
NPS = 1 << 9, // NoPowerSwitching
|
||||
DT = 1 << 10, // DeviceType
|
||||
OCPM = 1 << 11, // OverCurrentProtectionMode
|
||||
NOCPM = 1 << 12, // NoOverCurrentProtection
|
||||
POTPGT = 0xff << 24 // PowerOnToPowerGoodTime
|
||||
};
|
||||
|
||||
enum HcRhDescriptorBBits
|
||||
{
|
||||
DR = 0xffff << 0, // DeviceRemovable
|
||||
PPCM = 0xffff << 16 // PortPowerControlMask
|
||||
};
|
||||
|
||||
enum HcRhStatusBits
|
||||
{
|
||||
LPS = 1 << 0, // LocalPowerStatus
|
||||
|
@ -431,11 +431,11 @@ void ohci_usb_controller::device_timer(emu_timer &timer, device_timer_id id, int
|
||||
// if current endpoint descriptor is not 0 use it, otherwise ...
|
||||
if (ohcist.hc_regs[HcControlCurrentED] == 0) {
|
||||
// ... check the filled bit ...
|
||||
if (ohcist.hc_regs[HcCommandStatus] & (1 << 1)) {
|
||||
if (ohcist.hc_regs[HcCommandStatus] & CLF) {
|
||||
// ... if 1 start processing from the head of the list
|
||||
ohcist.hc_regs[HcControlCurrentED] = ohcist.hc_regs[HcControlHeadED];
|
||||
// clear CLF (ControlListFilled)
|
||||
ohcist.hc_regs[HcCommandStatus] &= ~(1 << 1);
|
||||
ohcist.hc_regs[HcCommandStatus] &= ~CLF;
|
||||
// but if the list is empty, go to the next list
|
||||
if (ohcist.hc_regs[HcControlCurrentED] == 0)
|
||||
cont = false;
|
||||
@ -457,7 +457,7 @@ void ohci_usb_controller::device_timer(emu_timer &timer, device_timer_id id, int
|
||||
if (ohcist.endpoint_descriptor.headp != ohcist.endpoint_descriptor.tailp) {
|
||||
UINT32 a, b;
|
||||
// set CLF (ControlListFilled)
|
||||
ohcist.hc_regs[HcCommandStatus] |= (1 << 1);
|
||||
ohcist.hc_regs[HcCommandStatus] |= CLF;
|
||||
// service transfer descriptor
|
||||
usb_ohci_read_transfer_descriptor(ohcist.endpoint_descriptor.headp);
|
||||
// get pid
|
||||
@ -568,11 +568,11 @@ void ohci_usb_controller::device_timer(emu_timer &timer, device_timer_id id, int
|
||||
// if current endpoint descriptor is not 0 use it, otherwise ...
|
||||
if (ohcist.hc_regs[HcBulkCurrentED] == 0) {
|
||||
// ... check the filled bit ...
|
||||
if (ohcist.hc_regs[HcCommandStatus] & (1 << 2)) {
|
||||
if (ohcist.hc_regs[HcCommandStatus] & BLF) {
|
||||
// ... if 1 start processing from the head of the list
|
||||
ohcist.hc_regs[HcBulkCurrentED] = ohcist.hc_regs[HcBulkHeadED];
|
||||
// clear BLF (BulkListFilled)
|
||||
ohcist.hc_regs[HcCommandStatus] &= ~(1 << 2);
|
||||
ohcist.hc_regs[HcCommandStatus] &= ~BLF;
|
||||
// but if the list is empty, go to the next list
|
||||
if (ohcist.hc_regs[HcBulkCurrentED] == 0)
|
||||
cont = false;
|
||||
@ -593,7 +593,7 @@ void ohci_usb_controller::device_timer(emu_timer &timer, device_timer_id id, int
|
||||
if (ohcist.endpoint_descriptor.headp != ohcist.endpoint_descriptor.tailp) {
|
||||
UINT32 a, b;
|
||||
// set BLF (BulkListFilled)
|
||||
ohcist.hc_regs[HcCommandStatus] |= (1 << 2);
|
||||
ohcist.hc_regs[HcCommandStatus] |= BLF;
|
||||
// service transfer descriptor
|
||||
usb_ohci_read_transfer_descriptor(ohcist.endpoint_descriptor.headp);
|
||||
// get pid
|
||||
@ -682,9 +682,9 @@ void ohci_usb_controller::device_timer(emu_timer &timer, device_timer_id id, int
|
||||
}
|
||||
}
|
||||
// go to the next list
|
||||
if ((ohcist.hc_regs[HcCommandStatus] & (1 << 1)) && (ohcist.hc_regs[HcControl] & CLE))
|
||||
if ((ohcist.hc_regs[HcCommandStatus] & CLF) && (ohcist.hc_regs[HcControl] & CLE))
|
||||
list = 1; // go to control list if enabled and filled
|
||||
else if ((ohcist.hc_regs[HcCommandStatus] & (1 << 2)) && (ohcist.hc_regs[HcControl] & BLE))
|
||||
else if ((ohcist.hc_regs[HcCommandStatus] & BLF) && (ohcist.hc_regs[HcControl] & BLE))
|
||||
list = 2; // otherwise stay in bulk list if enabled and filled
|
||||
else
|
||||
list = 0; // if no control or bulk lists, go to periodic list
|
||||
|
Loading…
Reference in New Issue
Block a user