12.4. Asynchronous Events
Prev | Chapter 12. Common Access Method SCSI Controllers | Next

## 12.4. Asynchronous Events

If an asynchronous event callback has been set up then the callback function should be defined.

static void ahc_async(void *callback_arg, u_int32_t code, struct cam_path *path, void *arg)

- callback_arg - the value supplied when registering the callback

- code - identifies the type of event

- path - identifies the devices to which the event applies

- arg - event-specific argument

Implementation for a single type of event, AC_LOST_DEVICE, looks like:

struct xxx_softc *softc; struct cam_sim *sim; int targ; struct ccb_trans_settings neg; sim = (struct cam_sim *)callback_arg; softc = (struct xxx_softc *)cam_sim_softc(sim); switch (code) { case AC_LOST_DEVICE: targ = xpt_path_target_id(path); if(targ <= OUR_MAX_SUPPORTED_TARGET) { clean_negotiations(softc, targ); /* send indication to CAM */ neg.bus_width = 8; neg.sync_period = neg.sync_offset = 0; neg.valid = (CCB_TRANS_BUS_WIDTH_VALID | CCB_TRANS_SYNC_RATE_VALID | CCB_TRANS_SYNC_OFFSET_VALID); xpt_async(AC_TRANSFER_NEG, path, &neg); } break; default: break; }

Prev | Up | Next
12.3. Polling | Home | 12.5. Interrupts

All FreeBSD documents are available for download at http://ftp.FreeBSD.org/pub/FreeBSD/doc/

Questions that are not answered by the documentation may be sent to <freebsd-questions@FreeBSD.org>.
Send questions about this document to <freebsd-doc@FreeBSD.org>.