1/*- 2 * FreeBSD/CAM specific routines for LSI '909 FC adapters. 3 * FreeBSD Version. 4 * 5 * Copyright (c) 2000, 2001 by Greg Ansley 6 * 7 * Redistribution and use in source and binary forms, with or without 8 * modification, are permitted provided that the following conditions --- 80 unchanged lines hidden (view full) --- 89 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 90 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 91 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 92 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 93 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF THE COPYRIGHT 94 * OWNER OR CONTRIBUTOR IS ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 95 */ 96#include <sys/cdefs.h> |
97__FBSDID("$FreeBSD: head/sys/dev/mpt/mpt_cam.c 168752 2007-04-15 08:49:19Z scottl $"); |
98 99#include <dev/mpt/mpt.h> 100#include <dev/mpt/mpt_cam.h> 101#include <dev/mpt/mpt_raid.h> 102 103#include "dev/mpt/mpilib/mpi_ioc.h" /* XXX Fix Event Handling!!! */ 104#include "dev/mpt/mpilib/mpi_init.h" 105#include "dev/mpt/mpilib/mpi_targ.h" --- 200 unchanged lines hidden (view full) --- 306 error = ENOMEM; 307 goto cleanup; 308 } 309 310 /* 311 * Construct our SIM entry. 312 */ 313 mpt->sim = cam_sim_alloc(mpt_action, mpt_poll, "mpt", mpt, |
314 mpt->unit, &Giant, 1, maxq, devq); |
315 if (mpt->sim == NULL) { 316 mpt_prt(mpt, "Unable to allocate CAM SIM!\n"); 317 cam_simq_free(devq); 318 error = ENOMEM; 319 goto cleanup; 320 } 321 322 /* --- 20 unchanged lines hidden (view full) --- 343 CAMLOCK_2_MPTLOCK(mpt); 344 return (0); 345 } 346 347 /* 348 * Create a "bus" to export all hidden disks to CAM. 349 */ 350 mpt->phydisk_sim = cam_sim_alloc(mpt_action, mpt_poll, "mpt", mpt, |
351 mpt->unit, &Giant, 1, maxq, devq); |
352 if (mpt->phydisk_sim == NULL) { 353 mpt_prt(mpt, "Unable to allocate Physical Disk CAM SIM!\n"); 354 error = ENOMEM; 355 goto cleanup; 356 } 357 358 /* 359 * Register this bus. --- 1722 unchanged lines hidden (view full) --- 2082 xpt_async(AC_BUS_RESET, mpt->path, NULL); 2083 break; 2084 2085 case MPI_EVENT_RESCAN: 2086#if __FreeBSD_version >= 600000 2087 { 2088 union ccb *ccb; 2089 uint32_t pathid; |
2090 struct cam_sim *sim; |
2091 /* 2092 * In general this means a device has been added to the loop. 2093 */ 2094 mpt_prt(mpt, "Rescan Port: %d\n", (data0 >> 8) & 0xff); 2095 if (mpt->ready == 0) { 2096 break; 2097 } 2098 if (mpt->phydisk_sim) { |
2099 sim = mpt->phydisk_sim; |
2100 } else { |
2101 sim = mpt->sim; |
2102 } |
2103 pathid = cam_sim_path(sim); |
2104 MPTLOCK_2_CAMLOCK(mpt); 2105 /* 2106 * Allocate a CCB, create a wildcard path for this bus, 2107 * and schedule a rescan. 2108 */ |
2109 ccb = xpt_alloc_ccb_nowait(sim); |
2110 if (ccb == NULL) { 2111 mpt_prt(mpt, "unable to alloc CCB for rescan\n"); 2112 CAMLOCK_2_MPTLOCK(mpt); 2113 break; 2114 } 2115 2116 if (xpt_create_path(&ccb->ccb_h.path, xpt_periph, pathid, 2117 CAM_TARGET_WILDCARD, CAM_LUN_WILDCARD) != CAM_REQ_CMP) { --- 3117 unchanged lines hidden --- |