usb: Hook up USB interrupts to rest of the chipsets
This commit is contained in:
@@ -59,6 +59,7 @@ typedef struct ali1543_t {
|
|||||||
sff8038i_t *ide_controller[2];
|
sff8038i_t *ide_controller[2];
|
||||||
smbus_ali7101_t *smbus;
|
smbus_ali7101_t *smbus;
|
||||||
usb_t *usb;
|
usb_t *usb;
|
||||||
|
usb_params_t usb_params;
|
||||||
|
|
||||||
} ali1543_t;
|
} ali1543_t;
|
||||||
|
|
||||||
@@ -905,7 +906,11 @@ ali5237_write(int func, int addr, uint8_t val, void *priv)
|
|||||||
|
|
||||||
case 0x0c: /* Cache Line Size */
|
case 0x0c: /* Cache Line Size */
|
||||||
case 0x0d: /* Latency Timer */
|
case 0x0d: /* Latency Timer */
|
||||||
|
break;
|
||||||
|
|
||||||
case 0x3c: /* Interrupt Line Register */
|
case 0x3c: /* Interrupt Line Register */
|
||||||
|
dev->usb_conf[addr] = val;
|
||||||
|
break;
|
||||||
|
|
||||||
case 0x42: /* Test Mode Register */
|
case 0x42: /* Test Mode Register */
|
||||||
dev->usb_conf[addr] = val & 0x10;
|
dev->usb_conf[addr] = val & 0x10;
|
||||||
@@ -1424,6 +1429,17 @@ ali7101_read(int func, int addr, void *priv)
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
ali5237_usb_raise_interrupt(void *priv)
|
||||||
|
{
|
||||||
|
ali1543_t *dev = (ali1543_t *) priv;
|
||||||
|
|
||||||
|
if (!dev->usb_dev_enable)
|
||||||
|
return;
|
||||||
|
|
||||||
|
pci_set_irq(dev->usb_slot, PCI_INTA);
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
ali1543_reset(void *priv)
|
ali1543_reset(void *priv)
|
||||||
{
|
{
|
||||||
@@ -1574,7 +1590,10 @@ ali1543_init(const device_t *info)
|
|||||||
dev->smbus = device_add(&ali7101_smbus_device);
|
dev->smbus = device_add(&ali7101_smbus_device);
|
||||||
|
|
||||||
/* USB */
|
/* USB */
|
||||||
dev->usb = device_add(&usb_device);
|
dev->usb_params.parent_priv = dev;
|
||||||
|
dev->usb_params.smi_handle = NULL;
|
||||||
|
dev->usb_params.raise_interrupt = ali5237_usb_raise_interrupt;
|
||||||
|
dev->usb = device_add_parameters(&usb_device, &dev->usb_params);
|
||||||
|
|
||||||
dev->type = info->local & 0xff;
|
dev->type = info->local & 0xff;
|
||||||
dev->offset = (info->local >> 8) & 0x7f;
|
dev->offset = (info->local >> 8) & 0x7f;
|
||||||
|
@@ -77,6 +77,7 @@ typedef struct _piix_ {
|
|||||||
piix_io_trap_t io_traps[26];
|
piix_io_trap_t io_traps[26];
|
||||||
port_92_t *port_92;
|
port_92_t *port_92;
|
||||||
pc_timer_t fast_off_timer;
|
pc_timer_t fast_off_timer;
|
||||||
|
usb_params_t usb_params;
|
||||||
} piix_t;
|
} piix_t;
|
||||||
|
|
||||||
#ifdef ENABLE_PIIX_LOG
|
#ifdef ENABLE_PIIX_LOG
|
||||||
@@ -1425,6 +1426,14 @@ piix_fast_off_count(void *priv)
|
|||||||
dev->regs[0][0xaa] |= 0x20;
|
dev->regs[0][0xaa] |= 0x20;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
piix_usb_raise_interrupt(usb_t* usb, void *priv)
|
||||||
|
{
|
||||||
|
piix_t *dev = (piix_t *) priv;
|
||||||
|
|
||||||
|
pci_set_irq(dev->pci_slot, PCI_INTD);
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
piix_reset(void *p)
|
piix_reset(void *p)
|
||||||
{
|
{
|
||||||
@@ -1569,8 +1578,12 @@ piix_init(const device_t *info)
|
|||||||
sff_set_irq_mode(dev->bm[1], 1, 2);
|
sff_set_irq_mode(dev->bm[1], 1, 2);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (dev->type >= 3)
|
if (dev->type >= 3) {
|
||||||
dev->usb = device_add(&usb_device);
|
dev->usb_params.parent_priv = dev;
|
||||||
|
dev->usb_params.smi_handle = NULL;
|
||||||
|
dev->usb_params.raise_interrupt = piix_usb_raise_interrupt;
|
||||||
|
dev->usb = device_add_parameters(&usb_device, &dev->usb_params);
|
||||||
|
}
|
||||||
|
|
||||||
if (dev->type > 3) {
|
if (dev->type > 3) {
|
||||||
dev->nvr = device_add(&piix4_nvr_device);
|
dev->nvr = device_add(&piix4_nvr_device);
|
||||||
|
@@ -65,7 +65,11 @@ typedef struct stpc_t {
|
|||||||
smram_t *smram;
|
smram_t *smram;
|
||||||
usb_t *usb;
|
usb_t *usb;
|
||||||
int ide_slot;
|
int ide_slot;
|
||||||
|
int usb_slot;
|
||||||
sff8038i_t *bm[2];
|
sff8038i_t *bm[2];
|
||||||
|
|
||||||
|
/* Miscellaneous */
|
||||||
|
usb_params_t usb_params;
|
||||||
} stpc_t;
|
} stpc_t;
|
||||||
|
|
||||||
typedef struct stpc_serial_t {
|
typedef struct stpc_serial_t {
|
||||||
@@ -870,6 +874,14 @@ stpc_setup(stpc_t *dev)
|
|||||||
pci_set_irq_routing(PCI_INTD, PCI_IRQ_DISABLED);
|
pci_set_irq_routing(PCI_INTD, PCI_IRQ_DISABLED);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
stpc_usb_raise_interrupt(usb_t* usb, void* priv)
|
||||||
|
{
|
||||||
|
stpc_t *dev = (stpc_t *) priv;
|
||||||
|
|
||||||
|
pci_set_irq(dev->usb_slot, PCI_INTA);
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
stpc_close(void *priv)
|
stpc_close(void *priv)
|
||||||
{
|
{
|
||||||
@@ -895,9 +907,13 @@ stpc_init(const device_t *info)
|
|||||||
pci_add_card(PCI_ADD_NORTHBRIDGE, stpc_nb_read, stpc_nb_write, dev);
|
pci_add_card(PCI_ADD_NORTHBRIDGE, stpc_nb_read, stpc_nb_write, dev);
|
||||||
dev->ide_slot = pci_add_card(PCI_ADD_SOUTHBRIDGE, stpc_isab_read, stpc_isab_write, dev);
|
dev->ide_slot = pci_add_card(PCI_ADD_SOUTHBRIDGE, stpc_isab_read, stpc_isab_write, dev);
|
||||||
if (dev->local == STPC_ATLAS) {
|
if (dev->local == STPC_ATLAS) {
|
||||||
|
dev->usb_params.smi_handle = NULL;
|
||||||
|
dev->usb_params.raise_interrupt = stpc_usb_raise_interrupt;
|
||||||
|
dev->usb_params.parent_priv = dev;
|
||||||
|
|
||||||
dev->ide_slot = pci_add_card(PCI_ADD_SOUTHBRIDGE, stpc_ide_read, stpc_ide_write, dev);
|
dev->ide_slot = pci_add_card(PCI_ADD_SOUTHBRIDGE, stpc_ide_read, stpc_ide_write, dev);
|
||||||
dev->usb = device_add(&usb_device);
|
dev->usb = device_add_parameters(&usb_device, &dev->usb_params);
|
||||||
pci_add_card(PCI_ADD_SOUTHBRIDGE, stpc_usb_read, stpc_usb_write, dev);
|
dev->usb_slot = pci_add_card(PCI_ADD_SOUTHBRIDGE, stpc_usb_read, stpc_usb_write, dev);
|
||||||
}
|
}
|
||||||
|
|
||||||
dev->bm[0] = device_add_inst(&sff8038i_device, 1);
|
dev->bm[0] = device_add_inst(&sff8038i_device, 1);
|
||||||
|
Reference in New Issue
Block a user