mirror of
https://github.com/opnsense/src.git
synced 2026-06-09 08:43:19 -04:00
Let drivers specify interrupt flags (INTR_EXCL and/or INTR_FAST)
using the new pci_map_int_right() variant of pci_map_int(). Fast interrupts work for PCI devices if and only if they are exclusive. (The PCI interrupt mux doesn't support fast interrupts and can't support a mixture of fast and slow interrupts even in principle.) Don't assume that intrmask_t == unsigned in pci_map_int().
This commit is contained in:
parent
38ffc07d37
commit
92e81ca475
3 changed files with 22 additions and 9 deletions
|
|
@ -23,7 +23,7 @@
|
|||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
|
||||
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
* $Id: pcivar.h,v 1.22 1998/10/06 14:18:40 dfr Exp $
|
||||
* $Id: pcivar.h,v 1.23 1998/12/14 05:47:29 dillon Exp $
|
||||
*
|
||||
*/
|
||||
|
||||
|
|
@ -223,7 +223,10 @@ int pci_map_port (pcici_t tag, u_long reg, pci_port_t* pa);
|
|||
int pci_map_mem (pcici_t tag, u_long reg, vm_offset_t* va, vm_offset_t* pa);
|
||||
int pci_map_dense (pcici_t tag, u_long reg, vm_offset_t* va, vm_offset_t* pa);
|
||||
int pci_map_bwx (pcici_t tag, u_long reg, vm_offset_t* va, vm_offset_t* pa);
|
||||
int pci_map_int (pcici_t tag, pci_inthand_t *func, void *arg, unsigned *maskptr);
|
||||
int pci_map_int (pcici_t tag, pci_inthand_t *handler, void *arg,
|
||||
intrmask_t *maskptr);
|
||||
int pci_map_int_right(pcici_t cfg, pci_inthand_t *handler, void *arg,
|
||||
intrmask_t *maskptr, u_int flags);
|
||||
int pci_unmap_int (pcici_t tag);
|
||||
int pci_register_lkm (struct pci_device *dvp, int if_revision);
|
||||
|
||||
|
|
|
|||
|
|
@ -23,7 +23,7 @@
|
|||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
|
||||
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
* $Id: pci_compat.c,v 1.16 1998/12/09 01:27:29 eivind Exp $
|
||||
* $Id: pci_compat.c,v 1.17 1998/12/14 05:47:28 dillon Exp $
|
||||
*
|
||||
*/
|
||||
|
||||
|
|
@ -209,9 +209,15 @@ pci_map_bwx(pcici_t cfg, u_long reg, vm_offset_t* va, vm_offset_t* pa)
|
|||
return (0);
|
||||
}
|
||||
|
||||
int
|
||||
pci_map_int(pcici_t cfg, pci_inthand_t *handler, void *arg, intrmask_t *maskptr)
|
||||
{
|
||||
return (pci_map_int_right(cfg, handler, arg, maskptr, 0));
|
||||
}
|
||||
|
||||
int
|
||||
pci_map_int(pcici_t cfg, pci_inthand_t *func, void *arg, unsigned *maskptr)
|
||||
pci_map_int_right(pcici_t cfg, pci_inthand_t *handler, void *arg,
|
||||
intrmask_t *maskptr, u_int flags)
|
||||
{
|
||||
int error;
|
||||
#ifdef APIC_IO
|
||||
|
|
@ -222,7 +228,8 @@ pci_map_int(pcici_t cfg, pci_inthand_t *func, void *arg, unsigned *maskptr)
|
|||
void *dev_instance = (void *)-1; /* XXX use cfg->devdata */
|
||||
void *idesc;
|
||||
|
||||
idesc = intr_create(dev_instance, irq, func, arg, maskptr, 0);
|
||||
idesc = intr_create(dev_instance, irq, handler, arg, maskptr,
|
||||
flags);
|
||||
error = intr_connect(idesc);
|
||||
if (error != 0)
|
||||
return 0;
|
||||
|
|
@ -255,8 +262,8 @@ pci_map_int(pcici_t cfg, pci_inthand_t *func, void *arg, unsigned *maskptr)
|
|||
|
||||
nextpin = next_apic_irq(irq);
|
||||
while (nextpin >= 0) {
|
||||
idesc = intr_create(dev_instance, nextpin, func, arg,
|
||||
maskptr, 0);
|
||||
idesc = intr_create(dev_instance, nextpin, handler,
|
||||
arg, maskptr, flags);
|
||||
error = intr_connect(idesc);
|
||||
if (error != 0)
|
||||
return 0;
|
||||
|
|
|
|||
|
|
@ -23,7 +23,7 @@
|
|||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
|
||||
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
* $Id: pcivar.h,v 1.22 1998/10/06 14:18:40 dfr Exp $
|
||||
* $Id: pcivar.h,v 1.23 1998/12/14 05:47:29 dillon Exp $
|
||||
*
|
||||
*/
|
||||
|
||||
|
|
@ -223,7 +223,10 @@ int pci_map_port (pcici_t tag, u_long reg, pci_port_t* pa);
|
|||
int pci_map_mem (pcici_t tag, u_long reg, vm_offset_t* va, vm_offset_t* pa);
|
||||
int pci_map_dense (pcici_t tag, u_long reg, vm_offset_t* va, vm_offset_t* pa);
|
||||
int pci_map_bwx (pcici_t tag, u_long reg, vm_offset_t* va, vm_offset_t* pa);
|
||||
int pci_map_int (pcici_t tag, pci_inthand_t *func, void *arg, unsigned *maskptr);
|
||||
int pci_map_int (pcici_t tag, pci_inthand_t *handler, void *arg,
|
||||
intrmask_t *maskptr);
|
||||
int pci_map_int_right(pcici_t cfg, pci_inthand_t *handler, void *arg,
|
||||
intrmask_t *maskptr, u_int flags);
|
||||
int pci_unmap_int (pcici_t tag);
|
||||
int pci_register_lkm (struct pci_device *dvp, int if_revision);
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue