advansys.c (45846) | advansys.c (46581) |
---|---|
1/* 2 * Generic driver for the Advanced Systems Inc. SCSI controllers 3 * Product specific probe and attach routines can be found in: 4 * 5 * i386/isa/adv_isa.c ABP5140, ABP542, ABP5150, ABP842, ABP852 6 * i386/eisa/adv_eisa.c ABP742, ABP752 7 * pci/adv_pci.c ABP920, ABP930, ABP930U, ABP930UA, ABP940, ABP940U, 8 * ABP940UA, ABP950, ABP960, ABP960U, ABP960UA, --- 18 unchanged lines hidden (view full) --- 27 * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 28 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 29 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 30 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 31 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 32 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 33 * SUCH DAMAGE. 34 * | 1/* 2 * Generic driver for the Advanced Systems Inc. SCSI controllers 3 * Product specific probe and attach routines can be found in: 4 * 5 * i386/isa/adv_isa.c ABP5140, ABP542, ABP5150, ABP842, ABP852 6 * i386/eisa/adv_eisa.c ABP742, ABP752 7 * pci/adv_pci.c ABP920, ABP930, ABP930U, ABP930UA, ABP940, ABP940U, 8 * ABP940UA, ABP950, ABP960, ABP960U, ABP960UA, --- 18 unchanged lines hidden (view full) --- 27 * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 28 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 29 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 30 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 31 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 32 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 33 * SUCH DAMAGE. 34 * |
35 * $Id: advansys.c,v 1.8 1999/04/07 22:59:12 gibbs Exp $ | 35 * $Id: advansys.c,v 1.9 1999/04/19 21:27:35 gibbs Exp $ |
36 */ 37/* 38 * Ported from: 39 * advansys.c - Linux Host Driver for AdvanSys SCSI Adapters 40 * 41 * Copyright (c) 1995-1997 Advanced System Products, Inc. 42 * All Rights Reserved. 43 * --- 188 unchanged lines hidden (view full) --- 232 /* XXX Implement */ 233 ccb->ccb_h.status = CAM_REQ_INVALID; 234 xpt_done(ccb); 235 break; 236 case XPT_SET_TRAN_SETTINGS: 237 { 238 struct ccb_trans_settings *cts; 239 target_bit_vector targ_mask; | 36 */ 37/* 38 * Ported from: 39 * advansys.c - Linux Host Driver for AdvanSys SCSI Adapters 40 * 41 * Copyright (c) 1995-1997 Advanced System Products, Inc. 42 * All Rights Reserved. 43 * --- 188 unchanged lines hidden (view full) --- 232 /* XXX Implement */ 233 ccb->ccb_h.status = CAM_REQ_INVALID; 234 xpt_done(ccb); 235 break; 236 case XPT_SET_TRAN_SETTINGS: 237 { 238 struct ccb_trans_settings *cts; 239 target_bit_vector targ_mask; |
240 struct adv_target_transinfo *tconf; | 240 struct adv_transinfo *tconf; |
241 u_int update_type; 242 int s; 243 244 cts = &ccb->cts; 245 targ_mask = ADV_TID_TO_TARGET_MASK(cts->ccb_h.target_id); | 241 u_int update_type; 242 int s; 243 244 cts = &ccb->cts; 245 targ_mask = ADV_TID_TO_TARGET_MASK(cts->ccb_h.target_id); |
246 tconf = &adv->tinfo[cts->ccb_h.target_id]; | |
247 update_type = 0; | 246 update_type = 0; |
248 if ((cts->flags & CCB_TRANS_CURRENT_SETTINGS) != 0) | 247 248 /* 249 * The user must specify which type of settings he wishes 250 * to change. 251 */ 252 if (((cts->flags & CCB_TRANS_CURRENT_SETTINGS) != 0) 253 && ((cts->flags & CCB_TRANS_USER_SETTINGS) == 0)) { 254 tconf = &adv->tinfo[cts->ccb_h.target_id].current; |
249 update_type |= ADV_TRANS_GOAL; | 255 update_type |= ADV_TRANS_GOAL; |
250 if ((cts->flags & CCB_TRANS_USER_SETTINGS) != 0) | 256 } else if (((cts->flags & CCB_TRANS_USER_SETTINGS) != 0) 257 && ((cts->flags & CCB_TRANS_CURRENT_SETTINGS) == 0)) { 258 tconf = &adv->tinfo[cts->ccb_h.target_id].user; |
251 update_type |= ADV_TRANS_USER; | 259 update_type |= ADV_TRANS_USER; |
260 } else { 261 ccb->ccb_h.status = CAM_REQ_INVALID; 262 break; 263 } |
|
252 253 s = splcam(); 254 255 if ((update_type & ADV_TRANS_GOAL) != 0) { 256 if ((cts->valid & CCB_TRANS_DISC_VALID) != 0) { 257 if ((cts->flags & CCB_TRANS_DISC_ENB) != 0) 258 adv->disc_enable |= targ_mask; 259 else --- 21 unchanged lines hidden (view full) --- 281 if ((cts->valid & CCB_TRANS_TQ_VALID) != 0) { 282 if ((cts->flags & CCB_TRANS_TAG_ENB) != 0) 283 adv->user_cmd_qng_enabled |= targ_mask; 284 else 285 adv->user_cmd_qng_enabled &= ~targ_mask; 286 } 287 } 288 | 264 265 s = splcam(); 266 267 if ((update_type & ADV_TRANS_GOAL) != 0) { 268 if ((cts->valid & CCB_TRANS_DISC_VALID) != 0) { 269 if ((cts->flags & CCB_TRANS_DISC_ENB) != 0) 270 adv->disc_enable |= targ_mask; 271 else --- 21 unchanged lines hidden (view full) --- 293 if ((cts->valid & CCB_TRANS_TQ_VALID) != 0) { 294 if ((cts->flags & CCB_TRANS_TAG_ENB) != 0) 295 adv->user_cmd_qng_enabled |= targ_mask; 296 else 297 adv->user_cmd_qng_enabled &= ~targ_mask; 298 } 299 } 300 |
289 if ((cts->valid & CCB_TRANS_SYNC_RATE_VALID) != 0) { | 301 /* 302 * If the user specifies either the sync rate, or offset, 303 * but not both, the unspecified parameter defaults to its 304 * current value in transfer negotiations. 305 */ 306 if (((cts->valid & CCB_TRANS_SYNC_RATE_VALID) != 0) 307 || ((cts->valid & CCB_TRANS_SYNC_OFFSET_VALID) != 0)) { 308 /* 309 * If the user provided a sync rate but no offset, 310 * use the current offset. 311 */ |
290 if ((cts->valid & CCB_TRANS_SYNC_OFFSET_VALID) == 0) | 312 if ((cts->valid & CCB_TRANS_SYNC_OFFSET_VALID) == 0) |
291 cts->sync_offset = 0; | 313 cts->sync_offset = tconf->offset; |
292 | 314 |
315 /* 316 * If the user provided an offset but no sync rate, 317 * use the current sync rate. 318 */ 319 if ((cts->valid & CCB_TRANS_SYNC_RATE_VALID) == 0) 320 cts->sync_period = tconf->period; 321 |
|
293 adv_period_offset_to_sdtr(adv, &cts->sync_period, 294 &cts->sync_offset, 295 cts->ccb_h.target_id); 296 297 adv_set_syncrate(adv, /*struct cam_path */NULL, 298 cts->ccb_h.target_id, cts->sync_period, 299 cts->sync_offset, update_type); 300 } | 322 adv_period_offset_to_sdtr(adv, &cts->sync_period, 323 &cts->sync_offset, 324 cts->ccb_h.target_id); 325 326 adv_set_syncrate(adv, /*struct cam_path */NULL, 327 cts->ccb_h.target_id, cts->sync_period, 328 cts->sync_offset, update_type); 329 } |
330 |
|
301 splx(s); 302 ccb->ccb_h.status = CAM_REQ_CMP; 303 xpt_done(ccb); 304 break; 305 } 306 case XPT_GET_TRAN_SETTINGS: 307 /* Get default/user set transfer settings for the target */ 308 { --- 88 unchanged lines hidden (view full) --- 397 cpi->hba_inquiry = PI_SDTR_ABLE|PI_TAG_ABLE; 398 cpi->target_sprt = 0; 399 cpi->hba_misc = 0; 400 cpi->hba_eng_cnt = 0; 401 cpi->max_target = 7; 402 cpi->max_lun = 7; 403 cpi->initiator_id = adv->scsi_id; 404 cpi->bus_id = cam_sim_bus(sim); | 331 splx(s); 332 ccb->ccb_h.status = CAM_REQ_CMP; 333 xpt_done(ccb); 334 break; 335 } 336 case XPT_GET_TRAN_SETTINGS: 337 /* Get default/user set transfer settings for the target */ 338 { --- 88 unchanged lines hidden (view full) --- 427 cpi->hba_inquiry = PI_SDTR_ABLE|PI_TAG_ABLE; 428 cpi->target_sprt = 0; 429 cpi->hba_misc = 0; 430 cpi->hba_eng_cnt = 0; 431 cpi->max_target = 7; 432 cpi->max_lun = 7; 433 cpi->initiator_id = adv->scsi_id; 434 cpi->bus_id = cam_sim_bus(sim); |
435 cpi->base_transfer_speed = 3300; |
|
405 strncpy(cpi->sim_vid, "FreeBSD", SIM_IDLEN); 406 strncpy(cpi->hba_vid, "Advansys", HBA_IDLEN); 407 strncpy(cpi->dev_name, cam_sim_name(sim), DEV_IDLEN); 408 cpi->unit_number = cam_sim_unit(sim); 409 cpi->ccb_h.status = CAM_REQ_CMP; 410 xpt_done(ccb); 411 break; 412 } --- 908 unchanged lines hidden --- | 436 strncpy(cpi->sim_vid, "FreeBSD", SIM_IDLEN); 437 strncpy(cpi->hba_vid, "Advansys", HBA_IDLEN); 438 strncpy(cpi->dev_name, cam_sim_name(sim), DEV_IDLEN); 439 cpi->unit_number = cam_sim_unit(sim); 440 cpi->ccb_h.status = CAM_REQ_CMP; 441 xpt_done(ccb); 442 break; 443 } --- 908 unchanged lines hidden --- |