Lines 1649-1663
pci_mask_msix(device_t dev, u_int index)
Link Here
|
1649 |
{ |
1649 |
{ |
1650 |
struct pci_devinfo *dinfo = device_get_ivars(dev); |
1650 |
struct pci_devinfo *dinfo = device_get_ivars(dev); |
1651 |
struct pcicfg_msix *msix = &dinfo->cfg.msix; |
1651 |
struct pcicfg_msix *msix = &dinfo->cfg.msix; |
1652 |
uint32_t offset, val; |
1652 |
uint32_t offset; |
1653 |
|
1653 |
|
1654 |
KASSERT(msix->msix_msgnum > index, ("bogus index")); |
1654 |
KASSERT(msix->msix_msgnum > index, ("bogus index")); |
1655 |
offset = msix->msix_table_offset + index * 16 + 12; |
1655 |
offset = msix->msix_table_offset + index * 16 + 12; |
1656 |
val = bus_read_4(msix->msix_table_res, offset); |
1656 |
bus_write_4(msix->msix_table_res, offset, PCIM_MSIX_VCTRL_MASK); |
1657 |
if (!(val & PCIM_MSIX_VCTRL_MASK)) { |
|
|
1658 |
val |= PCIM_MSIX_VCTRL_MASK; |
1659 |
bus_write_4(msix->msix_table_res, offset, val); |
1660 |
} |
1661 |
} |
1657 |
} |
1662 |
|
1658 |
|
1663 |
void |
1659 |
void |
Lines 1665-1679
pci_unmask_msix(device_t dev, u_int index)
Link Here
|
1665 |
{ |
1661 |
{ |
1666 |
struct pci_devinfo *dinfo = device_get_ivars(dev); |
1662 |
struct pci_devinfo *dinfo = device_get_ivars(dev); |
1667 |
struct pcicfg_msix *msix = &dinfo->cfg.msix; |
1663 |
struct pcicfg_msix *msix = &dinfo->cfg.msix; |
1668 |
uint32_t offset, val; |
1664 |
uint32_t offset; |
1669 |
|
1665 |
|
1670 |
KASSERT(msix->msix_table_len > index, ("bogus index")); |
1666 |
KASSERT(msix->msix_table_len > index, ("bogus index")); |
1671 |
offset = msix->msix_table_offset + index * 16 + 12; |
1667 |
offset = msix->msix_table_offset + index * 16 + 12; |
1672 |
val = bus_read_4(msix->msix_table_res, offset); |
1668 |
bus_write_4(msix->msix_table_res, offset, 0); |
1673 |
if (val & PCIM_MSIX_VCTRL_MASK) { |
|
|
1674 |
val &= ~PCIM_MSIX_VCTRL_MASK; |
1675 |
bus_write_4(msix->msix_table_res, offset, val); |
1676 |
} |
1677 |
} |
1669 |
} |
1678 |
|
1670 |
|
1679 |
int |
1671 |
int |