summaryrefslogtreecommitdiffstatshomepage
path: root/src/mame/machine/xbox_pci.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mame/machine/xbox_pci.cpp')
-rw-r--r--src/mame/machine/xbox_pci.cpp28
1 files changed, 26 insertions, 2 deletions
diff --git a/src/mame/machine/xbox_pci.cpp b/src/mame/machine/xbox_pci.cpp
index 33b86730cfc..25462638f47 100644
--- a/src/mame/machine/xbox_pci.cpp
+++ b/src/mame/machine/xbox_pci.cpp
@@ -229,14 +229,15 @@ mcpx_ohci_device::mcpx_ohci_device(const machine_config &mconfig, const char *ta
: pci_device(mconfig, MCPX_OHCI, tag, owner, clock),
ohci_usb(nullptr),
m_interrupt_handler(*this),
- timer(nullptr)
+ timer(nullptr),
+ connecteds_count(0)
{
}
void mcpx_ohci_device::plug_usb_device(int port, ohci_function *function)
{
function->set_bus_manager(ohci_usb);
- ohci_usb->usb_ohci_plug(port, function); // connect to root hub port 3, chihiro needs to use 1 and 2
+ ohci_usb->usb_ohci_plug(port, function);
}
void mcpx_ohci_device::device_start()
@@ -256,6 +257,8 @@ void mcpx_ohci_device::device_start()
timer = timer_alloc(0);
ohci_usb->set_timer(timer);
ohci_usb->start();
+ for (int i=0;i < connecteds_count;i++)
+ plug_usb_device(connecteds[i].port, connecteds[i].dev);
}
void mcpx_ohci_device::device_reset()
@@ -265,6 +268,27 @@ void mcpx_ohci_device::device_reset()
ohci_usb->reset();
}
+void mcpx_ohci_device::device_config_complete()
+{
+ char id[8];
+
+ for (int i = 1; i<=4; i++)
+ {
+ sprintf(id, "port%d", i);
+ ohci_usb_connector *conn = downcast<ohci_usb_connector *>(subdevice(id));
+ if (conn)
+ {
+ ohci_function *func = conn->get_device();
+ if (func)
+ {
+ connecteds[connecteds_count].dev = func;
+ connecteds[connecteds_count].port = i;
+ connecteds_count++;
+ }
+ }
+ }
+}
+
void mcpx_ohci_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr)
{
if (ohci_usb)