The poll function is used to simulate the interrupts when the interrupt subsystem is
not functioning (for example, when the system has crashed and is creating the system
dump). The CAM subsystem sets the proper interrupt level before calling the poll routine.
So all it needs to do is to call the interrupt routine (or the other way around, the poll
routine may be doing the real action and the interrupt routine would just call the poll
routine). Why bother about a separate function then? Because of different calling
conventions. The xxx_poll
routine gets the struct cam_sim
pointer as its argument when the PCI interrupt routine by common convention gets pointer
to the struct xxx_softc
and the ISA interrupt routine
gets just the device unit number. So the poll routine would normally look as:
static void xxx_poll(struct cam_sim *sim) { xxx_intr((struct xxx_softc *)cam_sim_softc(sim)); /* for PCI device */ }
or
static void xxx_poll(struct cam_sim *sim) { xxx_intr(cam_sim_unit(sim)); /* for ISA device */ }