12.4. 异步事件
上一页 | 第 12 章 通用访问方法SCSI控制器 | 下一页

## 12.4. 异步事件

如果建立了异步事件回调，则应当定义回调函数。

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

- callback_arg - 注册回调时提供的值

- code - 标识事件类型

- path - 标识事件作用于其上的设备

- arg - 事件特定的参量

单一类型事件的实现，AC_LOST_DEVICE，看起来如下：

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; }

上一页 | 上一级 | 下一页
12.3. 轮询 | 起始页 | 12.5. 中断

本文档和其它文档可从这里下载： ftp://ftp.FreeBSD.org/pub/FreeBSD/doc/.

如果对于FreeBSD有问题，请先阅读 文档，如不能解决再联系 <questions@FreeBSD.org>.
关于本文档的问题请发信联系 <doc@FreeBSD.org>.