freebsd-skq/sys/pccard/driver.h
Nate Williams cc6da87199 Update the PCIC controller's imask with individual slot IRQ's.
Assuming that the intr_mask[] was updated by changing the maskptrs (the
existing update_intr_masks() function will not work) this code was
written so the PCIC controller insertion/removal events will not
interrupt the card IRQ handler events.

Some possible scenarios:
+ Card is removed during IRQ handler:

  - PCIC card handler is allowed to interrupt
  - card removal event is called, removing the driver and data structures
  * card interrupt handler continues w/out driver, data structures, and hardware

OR (the code just committed)

  * card IRQ handler has no hardware to read/write to, but has code and
    data to run on (XXX- Assume it completes and doesn't spin forever)
  - PCIC card handler unloads the card driver

The current situation at least leaves the card interrupt handlers the
drivers and data structures to work with although the hardware can't be
guaranteed.

Reviewed by:	bde
1997-01-11 18:23:20 +00:00

23 lines
627 B
C

/*-
* pccard driver interface.
* Bruce Evans, November 1995.
* This file is in the public domain.
*/
#ifndef _PCCARD_DRIVER_H_
#define _PCCARD_DRIVER_H_
struct lkm_table;
struct pccard_drv;
void pccard_add_driver __P((struct pccard_drv *));
#ifdef _I386_ISA_ISA_DEVICE_H_ /* XXX actually if inthand2_t is declared */
int pccard_alloc_intr __P((u_int imask, inthand2_t *hand, int unit,
u_int *maskp, u_int *pcic_imask));
#endif
void pccard_configure __P((void));
void pccard_remove_driver __P((struct pccard_drv *dp));
int pcic_probe __P((void)); /* XXX should be linker set */
#endif /* !_PCCARD_DRIVER_H_ */