aboutsummaryrefslogtreecommitdiff
path: root/sys/dev/hpt27xx
diff options
context:
space:
mode:
authorXin LI <delphij@FreeBSD.org>2013-07-05 23:13:54 +0000
committerXin LI <delphij@FreeBSD.org>2013-07-05 23:13:54 +0000
commite587249b7fcb3ecd75ba37b8dfdb0a21e96ef06a (patch)
treeb0aee2f2ca7c02b9ffa17eff5621565a053c0dfa /sys/dev/hpt27xx
parentbba8d13ed99581fa26522dc7bdf07a39d68ed5b4 (diff)
Notes
Diffstat (limited to 'sys/dev/hpt27xx')
-rw-r--r--sys/dev/hpt27xx/hpt27xx_config.c2
-rw-r--r--sys/dev/hpt27xx/osm_bsd.c45
2 files changed, 14 insertions, 33 deletions
diff --git a/sys/dev/hpt27xx/hpt27xx_config.c b/sys/dev/hpt27xx/hpt27xx_config.c
index 5203f4a1ed92..c37862b85c60 100644
--- a/sys/dev/hpt27xx/hpt27xx_config.c
+++ b/sys/dev/hpt27xx/hpt27xx_config.c
@@ -60,7 +60,7 @@ int init_config(void)
const char driver_name[] = "hpt27xx";
const char driver_name_long[] = "RocketRAID 27xx controller driver";
-const char driver_ver[] = "v1.0";
+const char driver_ver[] = "v1.1";
int osm_max_targets = 0xff;
diff --git a/sys/dev/hpt27xx/osm_bsd.c b/sys/dev/hpt27xx/osm_bsd.c
index 59707caaae4d..636906d14377 100644
--- a/sys/dev/hpt27xx/osm_bsd.c
+++ b/sys/dev/hpt27xx/osm_bsd.c
@@ -944,7 +944,6 @@ static void hpt_stop_tasks(PVBUS_EXT vbus_ext)
static d_open_t hpt_open;
static d_close_t hpt_close;
static d_ioctl_t hpt_ioctl;
-static void hpt_bus_scan_cb(struct cam_periph *periph, union ccb *ccb);
static int hpt_rescan_bus(void);
static struct cdevsw hpt_cdevsw = {
@@ -974,7 +973,7 @@ static struct intr_config_hook hpt_ich;
*/
static void hpt_final_init(void *dummy)
{
- int i;
+ int i,unit_number=0;
PVBUS_EXT vbus_ext;
PVBUS vbus;
PHBA hba;
@@ -1058,12 +1057,12 @@ static void hpt_final_init(void *dummy)
#if __FreeBSD_version > 700025
vbus_ext->sim = cam_sim_alloc(hpt_action, hpt_poll, driver_name,
- vbus_ext, 0, &Giant, os_max_queue_comm, /*tagged*/8, devq);
+ vbus_ext, unit_number, &Giant, os_max_queue_comm, /*tagged*/8, devq);
#else
vbus_ext->sim = cam_sim_alloc(hpt_action, hpt_poll, driver_name,
- vbus_ext, 0, os_max_queue_comm, /*tagged*/8, devq);
+ vbus_ext, unit_number, os_max_queue_comm, /*tagged*/8, devq);
#endif
-
+ unit_number++;
if (!vbus_ext->sim) {
os_printk("cam_sim_alloc failed");
cam_simq_free(devq);
@@ -1337,44 +1336,26 @@ invalid:
static int hpt_rescan_bus(void)
{
- struct cam_path *path;
union ccb *ccb;
PVBUS vbus;
PVBUS_EXT vbus_ext;
-#if (__FreeBSD_version >= 500000)
mtx_lock(&Giant);
-#endif
ldm_for_each_vbus(vbus, vbus_ext) {
- if (xpt_create_path(&path, NULL, cam_sim_path(vbus_ext->sim),
+ if ((ccb = xpt_alloc_ccb()) == NULL)
+ {
+ return(ENOMEM);
+ }
+ if (xpt_create_path(&ccb->ccb_h.path, NULL, cam_sim_path(vbus_ext->sim),
CAM_TARGET_WILDCARD, CAM_LUN_WILDCARD) != CAM_REQ_CMP)
+ {
+ xpt_free_ccb(ccb);
return(EIO);
- if ((ccb = malloc(sizeof(union ccb), M_TEMP, M_WAITOK)) == NULL)
- return(ENOMEM);
- bzero(ccb, sizeof(union ccb));
- xpt_setup_ccb(&ccb->ccb_h, path, 5);
- ccb->ccb_h.func_code = XPT_SCAN_BUS;
- ccb->ccb_h.cbfcnp = hpt_bus_scan_cb;
- ccb->crcn.flags = CAM_FLAG_NONE;
- xpt_action(ccb);
+ }
+ xpt_rescan(ccb);
}
-
-#if (__FreeBSD_version >= 500000)
mtx_unlock(&Giant);
-#endif
-
return(0);
}
-static void hpt_bus_scan_cb(struct cam_periph *periph, union ccb *ccb)
-{
- if (ccb->ccb_h.status != CAM_REQ_CMP)
- KdPrint(("cam_scan_callback: failure status = %x",ccb->ccb_h.status));
- else
- KdPrint(("Scan bus successfully!"));
-
- xpt_free_path(ccb->ccb_h.path);
- free(ccb, M_TEMP);
- return;
-}