1 /* 2 * CDDL HEADER START 3 * 4 * The contents of this file are subject to the terms of the 5 * Common Development and Distribution License (the "License"). 6 * You may not use this file except in compliance with the License. 7 * 8 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 9 * or http://www.opensolaris.org/os/licensing. 10 * See the License for the specific language governing permissions 11 * and limitations under the License. 12 * 13 * When distributing Covered Code, include this CDDL HEADER in each 14 * file and include the License file at usr/src/OPENSOLARIS.LICENSE. 15 * If applicable, add the following below this CDDL HEADER, with the 16 * fields enclosed by brackets "[]" replaced with your own identifying 17 * information: Portions Copyright [yyyy] [name of copyright owner] 18 * 19 * CDDL HEADER END 20 */ 21 22 /* 23 * Copyright 2009 Sun Microsystems, Inc. All rights reserved. 24 * Use is subject to license terms. 25 */ 26 27 #include <sys/types.h> 28 #include <sys/modctl.h> 29 #include <sys/debug.h> 30 #include <sys/promif.h> 31 #include <sys/pci.h> 32 #include <sys/errno.h> 33 #include <sys/open.h> 34 #include <sys/uio.h> 35 #include <sys/cred.h> 36 #include <sys/cpu.h> 37 #include "ata_common.h" 38 #include "ata_disk.h" 39 #include "atapi.h" 40 #include "ata_blacklist.h" 41 #include "sil3xxx.h" 42 43 /* 44 * Solaris Entry Points. 45 */ 46 47 static int ata_attach(dev_info_t *dip, ddi_attach_cmd_t cmd); 48 static int ata_detach(dev_info_t *dip, ddi_detach_cmd_t cmd); 49 static int ata_bus_ctl(dev_info_t *d, dev_info_t *r, ddi_ctl_enum_t o, 50 void *a, void *v); 51 static uint_t ata_intr(caddr_t arg); 52 53 /* 54 * GHD Entry points 55 */ 56 57 static int ata_get_status(void *hba_handle, void *intr_status); 58 static void ata_process_intr(void *hba_handle, void *intr_status); 59 static int ata_hba_start(void *handle, gcmd_t *gcmdp); 60 static void ata_hba_complete(void *handle, gcmd_t *gcmdp, int do_callback); 61 static int ata_timeout_func(void *hba_handle, gcmd_t *gcmdp, 62 gtgt_t *gtgtp, gact_t action, int calltype); 63 64 /* 65 * Local Function Prototypes 66 */ 67 static int ata_prop_lookup_int(dev_t match_dev, dev_info_t *dip, 68 uint_t flags, char *name, int defvalue); 69 static int ata_ctlr_fsm(uchar_t fsm_func, ata_ctl_t *ata_ctlp, 70 ata_drv_t *ata_drvp, ata_pkt_t *ata_pktp, 71 int *DoneFlgp); 72 static void ata_destroy_controller(dev_info_t *dip); 73 static int ata_drive_type(uchar_t drvhd, 74 ddi_acc_handle_t io_hdl1, caddr_t ioaddr1, 75 ddi_acc_handle_t io_hdl2, caddr_t ioaddr2, 76 struct ata_id *ata_id_bufp); 77 static ata_ctl_t *ata_init_controller(dev_info_t *dip); 78 static ata_drv_t *ata_init_drive(ata_ctl_t *ata_ctlp, 79 uchar_t targ, uchar_t lun); 80 static int ata_init_drive_pcidma(ata_ctl_t *ata_ctlp, ata_drv_t *ata_drvp, 81 dev_info_t *tdip); 82 static int ata_flush_cache(ata_ctl_t *ata_ctlp, ata_drv_t *ata_drvp); 83 static void ata_init_pciide(dev_info_t *dip, ata_ctl_t *ata_ctlp); 84 static int ata_reset_bus(ata_ctl_t *ata_ctlp); 85 static int ata_setup_ioaddr(dev_info_t *dip, 86 ddi_acc_handle_t *iohandle1, caddr_t *ioaddr1p, 87 ddi_acc_handle_t *iohandle2, caddr_t *ioaddr2p, 88 ddi_acc_handle_t *bm_hdlp, caddr_t *bm_addrp); 89 static int ata_software_reset(ata_ctl_t *ata_ctlp); 90 static int ata_start_arq(ata_ctl_t *ata_ctlp, ata_drv_t *ata_drvp, 91 ata_pkt_t *ata_pktp); 92 static int ata_strncmp(char *p1, char *p2, int cnt); 93 static void ata_uninit_drive(ata_drv_t *ata_drvp); 94 95 static int ata_check_pciide_blacklist(dev_info_t *dip, uint_t flags); 96 static int ata_check_revert_to_defaults(ata_drv_t *ata_drvp); 97 static void ata_show_transfer_mode(ata_ctl_t *, ata_drv_t *); 98 static int ata_spec_init_controller(dev_info_t *dip); 99 100 static void ata_init_pm(dev_info_t *); 101 static int ata_suspend(dev_info_t *); 102 static int ata_resume(dev_info_t *); 103 static int ata_power(dev_info_t *, int, int); 104 static int ata_change_power(dev_info_t *, uint8_t); 105 static int ata_is_pci(dev_info_t *); 106 static void ata_disable_DMA(ata_drv_t *ata_drvp); 107 static int ata_check_dma_mode(ata_drv_t *ata_drvp); 108 109 /* 110 * Local static data 111 */ 112 static void *ata_state; 113 114 static tmr_t ata_timer_conf; /* single timeout list for all instances */ 115 static int ata_watchdog_usec = 100000; /* check timeouts every 100 ms */ 116 117 int ata_hba_start_watchdog = 1000; 118 int ata_process_intr_watchdog = 1000; 119 int ata_reset_bus_watchdog = 1000; 120 121 122 /* 123 * Use local or framework power management 124 */ 125 126 #ifdef ATA_USE_AUTOPM 127 #define ATA_BUSY_COMPONENT(d, c) ((void)pm_busy_component(d, c)) 128 #define ATA_IDLE_COMPONENT(d, c) ((void)pm_idle_component(d, c)) 129 #define ATA_RAISE_POWER(d, c, l) pm_raise_power(d, c, l) 130 #define ATA_LOWER_POWER(d, c, l) pm_lower_power(d, c, l) 131 #else 132 #define ATA_BUSY_COMPONENT(d, c) 133 #define ATA_IDLE_COMPONENT(d, c) 134 #define ATA_RAISE_POWER(d, c, l) ata_power(d, c, l) 135 #define ATA_LOWER_POWER(d, c, l) ata_power(d, c, l) 136 #endif 137 /* 138 * number of seconds to wait during various operations 139 */ 140 int ata_flush_delay = 5 * 1000000; 141 uint_t ata_set_feature_wait = 4 * 1000000; 142 uint_t ata_flush_cache_wait = 60 * 1000000; /* may take a long time */ 143 144 /* 145 * Change this for SFF-8070i support. Currently SFF-8070i is 146 * using a field in the IDENTIFY PACKET DEVICE response which 147 * already seems to be in use by some vendor's drives. I suspect 148 * SFF will either move their laslun field or provide a reliable 149 * way to validate it. 150 */ 151 int ata_enable_atapi_luns = FALSE; 152 153 /* 154 * set this to disable all DMA requests 155 */ 156 int ata_dma_disabled = FALSE; 157 158 /* 159 * set this to TRUE to enable storing the IDENTIFY DEVICE result in the 160 * "ata" or "atapi" property. 161 */ 162 int ata_id_debug = FALSE; 163 164 /* 165 * set this to TRUE to enable logging device-capability data 166 */ 167 int ata_capability_data = FALSE; 168 169 /* 170 * DMA selection message pointers 171 */ 172 char *ata_cntrl_DMA_sel_msg; 173 char *ata_dev_DMA_sel_msg; 174 175 /* 176 * bus nexus operations 177 */ 178 static struct bus_ops ata_bus_ops; 179 static struct bus_ops *scsa_bus_ops_p; 180 181 /* ARGSUSED */ 182 static int 183 ata_open(dev_t *devp, int flag, int otyp, cred_t *cred_p) 184 { 185 if (ddi_get_soft_state(ata_state, getminor(*devp)) == NULL) 186 return (ENXIO); 187 188 return (0); 189 } 190 191 /* 192 * The purpose of this function is to pass the ioaddress of the controller 193 * to the caller, specifically used for upgrade from pre-pciide 194 * to pciide nodes 195 */ 196 /* ARGSUSED */ 197 static int 198 ata_read(dev_t dev, struct uio *uio_p, cred_t *cred_p) 199 { 200 ata_ctl_t *ata_ctlp; 201 char buf[18]; 202 long len; 203 204 ata_ctlp = ddi_get_soft_state(ata_state, getminor(dev)); 205 206 if (ata_ctlp == NULL) 207 return (ENXIO); 208 209 (void) sprintf(buf, "%p\n", (void *) ata_ctlp->ac_ioaddr1); 210 211 len = strlen(buf) - uio_p->uio_offset; 212 len = min(uio_p->uio_resid, len); 213 if (len <= 0) 214 return (0); 215 216 return (uiomove((caddr_t)(buf + uio_p->uio_offset), len, 217 UIO_READ, uio_p)); 218 } 219 220 int 221 ata_devo_reset( 222 dev_info_t *dip, 223 ddi_reset_cmd_t cmd) 224 { 225 ata_ctl_t *ata_ctlp; 226 ata_drv_t *ata_drvp; 227 int instance; 228 int i; 229 int rc; 230 int flush_okay; 231 232 if (cmd != DDI_RESET_FORCE) 233 return (0); 234 235 instance = ddi_get_instance(dip); 236 ata_ctlp = ddi_get_soft_state(ata_state, instance); 237 238 if (!ata_ctlp) 239 return (0); 240 241 /* 242 * reset ATA drives and flush the write cache of any drives 243 */ 244 flush_okay = TRUE; 245 for (i = 0; i < ATA_MAXTARG; i++) { 246 if ((ata_drvp = CTL2DRV(ata_ctlp, i, 0)) == 0) 247 continue; 248 /* Don't revert to defaults for certain IBM drives */ 249 if ((ata_drvp->ad_flags & AD_DISK) != 0 && 250 ((ata_drvp->ad_flags & AD_NORVRT) == 0)) { 251 /* Enable revert to defaults when reset */ 252 (void) ata_set_feature(ata_ctlp, ata_drvp, 253 ATSF_ENA_REVPOD, 0); 254 } 255 256 /* 257 * skip flush cache if device type is cdrom 258 * 259 * notes: the structure definitions for ata_drvp->ad_id are 260 * defined for the ATA IDENTIFY_DEVICE, but if AD_ATAPI is set 261 * the struct holds data for the ATAPI IDENTIFY_PACKET_DEVICE 262 */ 263 if (!IS_CDROM(ata_drvp)) { 264 265 /* 266 * Try the ATA/ATAPI flush write cache command 267 */ 268 rc = ata_flush_cache(ata_ctlp, ata_drvp); 269 ADBG_WARN(("ata_flush_cache %s\n", 270 rc ? "okay" : "failed")); 271 272 if (!rc) 273 flush_okay = FALSE; 274 } 275 276 277 /* 278 * do something else if flush cache not supported 279 */ 280 } 281 282 /* 283 * just busy wait if any drive doesn't support FLUSH CACHE 284 */ 285 if (!flush_okay) 286 drv_usecwait(ata_flush_delay); 287 return (0); 288 } 289 290 /* 291 * quiesce(9E) entry point. 292 * 293 * This function is called when the system is single-threaded at high 294 * PIL with preemption disabled. Therefore, this function must not be 295 * blocked. 296 * 297 * This function returns DDI_SUCCESS on success, or DDI_FAILURE on failure. 298 * DDI_FAILURE indicates an error condition and should almost never happen. 299 */ 300 int 301 ata_quiesce(dev_info_t *dip) 302 { 303 #ifdef ATA_DEBUG 304 /* 305 * Turn off debugging 306 */ 307 ata_debug = 0; 308 #endif 309 310 return (ata_devo_reset(dip, DDI_RESET_FORCE)); 311 } 312 313 314 static struct cb_ops ata_cb_ops = { 315 ata_open, /* open */ 316 nulldev, /* close */ 317 nodev, /* strategy */ 318 nodev, /* print */ 319 nodev, /* dump */ 320 ata_read, /* read */ 321 nodev, /* write */ 322 nodev, /* ioctl */ 323 nodev, /* devmap */ 324 nodev, /* mmap */ 325 nodev, /* segmap */ 326 nochpoll, /* chpoll */ 327 ddi_prop_op, /* prop_op */ 328 NULL, /* stream info */ 329 D_MP, /* driver compatibility flag */ 330 CB_REV, /* cb_ops revision */ 331 nodev, /* aread */ 332 nodev /* awrite */ 333 }; 334 335 static struct dev_ops ata_ops = { 336 DEVO_REV, /* devo_rev, */ 337 0, /* refcnt */ 338 ddi_getinfo_1to1, /* info */ 339 nulldev, /* identify */ 340 NULL, /* probe */ 341 ata_attach, /* attach */ 342 ata_detach, /* detach */ 343 ata_devo_reset, /* reset */ 344 &ata_cb_ops, /* driver operations */ 345 NULL, /* bus operations */ 346 ata_power, /* power */ 347 ata_quiesce /* quiesce */ 348 }; 349 350 /* driver loadable module wrapper */ 351 static struct modldrv modldrv = { 352 &mod_driverops, /* Type of module. This one is a driver */ 353 "ATA AT-bus attachment disk controller Driver", /* module name */ 354 &ata_ops, /* driver ops */ 355 }; 356 357 static struct modlinkage modlinkage = { 358 MODREV_1, (void *)&modldrv, NULL 359 }; 360 361 #ifdef ATA_DEBUG 362 int ata_debug_init = FALSE; 363 int ata_debug_attach = FALSE; 364 365 int ata_debug = ADBG_FLAG_ERROR 366 /* | ADBG_FLAG_ARQ */ 367 /* | ADBG_FLAG_INIT */ 368 /* | ADBG_FLAG_TRACE */ 369 /* | ADBG_FLAG_TRANSPORT */ 370 /* | ADBG_FLAG_WARN */ 371 ; 372 #endif 373 374 int 375 _init(void) 376 { 377 int err; 378 379 #ifdef ATA_DEBUG 380 if (ata_debug_init) 381 debug_enter("\nATA _INIT\n"); 382 #endif 383 384 if ((err = ddi_soft_state_init(&ata_state, sizeof (ata_ctl_t), 0)) != 0) 385 return (err); 386 387 if ((err = scsi_hba_init(&modlinkage)) != 0) { 388 ddi_soft_state_fini(&ata_state); 389 return (err); 390 } 391 392 /* save pointer to SCSA provided bus_ops struct */ 393 scsa_bus_ops_p = ata_ops.devo_bus_ops; 394 395 /* make a copy of SCSA bus_ops */ 396 ata_bus_ops = *(ata_ops.devo_bus_ops); 397 398 /* 399 * Modify our bus_ops to call our routines. Our implementation 400 * will determine if the device is ATA or ATAPI/SCSA and react 401 * accordingly. 402 */ 403 ata_bus_ops.bus_ctl = ata_bus_ctl; 404 405 /* patch our bus_ops into the dev_ops struct */ 406 ata_ops.devo_bus_ops = &ata_bus_ops; 407 408 if ((err = mod_install(&modlinkage)) != 0) { 409 scsi_hba_fini(&modlinkage); 410 ddi_soft_state_fini(&ata_state); 411 } 412 413 /* 414 * Initialize the per driver timer info. 415 */ 416 417 ghd_timer_init(&ata_timer_conf, drv_usectohz(ata_watchdog_usec)); 418 419 return (err); 420 } 421 422 int 423 _fini(void) 424 { 425 int err; 426 427 if ((err = mod_remove(&modlinkage)) == 0) { 428 ghd_timer_fini(&ata_timer_conf); 429 scsi_hba_fini(&modlinkage); 430 ddi_soft_state_fini(&ata_state); 431 } 432 433 return (err); 434 } 435 436 int 437 _info(struct modinfo *modinfop) 438 { 439 return (mod_info(&modlinkage, modinfop)); 440 } 441 442 443 /* 444 * 445 * driver attach entry point 446 * 447 */ 448 449 static int 450 ata_attach( 451 dev_info_t *dip, 452 ddi_attach_cmd_t cmd) 453 { 454 ata_ctl_t *ata_ctlp; 455 ata_drv_t *ata_drvp; 456 ata_drv_t *first_drvp = NULL; 457 uchar_t targ; 458 uchar_t lun; 459 uchar_t lastlun; 460 int atapi_count = 0; 461 int disk_count = 0; 462 463 ADBG_TRACE(("ata_attach entered\n")); 464 #ifdef ATA_DEBUG 465 if (ata_debug_attach) 466 debug_enter("\nATA_ATTACH\n\n"); 467 #endif 468 469 switch (cmd) { 470 case DDI_ATTACH: 471 break; 472 case DDI_RESUME: 473 return (ata_resume(dip)); 474 default: 475 return (DDI_FAILURE); 476 } 477 478 /* initialize controller */ 479 ata_ctlp = ata_init_controller(dip); 480 481 if (ata_ctlp == NULL) 482 goto errout; 483 484 mutex_enter(&ata_ctlp->ac_ccc.ccc_hba_mutex); 485 486 /* initialize drives */ 487 488 for (targ = 0; targ < ATA_MAXTARG; targ++) { 489 490 ata_drvp = ata_init_drive(ata_ctlp, targ, 0); 491 if (ata_drvp == NULL) 492 continue; 493 494 if (first_drvp == NULL) 495 first_drvp = ata_drvp; 496 497 if (ATAPIDRV(ata_drvp)) { 498 atapi_count++; 499 lastlun = ata_drvp->ad_id.ai_lastlun; 500 } else { 501 disk_count++; 502 lastlun = 0; 503 } 504 505 /* 506 * LUN support is currently disabled. Check with SFF-8070i 507 * before enabling. 508 */ 509 if (!ata_enable_atapi_luns) 510 lastlun = 0; 511 512 /* Initialize higher LUNs, if there are any */ 513 for (lun = 1; lun <= lastlun && lun < ATA_MAXLUN; lun++) { 514 if ((ata_drvp = 515 ata_init_drive(ata_ctlp, targ, lun)) != NULL) { 516 ata_show_transfer_mode(ata_ctlp, ata_drvp); 517 } 518 } 519 } 520 521 if ((atapi_count == 0) && (disk_count == 0)) { 522 ADBG_WARN(("ata_attach: no drives detected\n")); 523 goto errout1; 524 } 525 526 /* 527 * Always make certain that a valid drive is selected so 528 * that routines which poll the status register don't get 529 * confused by non-existent drives. 530 */ 531 ddi_put8(ata_ctlp->ac_iohandle1, ata_ctlp->ac_drvhd, 532 first_drvp->ad_drive_bits); 533 ata_nsecwait(400); 534 535 /* 536 * make certain the drive selected 537 */ 538 if (!ata_wait(ata_ctlp->ac_iohandle2, ata_ctlp->ac_ioaddr2, 539 0, ATS_BSY, 5000000)) { 540 ADBG_ERROR(("ata_attach: select failed\n")); 541 } 542 543 /* 544 * initialize atapi/ata_dsk modules if we have at least 545 * one drive of that type. 546 */ 547 548 if (atapi_count) { 549 if (!atapi_attach(ata_ctlp)) 550 goto errout1; 551 ata_ctlp->ac_flags |= AC_ATAPI_INIT; 552 } 553 554 if (disk_count) { 555 if (!ata_disk_attach(ata_ctlp)) 556 goto errout1; 557 ata_ctlp->ac_flags |= AC_DISK_INIT; 558 } 559 560 /* 561 * make certain the interrupt and error latches are clear 562 */ 563 if (ata_ctlp->ac_pciide) { 564 565 int instance = ddi_get_instance(dip); 566 if (ddi_create_minor_node(dip, "control", S_IFCHR, instance, 567 DDI_PSEUDO, 0) != DDI_SUCCESS) { 568 goto errout1; 569 } 570 571 (void) ata_pciide_status_clear(ata_ctlp); 572 573 } 574 575 /* 576 * enable the interrupt handler and drop the mutex 577 */ 578 ata_ctlp->ac_flags |= AC_ATTACHED; 579 mutex_exit(&ata_ctlp->ac_ccc.ccc_hba_mutex); 580 581 ata_init_pm(dip); 582 583 ddi_report_dev(dip); 584 return (DDI_SUCCESS); 585 586 errout1: 587 mutex_exit(&ata_ctlp->ac_ccc.ccc_hba_mutex); 588 errout: 589 (void) ata_detach(dip, DDI_DETACH); 590 return (DDI_FAILURE); 591 } 592 593 /* driver detach entry point */ 594 595 static int 596 ata_detach( 597 dev_info_t *dip, 598 ddi_detach_cmd_t cmd) 599 { 600 ata_ctl_t *ata_ctlp; 601 ata_drv_t *ata_drvp; 602 int instance; 603 int i; 604 int j; 605 606 ADBG_TRACE(("ata_detach entered\n")); 607 608 switch (cmd) { 609 case DDI_DETACH: 610 break; 611 case DDI_SUSPEND: 612 return (ata_suspend(dip)); 613 default: 614 return (DDI_FAILURE); 615 } 616 617 instance = ddi_get_instance(dip); 618 ata_ctlp = ddi_get_soft_state(ata_state, instance); 619 620 if (!ata_ctlp) 621 return (DDI_SUCCESS); 622 623 if (ata_ctlp->ac_pm_support) { 624 ATA_BUSY_COMPONENT(dip, 0); 625 if (ata_ctlp->ac_pm_level != PM_LEVEL_D0) { 626 if (ATA_RAISE_POWER(dip, 0, PM_LEVEL_D0) != 627 DDI_SUCCESS) { 628 ATA_IDLE_COMPONENT(dip, 0); 629 return (DDI_FAILURE); 630 } 631 } 632 (void) ddi_prop_remove(DDI_DEV_T_NONE, dip, "pm-components"); 633 } 634 ata_ctlp->ac_flags &= ~AC_ATTACHED; 635 636 /* destroy ata module */ 637 if (ata_ctlp->ac_flags & AC_DISK_INIT) 638 ata_disk_detach(ata_ctlp); 639 640 /* destroy atapi module */ 641 if (ata_ctlp->ac_flags & AC_ATAPI_INIT) 642 atapi_detach(ata_ctlp); 643 644 ddi_remove_minor_node(dip, NULL); 645 646 /* destroy drives */ 647 for (i = 0; i < ATA_MAXTARG; i++) { 648 for (j = 0; j < ATA_MAXLUN; j++) { 649 ata_drvp = CTL2DRV(ata_ctlp, i, j); 650 if (ata_drvp != NULL) 651 ata_uninit_drive(ata_drvp); 652 } 653 } 654 655 if (ata_ctlp->ac_iohandle1) 656 ddi_regs_map_free(&ata_ctlp->ac_iohandle1); 657 if (ata_ctlp->ac_iohandle2) 658 ddi_regs_map_free(&ata_ctlp->ac_iohandle2); 659 if (ata_ctlp->ac_bmhandle) 660 ddi_regs_map_free(&ata_ctlp->ac_bmhandle); 661 662 /* destroy controller */ 663 ata_destroy_controller(dip); 664 665 ddi_prop_remove_all(dip); 666 667 return (DDI_SUCCESS); 668 } 669 670 /* 671 * Nexus driver bus_ctl entry point 672 */ 673 /*ARGSUSED*/ 674 static int 675 ata_bus_ctl( 676 dev_info_t *d, 677 dev_info_t *r, 678 ddi_ctl_enum_t o, 679 void *a, 680 void *v) 681 { 682 dev_info_t *tdip; 683 int target_type; 684 int rc; 685 char *bufp; 686 687 ADBG_TRACE(("ata_bus_ctl entered\n")); 688 689 switch (o) { 690 691 case DDI_CTLOPS_SIDDEV: 692 return (DDI_FAILURE); 693 694 case DDI_CTLOPS_IOMIN: 695 696 /* 697 * Since we use PIO, we return a minimum I/O size of 698 * one byte. This will need to be updated when we 699 * implement DMA support 700 */ 701 702 *((int *)v) = 1; 703 return (DDI_SUCCESS); 704 705 case DDI_CTLOPS_DMAPMAPC: 706 case DDI_CTLOPS_REPORTINT: 707 case DDI_CTLOPS_REGSIZE: 708 case DDI_CTLOPS_NREGS: 709 case DDI_CTLOPS_SLAVEONLY: 710 case DDI_CTLOPS_AFFINITY: 711 case DDI_CTLOPS_POKE: 712 case DDI_CTLOPS_PEEK: 713 714 /* These ops shouldn't be called by a target driver */ 715 ADBG_ERROR(("ata_bus_ctl: %s%d: invalid op (%d) from %s%d\n", 716 ddi_driver_name(d), ddi_get_instance(d), o, 717 ddi_driver_name(r), ddi_get_instance(r))); 718 719 return (DDI_FAILURE); 720 721 case DDI_CTLOPS_REPORTDEV: 722 case DDI_CTLOPS_INITCHILD: 723 case DDI_CTLOPS_UNINITCHILD: 724 725 /* these require special handling below */ 726 break; 727 728 default: 729 return (ddi_ctlops(d, r, o, a, v)); 730 } 731 732 /* get targets dip */ 733 734 if (o == DDI_CTLOPS_INITCHILD || o == DDI_CTLOPS_UNINITCHILD) 735 tdip = (dev_info_t *)a; 736 else 737 tdip = r; 738 739 /* 740 * XXX - Get class of target 741 * Before the "class" entry in a conf file becomes 742 * a real property, we use an additional property 743 * tentatively called "class_prop". We will require that 744 * new classes (ie. direct) export "class_prop". 745 * SCSA target drivers will not have this property, so 746 * no property implies SCSA. 747 */ 748 if ((ddi_prop_lookup_string(DDI_DEV_T_ANY, tdip, DDI_PROP_DONTPASS, 749 "class", &bufp) == DDI_PROP_SUCCESS) || 750 (ddi_prop_lookup_string(DDI_DEV_T_ANY, tdip, DDI_PROP_DONTPASS, 751 "class_prop", &bufp) == DDI_PROP_SUCCESS)) { 752 if (strcmp(bufp, "dada") == 0) 753 target_type = ATA_DEV_DISK; 754 else if (strcmp(bufp, "scsi") == 0) 755 target_type = ATA_DEV_ATAPI; 756 else { 757 ADBG_WARN(("ata_bus_ctl: invalid target class %s\n", 758 bufp)); 759 ddi_prop_free(bufp); 760 return (DDI_FAILURE); 761 } 762 ddi_prop_free(bufp); 763 } else { 764 target_type = ATA_DEV_ATAPI; /* no class prop, assume SCSI */ 765 } 766 767 if (o == DDI_CTLOPS_INITCHILD) { 768 int instance = ddi_get_instance(d); 769 ata_ctl_t *ata_ctlp = ddi_get_soft_state(ata_state, instance); 770 ata_drv_t *ata_drvp; 771 int targ; 772 int lun; 773 int drive_type; 774 char *disk_prop; 775 char *class_prop; 776 777 if (ata_ctlp == NULL) { 778 ADBG_WARN(("ata_bus_ctl: failed to find ctl struct\n")); 779 return (DDI_FAILURE); 780 } 781 782 /* get (target,lun) of child device */ 783 784 targ = ddi_prop_get_int(DDI_DEV_T_ANY, tdip, DDI_PROP_DONTPASS, 785 "target", -1); 786 if (targ == -1) { 787 ADBG_WARN(("ata_bus_ctl: failed to get targ num\n")); 788 return (DDI_FAILURE); 789 } 790 791 lun = ddi_prop_get_int(DDI_DEV_T_ANY, tdip, DDI_PROP_DONTPASS, 792 "lun", 0); 793 794 if ((targ < 0) || (targ >= ATA_MAXTARG) || 795 (lun < 0) || (lun >= ATA_MAXLUN)) { 796 return (DDI_FAILURE); 797 } 798 799 ata_drvp = CTL2DRV(ata_ctlp, targ, lun); 800 801 if (ata_drvp == NULL) 802 return (DDI_FAILURE); /* no drive */ 803 804 /* get type of device */ 805 806 if (ATAPIDRV(ata_drvp)) 807 drive_type = ATA_DEV_ATAPI; 808 else 809 drive_type = ATA_DEV_DISK; 810 811 /* 812 * Check for special handling when child driver is 813 * cmdk (which morphs to the correct interface) 814 */ 815 if (strcmp(ddi_get_name(tdip), "cmdk") == 0) { 816 817 if ((target_type == ATA_DEV_DISK) && 818 (target_type != drive_type)) 819 return (DDI_FAILURE); 820 821 target_type = drive_type; 822 823 if (drive_type == ATA_DEV_ATAPI) { 824 class_prop = "scsi"; 825 } else { 826 disk_prop = "dadk"; 827 class_prop = "dada"; 828 829 if (ndi_prop_update_string(DDI_DEV_T_NONE, tdip, 830 "disk", disk_prop) != DDI_PROP_SUCCESS) { 831 ADBG_WARN(("ata_bus_ctl: failed to " 832 "create disk prop\n")); 833 return (DDI_FAILURE); 834 } 835 } 836 837 if (ndi_prop_update_string(DDI_DEV_T_NONE, tdip, 838 "class_prop", class_prop) != DDI_PROP_SUCCESS) { 839 ADBG_WARN(("ata_bus_ctl: failed to " 840 "create class prop\n")); 841 return (DDI_FAILURE); 842 } 843 } 844 845 /* Check that target class matches the device */ 846 847 if (target_type != drive_type) 848 return (DDI_FAILURE); 849 850 /* save pointer to drive struct for ata_disk_bus_ctl */ 851 ddi_set_driver_private(tdip, ata_drvp); 852 853 /* 854 * Determine whether to enable DMA support for this drive. This 855 * check is deferred to this point so that the various dma 856 * properties could reside on the devinfo node should finer 857 * grained dma control be required. 858 */ 859 if (ata_drvp->ad_pciide_dma == ATA_DMA_UNINITIALIZED) { 860 ata_drvp->ad_pciide_dma = 861 ata_init_drive_pcidma(ata_ctlp, ata_drvp, tdip); 862 ata_show_transfer_mode(ata_ctlp, ata_drvp); 863 } 864 } 865 866 if (target_type == ATA_DEV_ATAPI) { 867 rc = scsa_bus_ops_p->bus_ctl(d, r, o, a, v); 868 } else { 869 rc = ata_disk_bus_ctl(d, r, o, a, v); 870 } 871 872 return (rc); 873 } 874 875 /* 876 * 877 * GHD ccc_hba_complete callback 878 * 879 */ 880 881 /* ARGSUSED */ 882 static void 883 ata_hba_complete( 884 void *hba_handle, 885 gcmd_t *gcmdp, 886 int do_callback) 887 { 888 ata_drv_t *ata_drvp; 889 ata_pkt_t *ata_pktp; 890 891 ADBG_TRACE(("ata_hba_complete entered\n")); 892 893 ata_drvp = GCMD2DRV(gcmdp); 894 ata_pktp = GCMD2APKT(gcmdp); 895 if (ata_pktp->ap_complete) 896 (*ata_pktp->ap_complete)(ata_drvp, ata_pktp, 897 do_callback); 898 } 899 900 /* GHD ccc_timeout_func callback */ 901 902 /* ARGSUSED */ 903 static int 904 ata_timeout_func( 905 void *hba_handle, 906 gcmd_t *gcmdp, 907 gtgt_t *gtgtp, 908 gact_t action, 909 int calltype) 910 { 911 ata_ctl_t *ata_ctlp; 912 ata_pkt_t *ata_pktp; 913 ata_drv_t *ata_drvp; 914 915 ADBG_TRACE(("ata_timeout_func entered\n")); 916 917 ata_ctlp = (ata_ctl_t *)hba_handle; 918 919 if (gcmdp != NULL) 920 ata_pktp = GCMD2APKT(gcmdp); 921 else 922 ata_pktp = NULL; 923 924 switch (action) { 925 case GACTION_EARLY_ABORT: 926 /* abort before request was started */ 927 if (ata_pktp != NULL) { 928 ata_pktp->ap_flags |= AP_ABORT; 929 } 930 ghd_complete(&ata_ctlp->ac_ccc, gcmdp); 931 return (TRUE); 932 933 case GACTION_EARLY_TIMEOUT: 934 /* timeout before request was started */ 935 if (ata_pktp != NULL) { 936 ata_pktp->ap_flags |= AP_TIMEOUT; 937 } 938 ghd_complete(&ata_ctlp->ac_ccc, gcmdp); 939 return (TRUE); 940 941 case GACTION_RESET_TARGET: 942 /* 943 * Reset a device is not supported. Resetting a specific 944 * device can't be done at all to an ATA device and if 945 * you send a RESET to an ATAPI device you have to 946 * reset the whole bus to make certain both devices 947 * on the bus stay in sync regarding which device is 948 * the currently selected one. 949 */ 950 return (FALSE); 951 952 case GACTION_RESET_BUS: 953 /* 954 * Issue bus reset and reinitialize both drives. 955 * But only if this is a timed-out request. Target 956 * driver reset requests are ignored because ATA 957 * and ATAPI devices shouldn't be gratuitously reset. 958 * Also disable DMA if it is a CF device. 959 */ 960 if (gcmdp == NULL) 961 break; 962 ata_drvp = GCMD2DRV(gcmdp); 963 if (ata_drvp != NULL) 964 if (ata_drvp->ad_id.ai_config == ATA_ID_CF_TO_ATA) 965 ata_disable_DMA(ata_drvp); 966 return (ata_reset_bus(ata_ctlp)); 967 default: 968 break; 969 } 970 return (FALSE); 971 } 972 973 /* 974 * 975 * Initialize controller's soft-state structure 976 * 977 */ 978 979 static ata_ctl_t * 980 ata_init_controller( 981 dev_info_t *dip) 982 { 983 ata_ctl_t *ata_ctlp; 984 int instance; 985 caddr_t ioaddr1; 986 caddr_t ioaddr2; 987 988 ADBG_TRACE(("ata_init_controller entered\n")); 989 990 instance = ddi_get_instance(dip); 991 992 /* allocate controller structure */ 993 if (ddi_soft_state_zalloc(ata_state, instance) != DDI_SUCCESS) { 994 ADBG_WARN(("ata_init_controller: soft_state_zalloc failed\n")); 995 return (NULL); 996 } 997 998 ata_ctlp = ddi_get_soft_state(ata_state, instance); 999 1000 if (ata_ctlp == NULL) { 1001 ADBG_WARN(("ata_init_controller: failed to find " 1002 "controller struct\n")); 1003 return (NULL); 1004 } 1005 1006 /* 1007 * initialize per-controller data 1008 */ 1009 ata_ctlp->ac_dip = dip; 1010 ata_ctlp->ac_arq_pktp = kmem_zalloc(sizeof (ata_pkt_t), KM_SLEEP); 1011 1012 /* 1013 * map the device registers 1014 */ 1015 if (!ata_setup_ioaddr(dip, &ata_ctlp->ac_iohandle1, &ioaddr1, 1016 &ata_ctlp->ac_iohandle2, &ioaddr2, 1017 &ata_ctlp->ac_bmhandle, &ata_ctlp->ac_bmaddr)) { 1018 (void) ata_detach(dip, DDI_DETACH); 1019 return (NULL); 1020 } 1021 1022 ADBG_INIT(("ata_init_controller: ioaddr1 = 0x%p, ioaddr2 = 0x%p\n", 1023 ioaddr1, ioaddr2)); 1024 1025 /* 1026 * Do ARQ setup 1027 */ 1028 atapi_init_arq(ata_ctlp); 1029 1030 /* 1031 * Do PCI-IDE setup 1032 */ 1033 ata_init_pciide(dip, ata_ctlp); 1034 1035 /* 1036 * port addresses associated with ioaddr1 1037 */ 1038 ata_ctlp->ac_ioaddr1 = ioaddr1; 1039 ata_ctlp->ac_data = (ushort_t *)ioaddr1 + AT_DATA; 1040 ata_ctlp->ac_error = (uchar_t *)ioaddr1 + AT_ERROR; 1041 ata_ctlp->ac_feature = (uchar_t *)ioaddr1 + AT_FEATURE; 1042 ata_ctlp->ac_count = (uchar_t *)ioaddr1 + AT_COUNT; 1043 ata_ctlp->ac_sect = (uchar_t *)ioaddr1 + AT_SECT; 1044 ata_ctlp->ac_lcyl = (uchar_t *)ioaddr1 + AT_LCYL; 1045 ata_ctlp->ac_hcyl = (uchar_t *)ioaddr1 + AT_HCYL; 1046 ata_ctlp->ac_drvhd = (uchar_t *)ioaddr1 + AT_DRVHD; 1047 ata_ctlp->ac_status = (uchar_t *)ioaddr1 + AT_STATUS; 1048 ata_ctlp->ac_cmd = (uchar_t *)ioaddr1 + AT_CMD; 1049 1050 /* 1051 * port addresses associated with ioaddr2 1052 */ 1053 ata_ctlp->ac_ioaddr2 = ioaddr2; 1054 ata_ctlp->ac_altstatus = (uchar_t *)ioaddr2 + AT_ALTSTATUS; 1055 ata_ctlp->ac_devctl = (uchar_t *)ioaddr2 + AT_DEVCTL; 1056 1057 /* 1058 * If AC_BSY_WAIT needs to be set for laptops that do 1059 * suspend/resume but do not correctly wait for the busy bit to 1060 * drop after a resume. 1061 */ 1062 ata_ctlp->ac_timing_flags = ddi_prop_get_int(DDI_DEV_T_ANY, 1063 dip, DDI_PROP_DONTPASS, "timing_flags", 0); 1064 /* 1065 * get max transfer size, default to 256 sectors 1066 */ 1067 ata_ctlp->ac_max_transfer = ddi_prop_get_int(DDI_DEV_T_ANY, 1068 dip, DDI_PROP_DONTPASS, "max_transfer", 0x100); 1069 if (ata_ctlp->ac_max_transfer < 1) 1070 ata_ctlp->ac_max_transfer = 1; 1071 if (ata_ctlp->ac_max_transfer > 0x100) 1072 ata_ctlp->ac_max_transfer = 0x100; 1073 1074 /* 1075 * Get the standby timer value 1076 */ 1077 ata_ctlp->ac_standby_time = ddi_prop_get_int(DDI_DEV_T_ANY, 1078 dip, DDI_PROP_DONTPASS, "standby", -1); 1079 1080 /* 1081 * If this is a /pci/pci-ide instance check to see if 1082 * it's supposed to be attached as an /isa/ata 1083 */ 1084 if (ata_ctlp->ac_pciide) { 1085 static char prop_buf[] = "SUNW-ata-ffff-isa"; 1086 int addr1 = (intptr_t)ioaddr1; 1087 1088 1089 if (addr1 < 0 || addr1 > 0xffff) { 1090 (void) ata_detach(dip, DDI_DETACH); 1091 return (NULL); 1092 } 1093 (void) sprintf(prop_buf, "SUNW-ata-%04x-isa", 1094 addr1); 1095 if (ddi_prop_exists(DDI_DEV_T_ANY, ddi_root_node(), 1096 DDI_PROP_DONTPASS, prop_buf)) { 1097 (void) ata_detach(dip, DDI_DETACH); 1098 return (NULL); 1099 } 1100 } 1101 1102 /* Init controller specific stuff */ 1103 (void) ata_spec_init_controller(dip); 1104 1105 /* 1106 * initialize GHD 1107 */ 1108 1109 GHD_WAITQ_INIT(&ata_ctlp->ac_ccc.ccc_waitq, NULL, 1); 1110 1111 if (!ghd_register("ata", &ata_ctlp->ac_ccc, dip, 0, ata_ctlp, 1112 atapi_ccballoc, atapi_ccbfree, 1113 ata_pciide_dma_sg_func, ata_hba_start, 1114 ata_hba_complete, ata_intr, 1115 ata_get_status, ata_process_intr, ata_timeout_func, 1116 &ata_timer_conf, NULL)) { 1117 (void) ata_detach(dip, DDI_DETACH); 1118 return (NULL); 1119 } 1120 1121 ata_ctlp->ac_flags |= AC_GHD_INIT; 1122 return (ata_ctlp); 1123 } 1124 1125 /* destroy a controller */ 1126 1127 static void 1128 ata_destroy_controller( 1129 dev_info_t *dip) 1130 { 1131 ata_ctl_t *ata_ctlp; 1132 int instance; 1133 1134 ADBG_TRACE(("ata_destroy_controller entered\n")); 1135 1136 instance = ddi_get_instance(dip); 1137 ata_ctlp = ddi_get_soft_state(ata_state, instance); 1138 1139 if (ata_ctlp == NULL) 1140 return; 1141 1142 /* destroy ghd */ 1143 if (ata_ctlp->ac_flags & AC_GHD_INIT) 1144 ghd_unregister(&ata_ctlp->ac_ccc); 1145 1146 /* free the pciide buffer (if any) */ 1147 ata_pciide_free(ata_ctlp); 1148 1149 /* destroy controller struct */ 1150 kmem_free(ata_ctlp->ac_arq_pktp, sizeof (ata_pkt_t)); 1151 ddi_soft_state_free(ata_state, instance); 1152 1153 } 1154 1155 1156 /* 1157 * 1158 * initialize a drive 1159 * 1160 */ 1161 1162 static ata_drv_t * 1163 ata_init_drive( 1164 ata_ctl_t *ata_ctlp, 1165 uchar_t targ, 1166 uchar_t lun) 1167 { 1168 static char nec_260[] = "NEC CD-ROM DRIVE"; 1169 ata_drv_t *ata_drvp; 1170 struct ata_id *aidp; 1171 char buf[80]; 1172 int drive_type; 1173 int i; 1174 int valid_version = 0; 1175 1176 ADBG_TRACE(("ata_init_drive entered, targ = %d, lun = %d\n", 1177 targ, lun)); 1178 1179 /* check if device already exists */ 1180 1181 ata_drvp = CTL2DRV(ata_ctlp, targ, lun); 1182 1183 if (ata_drvp != NULL) 1184 return (ata_drvp); 1185 1186 /* allocate new device structure */ 1187 1188 ata_drvp = kmem_zalloc(sizeof (ata_drv_t), KM_SLEEP); 1189 aidp = &ata_drvp->ad_id; 1190 1191 /* 1192 * set up drive struct 1193 */ 1194 ata_drvp->ad_ctlp = ata_ctlp; 1195 ata_drvp->ad_pciide_dma = ATA_DMA_UNINITIALIZED; 1196 ata_drvp->ad_targ = targ; 1197 ata_drvp->ad_drive_bits = 1198 (ata_drvp->ad_targ == 0 ? ATDH_DRIVE0 : ATDH_DRIVE1); 1199 /* 1200 * Add the LUN for SFF-8070i support 1201 */ 1202 ata_drvp->ad_lun = lun; 1203 ata_drvp->ad_drive_bits |= ata_drvp->ad_lun; 1204 1205 /* 1206 * get drive type, side effect is to collect 1207 * IDENTIFY DRIVE data 1208 */ 1209 1210 drive_type = ata_drive_type(ata_drvp->ad_drive_bits, 1211 ata_ctlp->ac_iohandle1, 1212 ata_ctlp->ac_ioaddr1, 1213 ata_ctlp->ac_iohandle2, 1214 ata_ctlp->ac_ioaddr2, 1215 aidp); 1216 1217 switch (drive_type) { 1218 case ATA_DEV_NONE: 1219 /* no drive found */ 1220 goto errout; 1221 case ATA_DEV_ATAPI: 1222 ata_drvp->ad_flags |= AD_ATAPI; 1223 break; 1224 case ATA_DEV_DISK: 1225 ata_drvp->ad_flags |= AD_DISK; 1226 break; 1227 } 1228 1229 /* 1230 * swap bytes of all text fields 1231 */ 1232 if (!ata_strncmp(nec_260, aidp->ai_model, sizeof (aidp->ai_model))) { 1233 swab(aidp->ai_drvser, aidp->ai_drvser, 1234 sizeof (aidp->ai_drvser)); 1235 swab(aidp->ai_fw, aidp->ai_fw, 1236 sizeof (aidp->ai_fw)); 1237 swab(aidp->ai_model, aidp->ai_model, 1238 sizeof (aidp->ai_model)); 1239 } 1240 1241 /* 1242 * Check if this drive has the Single Sector bug 1243 */ 1244 1245 if (ata_check_drive_blacklist(&ata_drvp->ad_id, ATA_BL_1SECTOR)) 1246 ata_drvp->ad_flags |= AD_1SECTOR; 1247 else 1248 ata_drvp->ad_flags &= ~AD_1SECTOR; 1249 1250 if (ata_check_drive_blacklist(&ata_drvp->ad_id, ATA_BL_LBA48)) 1251 ata_drvp->ad_flags |= AD_BLLBA48; 1252 else 1253 ata_drvp->ad_flags &= ~AD_BLLBA48; 1254 1255 /* Check if this drive has the "revert to defaults" bug */ 1256 if (!ata_check_revert_to_defaults(ata_drvp)) 1257 ata_drvp->ad_flags |= AD_NORVRT; 1258 1259 /* Dump the drive info */ 1260 (void) strncpy(buf, aidp->ai_model, sizeof (aidp->ai_model)); 1261 buf[sizeof (aidp->ai_model)-1] = '\0'; 1262 for (i = sizeof (aidp->ai_model) - 2; buf[i] == ' '; i--) 1263 buf[i] = '\0'; 1264 1265 ATAPRT(("?\t%s device at targ %d, lun %d lastlun 0x%x\n", 1266 (ATAPIDRV(ata_drvp) ? "ATAPI":"IDE"), 1267 ata_drvp->ad_targ, ata_drvp->ad_lun, aidp->ai_lastlun)); 1268 1269 ATAPRT(("?\tmodel %s\n", buf)); 1270 1271 if (aidp->ai_majorversion != 0 && aidp->ai_majorversion != 0xffff) { 1272 for (i = 14; i >= 2; i--) { 1273 if (aidp->ai_majorversion & (1 << i)) { 1274 valid_version = i; 1275 break; 1276 } 1277 } 1278 ATAPRT(( 1279 "?\tATA/ATAPI-%d supported, majver 0x%x minver 0x%x\n", 1280 valid_version, 1281 aidp->ai_majorversion, 1282 aidp->ai_minorversion)); 1283 } 1284 1285 if (ata_capability_data) { 1286 1287 ATAPRT(("?\t\tstat %x, err %x\n", 1288 ddi_get8(ata_ctlp->ac_iohandle2, 1289 ata_ctlp->ac_altstatus), 1290 ddi_get8(ata_ctlp->ac_iohandle1, ata_ctlp->ac_error))); 1291 1292 ATAPRT(("?\t\tcfg 0x%x, cap 0x%x\n", 1293 aidp->ai_config, 1294 aidp->ai_cap)); 1295 1296 /* 1297 * Be aware that ATA-6 and later drives may not provide valid 1298 * geometry information and other obsoleted info. 1299 * Select what is printed based on supported ATA model (skip 1300 * anything below ATA/ATAPI-3) 1301 */ 1302 1303 if (valid_version == 0 || aidp->ai_majorversion < 1304 ATAC_MAJVER_6) { 1305 /* 1306 * Supported version less then ATA-6 1307 */ 1308 ATAPRT(("?\t\tcyl %d, hd %d, sec/trk %d\n", 1309 aidp->ai_fixcyls, 1310 aidp->ai_heads, 1311 aidp->ai_sectors)); 1312 } 1313 ATAPRT(("?\t\tmult1 0x%x, mult2 0x%x\n", 1314 aidp->ai_mult1, 1315 aidp->ai_mult2)); 1316 if (valid_version && aidp->ai_majorversion < ATAC_MAJVER_4) { 1317 ATAPRT(( 1318 "?\t\tpiomode 0x%x, dmamode 0x%x, advpiomode 0x%x\n", 1319 aidp->ai_piomode, 1320 aidp->ai_dmamode, 1321 aidp->ai_advpiomode)); 1322 } else { 1323 ATAPRT(("?\t\tadvpiomode 0x%x\n", 1324 aidp->ai_advpiomode)); 1325 } 1326 ATAPRT(("?\t\tminpio %d, minpioflow %d\n", 1327 aidp->ai_minpio, 1328 aidp->ai_minpioflow)); 1329 if (valid_version && aidp->ai_majorversion >= ATAC_MAJVER_4 && 1330 (aidp->ai_validinfo & ATAC_VALIDINFO_83)) { 1331 ATAPRT(("?\t\tdwdma 0x%x, ultradma 0x%x\n", 1332 aidp->ai_dworddma, 1333 aidp->ai_ultradma)); 1334 } else { 1335 ATAPRT(("?\t\tdwdma 0x%x\n", 1336 aidp->ai_dworddma)); 1337 } 1338 } 1339 1340 if (ATAPIDRV(ata_drvp)) { 1341 if (!atapi_init_drive(ata_drvp)) 1342 goto errout; 1343 } else { 1344 if (!ata_disk_init_drive(ata_drvp)) 1345 goto errout; 1346 } 1347 1348 /* 1349 * store pointer in controller struct 1350 */ 1351 CTL2DRV(ata_ctlp, targ, lun) = ata_drvp; 1352 1353 /* 1354 * lock the drive's current settings in case I have to 1355 * reset the drive due to some sort of error 1356 */ 1357 (void) ata_set_feature(ata_ctlp, ata_drvp, ATSF_DIS_REVPOD, 0); 1358 1359 return (ata_drvp); 1360 1361 errout: 1362 ata_uninit_drive(ata_drvp); 1363 return (NULL); 1364 } 1365 1366 /* destroy a drive */ 1367 1368 static void 1369 ata_uninit_drive( 1370 ata_drv_t *ata_drvp) 1371 { 1372 #if 0 1373 ata_ctl_t *ata_ctlp = ata_drvp->ad_ctlp; 1374 #endif 1375 1376 ADBG_TRACE(("ata_uninit_drive entered\n")); 1377 1378 #if 0 1379 /* 1380 * DON'T DO THIS. disabling interrupts floats the IRQ line 1381 * which generates spurious interrupts 1382 */ 1383 1384 /* 1385 * Select the correct drive 1386 */ 1387 ddi_put8(ata_ctlp->ac_iohandle1, ata_ctlp->ac_drvhd, 1388 ata_drvp->ad_drive_bits); 1389 ata_nsecwait(400); 1390 1391 /* 1392 * Disable interrupts from the drive 1393 */ 1394 ddi_put8(ata_ctlp->ac_iohandle2, ata_ctlp->ac_devctl, 1395 (ATDC_D3 | ATDC_NIEN)); 1396 #endif 1397 1398 /* interface specific clean-ups */ 1399 1400 if (ata_drvp->ad_flags & AD_ATAPI) 1401 atapi_uninit_drive(ata_drvp); 1402 else if (ata_drvp->ad_flags & AD_DISK) 1403 ata_disk_uninit_drive(ata_drvp); 1404 1405 /* free drive struct */ 1406 1407 kmem_free(ata_drvp, sizeof (ata_drv_t)); 1408 } 1409 1410 1411 /* 1412 * ata_drive_type() 1413 * 1414 * The timeout values and exact sequence of checking is critical 1415 * especially for atapi device detection, and should not be changed lightly. 1416 * 1417 */ 1418 static int 1419 ata_drive_type( 1420 uchar_t drvhd, 1421 ddi_acc_handle_t io_hdl1, 1422 caddr_t ioaddr1, 1423 ddi_acc_handle_t io_hdl2, 1424 caddr_t ioaddr2, 1425 struct ata_id *ata_id_bufp) 1426 { 1427 uchar_t status; 1428 1429 ADBG_TRACE(("ata_drive_type entered\n")); 1430 1431 /* 1432 * select the appropriate drive and LUN 1433 */ 1434 ddi_put8(io_hdl1, (uchar_t *)ioaddr1 + AT_DRVHD, drvhd); 1435 ata_nsecwait(400); 1436 1437 /* 1438 * make certain the drive is selected, and wait for not busy 1439 */ 1440 (void) ata_wait3(io_hdl2, ioaddr2, 0, ATS_BSY, 0x7f, 0, 0x7f, 0, 1441 5 * 1000000); 1442 1443 status = ddi_get8(io_hdl2, (uchar_t *)ioaddr2 + AT_ALTSTATUS); 1444 1445 if (status & ATS_BSY) { 1446 ADBG_TRACE(("ata_drive_type 0x%p 0x%x\n", ioaddr1, status)); 1447 return (ATA_DEV_NONE); 1448 } 1449 1450 if (ata_disk_id(io_hdl1, ioaddr1, io_hdl2, ioaddr2, ata_id_bufp)) 1451 return (ATA_DEV_DISK); 1452 1453 /* 1454 * No disk, check for atapi unit. 1455 */ 1456 if (!atapi_signature(io_hdl1, ioaddr1)) { 1457 #ifndef ATA_DISABLE_ATAPI_1_7 1458 /* 1459 * Check for old (but prevalent) atapi 1.7B 1460 * spec device, the only known example is the 1461 * NEC CDR-260 (not 260R which is (mostly) ATAPI 1.2 1462 * compliant). This device has no signature 1463 * and requires conversion from hex to BCD 1464 * for some scsi audio commands. 1465 */ 1466 if (atapi_id(io_hdl1, ioaddr1, io_hdl2, ioaddr2, ata_id_bufp)) { 1467 return (ATA_DEV_ATAPI); 1468 } 1469 #endif 1470 return (ATA_DEV_NONE); 1471 } 1472 1473 if (atapi_id(io_hdl1, ioaddr1, io_hdl2, ioaddr2, ata_id_bufp)) { 1474 return (ATA_DEV_ATAPI); 1475 } 1476 1477 return (ATA_DEV_NONE); 1478 1479 } 1480 1481 /* 1482 * nsec-granularity time delay function 1483 */ 1484 void 1485 ata_nsecwait(clock_t count) 1486 { 1487 extern int tsc_gethrtime_initted; 1488 1489 if (tsc_gethrtime_initted) { 1490 hrtime_t end = gethrtime() + count; 1491 1492 while (gethrtime() < end) { 1493 SMT_PAUSE(); 1494 } 1495 } else { 1496 drv_usecwait(1 + (count / 1000)); 1497 } 1498 } 1499 1500 1501 /* 1502 * Wait for a register of a controller to achieve a specific state. 1503 * To return normally, all the bits in the first sub-mask must be ON, 1504 * all the bits in the second sub-mask must be OFF. 1505 * If timeout_usec microseconds pass without the controller achieving 1506 * the desired bit configuration, we return TRUE, else FALSE. 1507 */ 1508 1509 int ata_usec_delay = 10; 1510 1511 int 1512 ata_wait( 1513 ddi_acc_handle_t io_hdl, 1514 caddr_t ioaddr, 1515 uchar_t onbits, 1516 uchar_t offbits, 1517 uint_t timeout_usec) 1518 { 1519 ushort_t val; 1520 hrtime_t deadline = gethrtime() + 1521 (hrtime_t)timeout_usec * (NANOSEC / MICROSEC); 1522 1523 1524 do { 1525 val = ddi_get8(io_hdl, (uchar_t *)ioaddr + AT_ALTSTATUS); 1526 if ((val & onbits) == onbits && (val & offbits) == 0) 1527 return (TRUE); 1528 drv_usecwait(ata_usec_delay); 1529 } while (gethrtime() < deadline); 1530 1531 return (FALSE); 1532 } 1533 1534 1535 /* 1536 * 1537 * This is a slightly more complicated version that checks 1538 * for error conditions and bails-out rather than looping 1539 * until the timeout expires 1540 */ 1541 int 1542 ata_wait3( 1543 ddi_acc_handle_t io_hdl, 1544 caddr_t ioaddr, 1545 uchar_t onbits1, 1546 uchar_t offbits1, 1547 uchar_t failure_onbits2, 1548 uchar_t failure_offbits2, 1549 uchar_t failure_onbits3, 1550 uchar_t failure_offbits3, 1551 uint_t timeout_usec) 1552 { 1553 ushort_t val; 1554 hrtime_t deadline = gethrtime() + 1555 (hrtime_t)timeout_usec * (NANOSEC / MICROSEC); 1556 1557 do { 1558 val = ddi_get8(io_hdl, (uchar_t *)ioaddr + AT_ALTSTATUS); 1559 1560 /* 1561 * check for expected condition 1562 */ 1563 if ((val & onbits1) == onbits1 && (val & offbits1) == 0) 1564 return (TRUE); 1565 1566 /* 1567 * check for error conditions 1568 */ 1569 if ((val & failure_onbits2) == failure_onbits2 && 1570 (val & failure_offbits2) == 0) { 1571 return (FALSE); 1572 } 1573 1574 if ((val & failure_onbits3) == failure_onbits3 && 1575 (val & failure_offbits3) == 0) { 1576 return (FALSE); 1577 } 1578 1579 drv_usecwait(ata_usec_delay); 1580 } while (gethrtime() < deadline); 1581 1582 return (FALSE); 1583 } 1584 1585 1586 /* 1587 * 1588 * low level routine for ata_disk_id() and atapi_id() 1589 * 1590 */ 1591 1592 int 1593 ata_id_common( 1594 uchar_t id_cmd, 1595 int expect_drdy, 1596 ddi_acc_handle_t io_hdl1, 1597 caddr_t ioaddr1, 1598 ddi_acc_handle_t io_hdl2, 1599 caddr_t ioaddr2, 1600 struct ata_id *aidp) 1601 { 1602 uchar_t status; 1603 1604 ADBG_TRACE(("ata_id_common entered\n")); 1605 1606 bzero(aidp, sizeof (struct ata_id)); 1607 1608 /* 1609 * clear the features register 1610 */ 1611 ddi_put8(io_hdl1, (uchar_t *)ioaddr1 + AT_FEATURE, 0); 1612 1613 /* 1614 * Disable interrupts from the device. When the ata 1615 * hardware is sharing its interrupt with another 1616 * device, the shared interrupt might have already been 1617 * unmasked in the interrupt controller and 1618 * triggering ata device interrupts will result in an 1619 * interrupt storm and a hung system. 1620 */ 1621 ddi_put8(io_hdl2, (uchar_t *)ioaddr2 + AT_DEVCTL, ATDC_D3 | ATDC_NIEN); 1622 1623 /* 1624 * issue IDENTIFY DEVICE or IDENTIFY PACKET DEVICE command 1625 */ 1626 ddi_put8(io_hdl1, (uchar_t *)ioaddr1 + AT_CMD, id_cmd); 1627 1628 /* wait for the busy bit to settle */ 1629 ata_nsecwait(400); 1630 1631 /* 1632 * read alternate status and check for conditions which 1633 * may indicate the drive is not present, to prevent getting 1634 * stuck in ata_wait3() below. 1635 */ 1636 status = ddi_get8(io_hdl2, (uchar_t *)ioaddr2 + AT_ALTSTATUS); 1637 1638 /* 1639 * 0x0, 0x7f, or ATS_DF can happen when no drive is present 1640 */ 1641 if ((status == 0x0) || (status == 0x7f) || 1642 ((status & (ATS_BSY|ATS_DF)) == ATS_DF)) { 1643 /* invalid status, can't be an ATA or ATAPI device */ 1644 return (FALSE); 1645 } 1646 1647 /* 1648 * According to the ATA specification, some drives may have 1649 * to read the media to complete this command. We need to 1650 * make sure we give them enough time to respond. 1651 */ 1652 (void) ata_wait3(io_hdl2, ioaddr2, 0, ATS_BSY, 1653 ATS_ERR, ATS_BSY, 0x7f, 0, 5 * 1000000); 1654 1655 /* 1656 * read the status byte and clear the pending interrupt 1657 */ 1658 status = ddi_get8(io_hdl1, (uchar_t *)ioaddr1 + AT_STATUS); 1659 1660 /* 1661 * this happens if there's no drive present 1662 */ 1663 if (status == 0xff || status == 0x7f) { 1664 /* invalid status, can't be an ATA or ATAPI device */ 1665 return (FALSE); 1666 } 1667 1668 if (status & ATS_BSY) { 1669 ADBG_ERROR(("ata_id_common: BUSY status 0x%x error 0x%x\n", 1670 ddi_get8(io_hdl2, (uchar_t *)ioaddr2 +AT_ALTSTATUS), 1671 ddi_get8(io_hdl1, (uchar_t *)ioaddr1 + AT_ERROR))); 1672 return (FALSE); 1673 } 1674 1675 if (!(status & ATS_DRQ)) { 1676 if (status & (ATS_ERR | ATS_DF)) { 1677 return (FALSE); 1678 } 1679 /* 1680 * Give the drive another second to assert DRQ. Some older 1681 * drives de-assert BSY before asserting DRQ. Bail out 1682 * immediately if the status becomes 0x7f, which is invalid 1683 * value. It can happen when no drive is present. 1684 */ 1685 if (!ata_wait3(io_hdl2, ioaddr2, ATS_DRQ, ATS_BSY, 0x7f, 1686 ATS_BSY, 0x7f, ATS_BSY, 1000000)) { 1687 ADBG_WARN(("ata_id_common: " 1688 "!DRQ status 0x%x error 0x%x\n", 1689 ddi_get8(io_hdl2, (uchar_t *)ioaddr2 +AT_ALTSTATUS), 1690 ddi_get8(io_hdl1, (uchar_t *)ioaddr1 + AT_ERROR))); 1691 return (FALSE); 1692 } 1693 } 1694 1695 /* 1696 * transfer the data 1697 */ 1698 ddi_rep_get16(io_hdl1, (ushort_t *)aidp, (ushort_t *)ioaddr1 + AT_DATA, 1699 NBPSCTR >> 1, DDI_DEV_NO_AUTOINCR); 1700 1701 /* wait for the busy bit to settle */ 1702 ata_nsecwait(400); 1703 1704 1705 /* 1706 * Wait for the drive to recognize I've read all the data. 1707 * Some drives have been observed to take as much as 3msec to 1708 * deassert DRQ after reading the data; allow 1 sec just in case. 1709 * 1710 * Note: some non-compliant ATAPI drives (e.g., NEC Multispin 6V, 1711 * CDR-1350A) don't assert DRDY. If we've made it this far we can 1712 * safely ignore the DRDY bit since the ATAPI Packet command 1713 * actually doesn't require it to ever be asserted. 1714 * 1715 * Bail out immediately if the status becomes 0x7f, which is invalid 1716 * value. It can happen when no drive is present. 1717 * 1718 */ 1719 if (!ata_wait3(io_hdl2, ioaddr2, (uchar_t)(expect_drdy ? ATS_DRDY : 0), 1720 (ATS_BSY | ATS_DRQ), 0x7f, ATS_BSY, 0x7f, ATS_BSY, 1000000)) { 1721 ADBG_WARN(("ata_id_common: bad status 0x%x error 0x%x\n", 1722 ddi_get8(io_hdl2, (uchar_t *)ioaddr2 + AT_ALTSTATUS), 1723 ddi_get8(io_hdl1, (uchar_t *)ioaddr1 + AT_ERROR))); 1724 return (FALSE); 1725 } 1726 1727 /* 1728 * Check to see if the command aborted. This happens if 1729 * an IDENTIFY DEVICE command is issued to an ATAPI PACKET device, 1730 * or if an IDENTIFY PACKET DEVICE command is issued to an ATA 1731 * (non-PACKET) device. 1732 */ 1733 if (status & (ATS_DF | ATS_ERR)) { 1734 ADBG_WARN(("ata_id_common: status 0x%x error 0x%x \n", 1735 ddi_get8(io_hdl2, (uchar_t *)ioaddr2 + AT_ALTSTATUS), 1736 ddi_get8(io_hdl1, (uchar_t *)ioaddr1 + AT_ERROR))); 1737 return (FALSE); 1738 } 1739 return (TRUE); 1740 } 1741 1742 1743 /* 1744 * Low level routine to issue a non-data command and busy wait for 1745 * the completion status. 1746 */ 1747 1748 int 1749 ata_command( 1750 ata_ctl_t *ata_ctlp, 1751 ata_drv_t *ata_drvp, 1752 int expect_drdy, 1753 int silent, 1754 uint_t busy_wait, 1755 uchar_t cmd, 1756 uchar_t feature, 1757 uchar_t count, 1758 uchar_t sector, 1759 uchar_t head, 1760 uchar_t cyl_low, 1761 uchar_t cyl_hi) 1762 { 1763 ddi_acc_handle_t io_hdl1 = ata_ctlp->ac_iohandle1; 1764 ddi_acc_handle_t io_hdl2 = ata_ctlp->ac_iohandle2; 1765 uchar_t status; 1766 1767 /* select the drive */ 1768 ddi_put8(io_hdl1, ata_ctlp->ac_drvhd, ata_drvp->ad_drive_bits); 1769 ata_nsecwait(400); 1770 1771 /* make certain the drive selected */ 1772 if (!ata_wait(io_hdl2, ata_ctlp->ac_ioaddr2, 1773 (uchar_t)(expect_drdy ? ATS_DRDY : 0), 1774 ATS_BSY, busy_wait)) { 1775 ADBG_ERROR(("ata_command: select failed " 1776 "DRDY 0x%x CMD 0x%x F 0x%x N 0x%x " 1777 "S 0x%x H 0x%x CL 0x%x CH 0x%x\n", 1778 expect_drdy, cmd, feature, count, 1779 sector, head, cyl_low, cyl_hi)); 1780 return (FALSE); 1781 } 1782 1783 /* 1784 * set all the regs 1785 */ 1786 ddi_put8(io_hdl1, ata_ctlp->ac_drvhd, (head | ata_drvp->ad_drive_bits)); 1787 ddi_put8(io_hdl1, ata_ctlp->ac_sect, sector); 1788 ddi_put8(io_hdl1, ata_ctlp->ac_count, count); 1789 ddi_put8(io_hdl1, ata_ctlp->ac_lcyl, cyl_low); 1790 ddi_put8(io_hdl1, ata_ctlp->ac_hcyl, cyl_hi); 1791 ddi_put8(io_hdl1, ata_ctlp->ac_feature, feature); 1792 1793 /* send the command */ 1794 ddi_put8(io_hdl1, ata_ctlp->ac_cmd, cmd); 1795 1796 /* wait for the busy bit to settle */ 1797 ata_nsecwait(400); 1798 1799 /* wait for not busy */ 1800 if (!ata_wait(io_hdl2, ata_ctlp->ac_ioaddr2, 0, ATS_BSY, busy_wait)) { 1801 ADBG_ERROR(("ata_command: BSY too long!" 1802 "DRDY 0x%x CMD 0x%x F 0x%x N 0x%x " 1803 "S 0x%x H 0x%x CL 0x%x CH 0x%x\n", 1804 expect_drdy, cmd, feature, count, 1805 sector, head, cyl_low, cyl_hi)); 1806 return (FALSE); 1807 } 1808 1809 /* 1810 * wait for DRDY before continuing 1811 */ 1812 (void) ata_wait3(io_hdl2, ata_ctlp->ac_ioaddr2, 1813 ATS_DRDY, ATS_BSY, /* okay */ 1814 ATS_ERR, ATS_BSY, /* cmd failed */ 1815 ATS_DF, ATS_BSY, /* drive failed */ 1816 busy_wait); 1817 1818 /* read status to clear IRQ, and check for error */ 1819 status = ddi_get8(io_hdl1, ata_ctlp->ac_status); 1820 1821 if ((status & (ATS_BSY | ATS_DF | ATS_ERR)) == 0) 1822 return (TRUE); 1823 1824 if (!silent) { 1825 ADBG_ERROR(("ata_command status 0x%x error 0x%x " 1826 "DRDY 0x%x CMD 0x%x F 0x%x N 0x%x " 1827 "S 0x%x H 0x%x CL 0x%x CH 0x%x\n", 1828 ddi_get8(io_hdl1, ata_ctlp->ac_status), 1829 ddi_get8(io_hdl1, ata_ctlp->ac_error), 1830 expect_drdy, cmd, feature, count, 1831 sector, head, cyl_low, cyl_hi)); 1832 } 1833 return (FALSE); 1834 } 1835 1836 1837 1838 /* 1839 * 1840 * Issue a SET FEATURES command 1841 * 1842 */ 1843 1844 int 1845 ata_set_feature( 1846 ata_ctl_t *ata_ctlp, 1847 ata_drv_t *ata_drvp, 1848 uchar_t feature, 1849 uchar_t value) 1850 { 1851 int rc; 1852 1853 rc = ata_command(ata_ctlp, ata_drvp, TRUE, TRUE, ata_set_feature_wait, 1854 ATC_SET_FEAT, feature, value, 0, 0, 0, 0); 1855 /* feature, count, sector, head, cyl_low, cyl_hi */ 1856 1857 if (rc) { 1858 return (TRUE); 1859 } 1860 1861 ADBG_ERROR(("?ata_set_feature: (0x%x,0x%x) failed\n", feature, value)); 1862 return (FALSE); 1863 } 1864 1865 1866 1867 /* 1868 * 1869 * Issue a FLUSH CACHE command 1870 * 1871 */ 1872 1873 static int 1874 ata_flush_cache( 1875 ata_ctl_t *ata_ctlp, 1876 ata_drv_t *ata_drvp) 1877 { 1878 /* this command is optional so fail silently */ 1879 return (ata_command(ata_ctlp, ata_drvp, TRUE, TRUE, 1880 ata_flush_cache_wait, 1881 ATC_FLUSH_CACHE, 0, 0, 0, 0, 0, 0)); 1882 } 1883 1884 /* 1885 * ata_setup_ioaddr() 1886 * 1887 * Map the device registers and return the handles. 1888 * 1889 * If this is a ISA-ATA controller then only two handles are 1890 * initialized and returned. 1891 * 1892 * If this is a PCI-IDE controller than a third handle (for the 1893 * PCI-IDE Bus Mastering registers) is initialized and returned. 1894 * 1895 */ 1896 1897 static int 1898 ata_setup_ioaddr( 1899 dev_info_t *dip, 1900 ddi_acc_handle_t *handle1p, 1901 caddr_t *addr1p, 1902 ddi_acc_handle_t *handle2p, 1903 caddr_t *addr2p, 1904 ddi_acc_handle_t *bm_hdlp, 1905 caddr_t *bm_addrp) 1906 { 1907 ddi_device_acc_attr_t dev_attr; 1908 int rnumber; 1909 int rc; 1910 off_t regsize; 1911 1912 /* 1913 * Make certain the controller is enabled and its regs are map-able 1914 * 1915 */ 1916 rc = ddi_dev_regsize(dip, 0, ®size); 1917 if (rc != DDI_SUCCESS || regsize <= AT_CMD) { 1918 ADBG_INIT(("ata_setup_ioaddr(1): rc %d regsize %lld\n", 1919 rc, (long long)regsize)); 1920 return (FALSE); 1921 } 1922 1923 rc = ddi_dev_regsize(dip, 1, ®size); 1924 if (rc != DDI_SUCCESS || regsize <= AT_ALTSTATUS) { 1925 ADBG_INIT(("ata_setup_ioaddr(2): rc %d regsize %lld\n", 1926 rc, (long long)regsize)); 1927 return (FALSE); 1928 } 1929 1930 /* 1931 * setup the device attribute structure for little-endian, 1932 * strict ordering access. 1933 */ 1934 dev_attr.devacc_attr_version = DDI_DEVICE_ATTR_V0; 1935 dev_attr.devacc_attr_endian_flags = DDI_STRUCTURE_LE_ACC; 1936 dev_attr.devacc_attr_dataorder = DDI_STRICTORDER_ACC; 1937 1938 *handle1p = NULL; 1939 *handle2p = NULL; 1940 *bm_hdlp = NULL; 1941 1942 /* 1943 * Determine whether this is a ISA, PNP-ISA, or PCI-IDE device 1944 */ 1945 if (ddi_prop_exists(DDI_DEV_T_ANY, dip, DDI_PROP_DONTPASS, "pnp-csn")) { 1946 /* it's PNP-ISA, skip over the extra reg tuple */ 1947 rnumber = 1; 1948 goto not_pciide; 1949 } 1950 1951 /* else, it's ISA or PCI-IDE, check further */ 1952 rnumber = 0; 1953 1954 if (!ata_is_pci(dip)) { 1955 /* 1956 * If it's not a PCI-IDE, there are only two reg tuples 1957 * and the first one contains the I/O base (170 or 1f0) 1958 * rather than the controller instance number. 1959 */ 1960 ADBG_TRACE(("ata_setup_ioaddr !pci-ide\n")); 1961 goto not_pciide; 1962 } 1963 1964 1965 /* 1966 * Map the correct half of the PCI-IDE Bus Master registers. 1967 * There's a single BAR that maps these registers for both 1968 * controller's in a dual-controller chip and it's upto my 1969 * parent nexus, pciide, to adjust which (based on my instance 1970 * number) half this call maps. 1971 */ 1972 rc = ddi_dev_regsize(dip, 2, ®size); 1973 if (rc != DDI_SUCCESS || regsize < 8) { 1974 ADBG_INIT(("ata_setup_ioaddr(3): rc %d regsize %lld\n", 1975 rc, (long long)regsize)); 1976 goto not_pciide; 1977 } 1978 1979 rc = ddi_regs_map_setup(dip, 2, bm_addrp, 0, 0, &dev_attr, bm_hdlp); 1980 1981 if (rc != DDI_SUCCESS) { 1982 /* map failed, try to use in non-pci-ide mode */ 1983 ADBG_WARN(("ata_setup_ioaddr bus master map failed, rc=0x%x\n", 1984 rc)); 1985 *bm_hdlp = NULL; 1986 } 1987 1988 not_pciide: 1989 /* 1990 * map the lower command block registers 1991 */ 1992 1993 rc = ddi_regs_map_setup(dip, rnumber, addr1p, 0, 0, &dev_attr, 1994 handle1p); 1995 1996 if (rc != DDI_SUCCESS) { 1997 cmn_err(CE_WARN, "ata: reg tuple 0 map failed, rc=0x%x\n", rc); 1998 goto out1; 1999 } 2000 2001 /* 2002 * If the controller is being used in compatibility mode 2003 * via /devices/isa/ata@1,{1f0,1f0}/..., the reg property 2004 * will specify zeros for the I/O ports for the PCI 2005 * instance. 2006 */ 2007 if (*addr1p == 0) { 2008 ADBG_TRACE(("ata_setup_ioaddr ioaddr1 0\n")); 2009 goto out2; 2010 } 2011 2012 /* 2013 * map the upper control block registers 2014 */ 2015 rc = ddi_regs_map_setup(dip, rnumber + 1, addr2p, 0, 0, &dev_attr, 2016 handle2p); 2017 if (rc == DDI_SUCCESS) 2018 return (TRUE); 2019 2020 cmn_err(CE_WARN, "ata: reg tuple 1 map failed, rc=0x%x", rc); 2021 2022 out2: 2023 if (*handle1p != NULL) { 2024 ddi_regs_map_free(handle1p); 2025 *handle1p = NULL; 2026 } 2027 2028 out1: 2029 if (*bm_hdlp != NULL) { 2030 ddi_regs_map_free(bm_hdlp); 2031 *bm_hdlp = NULL; 2032 } 2033 return (FALSE); 2034 2035 } 2036 2037 /* 2038 * 2039 * Currently, the only supported controllers are ones which 2040 * support the SFF-8038 Bus Mastering spec. 2041 * 2042 * Check the parent node's IEEE 1275 class-code property to 2043 * determine if it's an PCI-IDE instance which supports SFF-8038 2044 * Bus Mastering. It's perfectly valid to have a PCI-IDE controller 2045 * that doesn't do Bus Mastering. In that case, my interrupt handler 2046 * only uses the interrupt latch bit in PCI-IDE status register. 2047 * The assumption is that the programming interface byte of the 2048 * class-code property reflects the bus master DMA capability of 2049 * the controller. 2050 * 2051 * Whether the drive support supports the DMA option still needs 2052 * to be checked later. Each individual request also has to be 2053 * checked for alignment and size to decide whether to use the 2054 * DMA transfer mode. 2055 */ 2056 2057 static void 2058 ata_init_pciide( 2059 dev_info_t *dip, 2060 ata_ctl_t *ata_ctlp) 2061 { 2062 uint_t class_code; 2063 uchar_t status; 2064 2065 ata_cntrl_DMA_sel_msg = NULL; 2066 2067 if (ata_ctlp->ac_bmhandle == NULL) { 2068 ata_ctlp->ac_pciide = FALSE; 2069 ata_ctlp->ac_pciide_bm = FALSE; 2070 ata_cntrl_DMA_sel_msg = "cntrl not Bus Master DMA capable"; 2071 return; 2072 } 2073 2074 /* 2075 * check if it's a known bogus PCI-IDE chip 2076 */ 2077 if (ata_check_pciide_blacklist(dip, ATA_BL_BOGUS)) { 2078 ADBG_WARN(("ata_setup_ioaddr pci-ide blacklist\n")); 2079 ata_ctlp->ac_pciide = FALSE; 2080 ata_ctlp->ac_pciide_bm = FALSE; 2081 ata_cntrl_DMA_sel_msg = "cntrl blacklisted"; 2082 return; 2083 } 2084 ata_ctlp->ac_pciide = TRUE; 2085 2086 if (ata_check_pciide_blacklist(dip, ATA_BL_BMSTATREG_PIO_BROKEN)) { 2087 ata_ctlp->ac_flags |= AC_BMSTATREG_PIO_BROKEN; 2088 } 2089 2090 /* 2091 * check for a PCI-IDE chip with a broken DMA engine 2092 */ 2093 if (ata_check_pciide_blacklist(dip, ATA_BL_NODMA)) { 2094 ata_ctlp->ac_pciide_bm = FALSE; 2095 ata_cntrl_DMA_sel_msg = 2096 "cntrl blacklisted/DMA engine broken"; 2097 return; 2098 } 2099 2100 /* 2101 * Check the Programming Interface register to determine 2102 * if this device supports PCI-IDE Bus Mastering. Some PCI-IDE 2103 * devices don't support Bus Mastering or DMA. 2104 * Since we are dealing with pre-qualified pci-ide controller, 2105 * check programming interface byte only. 2106 */ 2107 2108 class_code = ddi_prop_get_int(DDI_DEV_T_ANY, ddi_get_parent(dip), 2109 DDI_PROP_DONTPASS, "class-code", 0); 2110 if ((class_code & PCIIDE_BM_CAP_MASK) != PCIIDE_BM_CAP_MASK) { 2111 ata_ctlp->ac_pciide_bm = FALSE; 2112 ata_cntrl_DMA_sel_msg = 2113 "cntrl not Bus Master DMA capable"; 2114 return; 2115 } 2116 2117 /* 2118 * Avoid doing DMA on "simplex" chips which share hardware 2119 * between channels 2120 */ 2121 status = ddi_get8(ata_ctlp->ac_bmhandle, 2122 (uchar_t *)ata_ctlp->ac_bmaddr + PCIIDE_BMISX_REG); 2123 /* 2124 * Some motherboards have CSB5's that are wired "to emulate CSB4 mode". 2125 * In such a mode, the simplex bit is asserted, but in fact testing 2126 * on such a motherboard has shown that the devices are not simplex 2127 * -- DMA can be used on both channels concurrently with no special 2128 * considerations. For chips like this, we have the ATA_BL_NO_SIMPLEX 2129 * flag set to indicate that the value of the simplex bit can be 2130 * ignored. 2131 */ 2132 2133 if (status & PCIIDE_BMISX_SIMPLEX) { 2134 if (ata_check_pciide_blacklist(dip, ATA_BL_NO_SIMPLEX)) { 2135 cmn_err(CE_WARN, "Ignoring false simplex bit \n"); 2136 2137 } else { 2138 2139 int simplex_dma_channel, *rp, proplen, channel; 2140 int dma_on = FALSE; 2141 2142 /* 2143 * By default,use DMA on channel 0 and PIO on channel 2144 * 1. This can be switched by setting 2145 * ata-simplex-dma-channel to: 2146 * 0 DMA on channel 0 (default without this 2147 * property) 2148 * 1 DMA on channel 1 2149 * any other value: DMA off on both channels. 2150 */ 2151 simplex_dma_channel = ata_prop_lookup_int(DDI_DEV_T_ANY, 2152 ata_ctlp->ac_dip, 0, "ata-simplex-dma-channel", 0); 2153 2154 if (ddi_prop_lookup_int_array(DDI_DEV_T_ANY, 2155 ata_ctlp->ac_dip, DDI_PROP_DONTPASS, "reg", &rp, 2156 (uint_t *)&proplen) == DDI_PROP_SUCCESS) { 2157 2158 channel = *rp; 2159 ddi_prop_free(rp); 2160 2161 if (simplex_dma_channel == channel) { 2162 cmn_err(CE_CONT, "?ata: simplex " 2163 "controller. DMA on channel" 2164 " %d PIO on channel %d", 2165 channel, channel ? 0:1); 2166 dma_on = TRUE; 2167 } else { 2168 ata_cntrl_DMA_sel_msg = 2169 "simplex controller"; 2170 } 2171 } 2172 2173 if (dma_on == FALSE) { 2174 ata_ctlp->ac_pciide_bm = FALSE; 2175 2176 return; 2177 } 2178 } 2179 } 2180 2181 /* 2182 * It's a compatible PCI-IDE Bus Mastering controller, 2183 * allocate and map the DMA Scatter/Gather list (PRDE table). 2184 */ 2185 if (ata_pciide_alloc(dip, ata_ctlp)) 2186 ata_ctlp->ac_pciide_bm = TRUE; 2187 else { 2188 ata_ctlp->ac_pciide_bm = FALSE; 2189 ata_cntrl_DMA_sel_msg = "unable to init DMA S/G list"; 2190 } 2191 } 2192 2193 /* 2194 * 2195 * Determine whether to enable DMA support for this drive. 2196 * The controller and the drive both have to support DMA. 2197 * The controller's capabilities were already checked in 2198 * ata_init_pciide(), now just check the drive's capabilities. 2199 * 2200 */ 2201 2202 static int 2203 ata_init_drive_pcidma( 2204 ata_ctl_t *ata_ctlp, 2205 ata_drv_t *ata_drvp, 2206 dev_info_t *tdip) 2207 { 2208 boolean_t dma; 2209 boolean_t cd_dma; 2210 boolean_t disk_dma; 2211 boolean_t atapi_dma; 2212 int ata_options; 2213 2214 ata_dev_DMA_sel_msg = NULL; 2215 2216 if (ata_ctlp->ac_pciide_bm != TRUE) { 2217 ata_dev_DMA_sel_msg = 2218 "controller is not Bus Master capable"; 2219 2220 return (ATA_DMA_OFF); 2221 } 2222 2223 ata_options = ddi_prop_get_int(DDI_DEV_T_ANY, ata_ctlp->ac_dip, 2224 0, "ata-options", 0); 2225 2226 if (!(ata_options & ATA_OPTIONS_DMA)) { 2227 /* 2228 * Either the ata-options property was not found or 2229 * DMA is not enabled by this property 2230 */ 2231 ata_dev_DMA_sel_msg = 2232 "disabled by \"ata-options\" property"; 2233 2234 return (ATA_DMA_OFF); 2235 } 2236 2237 if (ata_check_drive_blacklist(&ata_drvp->ad_id, ATA_BL_NODMA)) { 2238 ata_dev_DMA_sel_msg = "device not DMA capable; blacklisted"; 2239 2240 return (ATA_DMA_OFF); 2241 } 2242 2243 /* 2244 * DMA mode is mandatory on ATA-3 (or newer) drives but is 2245 * optional on ATA-2 (or older) drives. 2246 * 2247 * On ATA-2 drives the ai_majorversion word will probably 2248 * be 0xffff or 0x0000, check the (now obsolete) DMA bit in 2249 * the capabilities word instead. The order of these tests 2250 * is important since an ATA-3 drive doesn't have to set 2251 * the DMA bit in the capabilities word. 2252 * 2253 */ 2254 2255 if (!((ata_drvp->ad_id.ai_majorversion & 0x8000) == 0 && 2256 ata_drvp->ad_id.ai_majorversion >= (1 << 2)) && 2257 !(ata_drvp->ad_id.ai_cap & ATAC_DMA_SUPPORT)) { 2258 ata_dev_DMA_sel_msg = "device not DMA capable"; 2259 2260 return (ATA_DMA_OFF); 2261 } 2262 2263 /* 2264 * Disable DMA for ATAPI devices on controllers known to 2265 * have trouble with ATAPI DMA 2266 */ 2267 2268 if (ATAPIDRV(ata_drvp)) { 2269 if (ata_check_pciide_blacklist(ata_ctlp->ac_dip, 2270 ATA_BL_ATAPI_NODMA)) { 2271 ata_dev_DMA_sel_msg = 2272 "controller incapable of DMA for ATAPI device"; 2273 2274 return (ATA_DMA_OFF); 2275 } 2276 } 2277 dma = ata_prop_lookup_int(DDI_DEV_T_ANY, tdip, 2278 0, "ata-dma-enabled", TRUE); 2279 disk_dma = ata_prop_lookup_int(DDI_DEV_T_ANY, tdip, 2280 0, "ata-disk-dma-enabled", TRUE); 2281 cd_dma = ata_prop_lookup_int(DDI_DEV_T_ANY, tdip, 2282 0, "atapi-cd-dma-enabled", FALSE); 2283 atapi_dma = ata_prop_lookup_int(DDI_DEV_T_ANY, tdip, 2284 0, "atapi-other-dma-enabled", TRUE); 2285 2286 if (dma == FALSE) { 2287 cmn_err(CE_CONT, "?ata_init_drive_pcidma: " 2288 "DMA disabled by \"ata-dma-enabled\" property"); 2289 ata_dev_DMA_sel_msg = "disabled by prop ata-dma-enabled"; 2290 2291 return (ATA_DMA_OFF); 2292 } 2293 2294 if (IS_CDROM(ata_drvp) == TRUE) { 2295 if (cd_dma == FALSE) { 2296 ata_dev_DMA_sel_msg = 2297 "disabled. Control with \"atapi-cd-dma-enabled\"" 2298 " property"; 2299 2300 return (ATA_DMA_OFF); 2301 } 2302 2303 } else if (ATAPIDRV(ata_drvp) == FALSE) { 2304 if (disk_dma == FALSE) { 2305 ata_dev_DMA_sel_msg = 2306 "disabled by \"ata-disk-dma-enabled\" property"; 2307 2308 return (ATA_DMA_OFF); 2309 } 2310 2311 } else if (atapi_dma == FALSE) { 2312 ata_dev_DMA_sel_msg = 2313 "disabled by \"atapi-other-dma-enabled\" property"; 2314 2315 return (ATA_DMA_OFF); 2316 } 2317 2318 return (ATA_DMA_ON); 2319 } 2320 2321 2322 2323 /* 2324 * this compare routine squeezes out extra blanks and 2325 * returns TRUE if p1 matches the leftmost substring of p2 2326 */ 2327 2328 static int 2329 ata_strncmp( 2330 char *p1, 2331 char *p2, 2332 int cnt) 2333 { 2334 2335 for (;;) { 2336 /* 2337 * skip over any extra blanks in both strings 2338 */ 2339 while (*p1 != '\0' && *p1 == ' ') 2340 p1++; 2341 2342 while (cnt != 0 && *p2 == ' ') { 2343 p2++; 2344 cnt--; 2345 } 2346 2347 /* 2348 * compare the two strings 2349 */ 2350 2351 if (cnt == 0 || *p1 != *p2) 2352 break; 2353 2354 while (cnt > 0 && *p1 == *p2) { 2355 p1++; 2356 p2++; 2357 cnt--; 2358 } 2359 2360 } 2361 2362 /* return TRUE if both strings ended at same point */ 2363 return ((*p1 == '\0') ? TRUE : FALSE); 2364 } 2365 2366 /* 2367 * Per PSARC/1997/281 create variant="atapi" property (if necessary) 2368 * on the target's dev_info node. Currently, the sd target driver 2369 * is the only driver which refers to this property. 2370 * 2371 * If the flag ata_id_debug is set also create the 2372 * the "ata" or "atapi" property on the target's dev_info node 2373 * 2374 */ 2375 2376 int 2377 ata_prop_create( 2378 dev_info_t *tgt_dip, 2379 ata_drv_t *ata_drvp, 2380 char *name) 2381 { 2382 int rc; 2383 2384 ADBG_TRACE(("ata_prop_create 0x%p 0x%p %s\n", tgt_dip, ata_drvp, name)); 2385 2386 if (strcmp("atapi", name) == 0) { 2387 rc = ndi_prop_update_string(DDI_DEV_T_NONE, tgt_dip, 2388 "variant", name); 2389 if (rc != DDI_PROP_SUCCESS) 2390 return (FALSE); 2391 } 2392 2393 if (!ata_id_debug) 2394 return (TRUE); 2395 2396 rc = ndi_prop_update_byte_array(DDI_DEV_T_NONE, tgt_dip, name, 2397 (uchar_t *)&ata_drvp->ad_id, sizeof (ata_drvp->ad_id)); 2398 if (rc != DDI_PROP_SUCCESS) { 2399 ADBG_ERROR(("ata_prop_create failed, rc=%d\n", rc)); 2400 } 2401 return (TRUE); 2402 } 2403 2404 2405 /* *********************************************************************** */ 2406 /* *********************************************************************** */ 2407 /* *********************************************************************** */ 2408 2409 /* 2410 * This state machine doesn't implement the ATAPI Optional Overlap 2411 * feature. You need that feature to efficiently support ATAPI 2412 * tape drives. See the 1394-ATA Tailgate spec (D97107), Figure 24, 2413 * for an example of how to add the necessary additional NextActions 2414 * and NextStates to this FSM and the atapi_fsm, in order to support 2415 * the Overlap Feature. 2416 */ 2417 2418 2419 uchar_t ata_ctlr_fsm_NextAction[ATA_CTLR_NSTATES][ATA_CTLR_NFUNCS] = { 2420 /* --------------------- next action --------------------- | - current - */ 2421 /* start0 --- start1 ---- intr ------ fini --- reset --- */ 2422 { AC_START, AC_START, AC_NADA, AC_NADA, AC_RESET_I }, /* idle */ 2423 { AC_BUSY, AC_BUSY, AC_INTR, AC_FINI, AC_RESET_A }, /* active0 */ 2424 { AC_BUSY, AC_BUSY, AC_INTR, AC_FINI, AC_RESET_A }, /* active1 */ 2425 }; 2426 2427 uchar_t ata_ctlr_fsm_NextState[ATA_CTLR_NSTATES][ATA_CTLR_NFUNCS] = { 2428 2429 /* --------------------- next state --------------------- | - current - */ 2430 /* start0 --- start1 ---- intr ------ fini --- reset --- */ 2431 { AS_ACTIVE0, AS_ACTIVE1, AS_IDLE, AS_IDLE, AS_IDLE }, /* idle */ 2432 { AS_ACTIVE0, AS_ACTIVE0, AS_ACTIVE0, AS_IDLE, AS_ACTIVE0 }, /* active0 */ 2433 { AS_ACTIVE1, AS_ACTIVE1, AS_ACTIVE1, AS_IDLE, AS_ACTIVE1 }, /* active1 */ 2434 }; 2435 2436 2437 static int 2438 ata_ctlr_fsm( 2439 uchar_t fsm_func, 2440 ata_ctl_t *ata_ctlp, 2441 ata_drv_t *ata_drvp, 2442 ata_pkt_t *ata_pktp, 2443 int *DoneFlgp) 2444 { 2445 uchar_t action; 2446 uchar_t current_state; 2447 uchar_t next_state; 2448 int rc; 2449 2450 current_state = ata_ctlp->ac_state; 2451 action = ata_ctlr_fsm_NextAction[current_state][fsm_func]; 2452 next_state = ata_ctlr_fsm_NextState[current_state][fsm_func]; 2453 2454 /* 2455 * Set the controller's new state 2456 */ 2457 ata_ctlp->ac_state = next_state; 2458 switch (action) { 2459 2460 case AC_BUSY: 2461 return (ATA_FSM_RC_BUSY); 2462 2463 case AC_NADA: 2464 return (ATA_FSM_RC_OKAY); 2465 2466 case AC_START: 2467 ASSERT(ata_ctlp->ac_active_pktp == NULL); 2468 ASSERT(ata_ctlp->ac_active_drvp == NULL); 2469 2470 ata_ctlp->ac_active_pktp = ata_pktp; 2471 ata_ctlp->ac_active_drvp = ata_drvp; 2472 2473 rc = (*ata_pktp->ap_start)(ata_ctlp, ata_drvp, ata_pktp); 2474 2475 if (rc == ATA_FSM_RC_BUSY) { 2476 /* the request didn't start, GHD will requeue it */ 2477 ata_ctlp->ac_state = AS_IDLE; 2478 ata_ctlp->ac_active_pktp = NULL; 2479 ata_ctlp->ac_active_drvp = NULL; 2480 } 2481 return (rc); 2482 2483 case AC_INTR: 2484 ASSERT(ata_ctlp->ac_active_pktp != NULL); 2485 ASSERT(ata_ctlp->ac_active_drvp != NULL); 2486 2487 ata_drvp = ata_ctlp->ac_active_drvp; 2488 ata_pktp = ata_ctlp->ac_active_pktp; 2489 return ((*ata_pktp->ap_intr)(ata_ctlp, ata_drvp, ata_pktp)); 2490 2491 case AC_RESET_A: /* Reset, controller active */ 2492 ASSERT(ata_ctlp->ac_active_pktp != NULL); 2493 ASSERT(ata_ctlp->ac_active_drvp != NULL); 2494 2495 /* clean up the active request */ 2496 ata_pktp = ata_ctlp->ac_active_pktp; 2497 ata_pktp->ap_flags |= AP_DEV_RESET | AP_BUS_RESET; 2498 2499 /* halt the DMA engine */ 2500 if (ata_pktp->ap_pciide_dma) { 2501 ata_pciide_dma_stop(ata_ctlp); 2502 (void) ata_pciide_status_clear(ata_ctlp); 2503 } 2504 2505 /* Do a Software Reset to unwedge the bus */ 2506 if (!ata_software_reset(ata_ctlp)) { 2507 return (ATA_FSM_RC_BUSY); 2508 } 2509 2510 /* Then send a DEVICE RESET cmd to each ATAPI device */ 2511 atapi_fsm_reset(ata_ctlp); 2512 return (ATA_FSM_RC_FINI); 2513 2514 case AC_RESET_I: /* Reset, controller idle */ 2515 /* Do a Software Reset to unwedge the bus */ 2516 if (!ata_software_reset(ata_ctlp)) { 2517 return (ATA_FSM_RC_BUSY); 2518 } 2519 2520 /* Then send a DEVICE RESET cmd to each ATAPI device */ 2521 atapi_fsm_reset(ata_ctlp); 2522 return (ATA_FSM_RC_OKAY); 2523 2524 case AC_FINI: 2525 break; 2526 } 2527 2528 /* 2529 * AC_FINI, check ARQ needs to be started or finished 2530 */ 2531 2532 ASSERT(action == AC_FINI); 2533 ASSERT(ata_ctlp->ac_active_pktp != NULL); 2534 ASSERT(ata_ctlp->ac_active_drvp != NULL); 2535 2536 /* 2537 * The active request is done now. 2538 * Disconnect the request from the controller and 2539 * add it to the done queue. 2540 */ 2541 ata_drvp = ata_ctlp->ac_active_drvp; 2542 ata_pktp = ata_ctlp->ac_active_pktp; 2543 2544 /* 2545 * If ARQ pkt is done, get ptr to original pkt and wrap it up. 2546 */ 2547 if (ata_pktp == ata_ctlp->ac_arq_pktp) { 2548 ata_pkt_t *arq_pktp; 2549 2550 ADBG_ARQ(("ata_ctlr_fsm 0x%p ARQ done\n", ata_ctlp)); 2551 2552 arq_pktp = ata_pktp; 2553 ata_pktp = ata_ctlp->ac_fault_pktp; 2554 ata_ctlp->ac_fault_pktp = NULL; 2555 if (arq_pktp->ap_flags & (AP_ERROR | AP_BUS_RESET)) 2556 ata_pktp->ap_flags |= AP_ARQ_ERROR; 2557 else 2558 ata_pktp->ap_flags |= AP_ARQ_OKAY; 2559 goto all_done; 2560 } 2561 2562 2563 #define AP_ARQ_NEEDED (AP_ARQ_ON_ERROR | AP_GOT_STATUS | AP_ERROR) 2564 2565 /* 2566 * Start ARQ pkt if necessary 2567 */ 2568 if ((ata_pktp->ap_flags & AP_ARQ_NEEDED) == AP_ARQ_NEEDED && 2569 (ata_pktp->ap_status & ATS_ERR)) { 2570 2571 /* set controller state back to active */ 2572 ata_ctlp->ac_state = current_state; 2573 2574 /* try to start the ARQ pkt */ 2575 rc = ata_start_arq(ata_ctlp, ata_drvp, ata_pktp); 2576 2577 if (rc == ATA_FSM_RC_BUSY) { 2578 ADBG_ARQ(("ata_ctlr_fsm 0x%p ARQ BUSY\n", ata_ctlp)); 2579 /* let the target driver handle the problem */ 2580 ata_ctlp->ac_state = AS_IDLE; 2581 ata_ctlp->ac_active_pktp = NULL; 2582 ata_ctlp->ac_active_drvp = NULL; 2583 ata_ctlp->ac_fault_pktp = NULL; 2584 goto all_done; 2585 } 2586 2587 ADBG_ARQ(("ata_ctlr_fsm 0x%p ARQ started\n", ata_ctlp)); 2588 return (rc); 2589 } 2590 2591 /* 2592 * Normal completion, no error status, and not an ARQ pkt, 2593 * just fall through. 2594 */ 2595 2596 all_done: 2597 2598 /* 2599 * wrap everything up and tie a ribbon around it 2600 */ 2601 ata_ctlp->ac_active_pktp = NULL; 2602 ata_ctlp->ac_active_drvp = NULL; 2603 if (APKT2GCMD(ata_pktp) != (gcmd_t *)0) { 2604 ghd_complete(&ata_ctlp->ac_ccc, APKT2GCMD(ata_pktp)); 2605 if (DoneFlgp) 2606 *DoneFlgp = TRUE; 2607 } 2608 2609 return (ATA_FSM_RC_OKAY); 2610 } 2611 2612 2613 static int 2614 ata_start_arq( 2615 ata_ctl_t *ata_ctlp, 2616 ata_drv_t *ata_drvp, 2617 ata_pkt_t *ata_pktp) 2618 { 2619 ata_pkt_t *arq_pktp; 2620 int bytes; 2621 uint_t senselen; 2622 2623 ADBG_ARQ(("ata_start_arq 0x%p ARQ needed\n", ata_ctlp)); 2624 2625 /* 2626 * Determine just the size of the Request Sense Data buffer within 2627 * the scsi_arq_status structure. 2628 */ 2629 #define SIZEOF_ARQ_HEADER (sizeof (struct scsi_arq_status) \ 2630 - sizeof (struct scsi_extended_sense)) 2631 senselen = ata_pktp->ap_statuslen - SIZEOF_ARQ_HEADER; 2632 ASSERT(senselen > 0); 2633 2634 2635 /* save ptr to original pkt */ 2636 ata_ctlp->ac_fault_pktp = ata_pktp; 2637 2638 /* switch the controller's active pkt to the ARQ pkt */ 2639 arq_pktp = ata_ctlp->ac_arq_pktp; 2640 ata_ctlp->ac_active_pktp = arq_pktp; 2641 2642 /* finish initializing the ARQ CDB */ 2643 ata_ctlp->ac_arq_cdb[1] = ata_drvp->ad_lun << 4; 2644 ata_ctlp->ac_arq_cdb[4] = (uchar_t)senselen; 2645 2646 /* finish initializing the ARQ pkt */ 2647 arq_pktp->ap_v_addr = (caddr_t)&ata_pktp->ap_scbp->sts_sensedata; 2648 2649 arq_pktp->ap_resid = senselen; 2650 arq_pktp->ap_flags = AP_ATAPI | AP_READ; 2651 arq_pktp->ap_cdb_pad = 2652 ((unsigned)(ata_drvp->ad_cdb_len - arq_pktp->ap_cdb_len)) >> 1; 2653 2654 bytes = min(senselen, ATAPI_MAX_BYTES_PER_DRQ); 2655 arq_pktp->ap_hicyl = (uchar_t)(bytes >> 8); 2656 arq_pktp->ap_lwcyl = (uchar_t)bytes; 2657 2658 /* 2659 * This packet is shared by all drives on this controller 2660 * therefore we need to init the drive number on every ARQ. 2661 */ 2662 arq_pktp->ap_hd = ata_drvp->ad_drive_bits; 2663 2664 /* start it up */ 2665 return ((*arq_pktp->ap_start)(ata_ctlp, ata_drvp, arq_pktp)); 2666 } 2667 2668 /* 2669 * 2670 * reset the bus 2671 * 2672 */ 2673 2674 static int 2675 ata_reset_bus( 2676 ata_ctl_t *ata_ctlp) 2677 { 2678 int watchdog; 2679 uchar_t drive; 2680 int rc = FALSE; 2681 uchar_t fsm_func; 2682 int DoneFlg = FALSE; 2683 2684 /* 2685 * Do a Software Reset to unwedge the bus, and send 2686 * ATAPI DEVICE RESET to each ATAPI drive. 2687 */ 2688 fsm_func = ATA_FSM_RESET; 2689 for (watchdog = ata_reset_bus_watchdog; watchdog > 0; watchdog--) { 2690 switch (ata_ctlr_fsm(fsm_func, ata_ctlp, NULL, NULL, 2691 &DoneFlg)) { 2692 case ATA_FSM_RC_OKAY: 2693 rc = TRUE; 2694 goto fsm_done; 2695 2696 case ATA_FSM_RC_BUSY: 2697 return (FALSE); 2698 2699 case ATA_FSM_RC_INTR: 2700 fsm_func = ATA_FSM_INTR; 2701 rc = TRUE; 2702 continue; 2703 2704 case ATA_FSM_RC_FINI: 2705 fsm_func = ATA_FSM_FINI; 2706 rc = TRUE; 2707 continue; 2708 } 2709 } 2710 ADBG_WARN(("ata_reset_bus: watchdog\n")); 2711 2712 fsm_done: 2713 2714 /* 2715 * Reinitialize the ATA drives 2716 */ 2717 for (drive = 0; drive < ATA_MAXTARG; drive++) { 2718 ata_drv_t *ata_drvp; 2719 2720 if ((ata_drvp = CTL2DRV(ata_ctlp, drive, 0)) == NULL) 2721 continue; 2722 2723 if (ATAPIDRV(ata_drvp)) 2724 continue; 2725 2726 /* 2727 * Reprogram the Read/Write Multiple block factor 2728 * and current geometry into the drive. 2729 */ 2730 if (!ata_disk_setup_parms(ata_ctlp, ata_drvp)) 2731 rc = FALSE; 2732 } 2733 2734 /* If DoneFlg is TRUE, it means that ghd_complete() function */ 2735 /* has been already called. In this case ignore any errors and */ 2736 /* return TRUE to the caller, otherwise return the value of rc */ 2737 /* to the caller */ 2738 if (DoneFlg) 2739 return (TRUE); 2740 else 2741 return (rc); 2742 } 2743 2744 2745 /* 2746 * 2747 * Low level routine to toggle the Software Reset bit 2748 * 2749 */ 2750 2751 static int 2752 ata_software_reset( 2753 ata_ctl_t *ata_ctlp) 2754 { 2755 ddi_acc_handle_t io_hdl1 = ata_ctlp->ac_iohandle1; 2756 ddi_acc_handle_t io_hdl2 = ata_ctlp->ac_iohandle2; 2757 hrtime_t deadline; 2758 uint_t usecs_left; 2759 2760 ADBG_TRACE(("ata_reset_bus entered\n")); 2761 2762 /* disable interrupts and turn the software reset bit on */ 2763 ddi_put8(io_hdl2, ata_ctlp->ac_devctl, (ATDC_D3 | ATDC_SRST)); 2764 2765 /* why 30 milliseconds, the ATA/ATAPI-4 spec says 5 usec. */ 2766 drv_usecwait(30000); 2767 2768 /* turn the software reset bit back off */ 2769 ddi_put8(io_hdl2, ata_ctlp->ac_devctl, ATDC_D3); 2770 2771 /* 2772 * Wait for the controller to assert BUSY status. 2773 * I don't think 300 msecs is correct. The ATA/ATAPI-4 2774 * spec says 400 nsecs, (and 2 msecs if device 2775 * was in sleep mode; but we don't put drives to sleep 2776 * so it probably doesn't matter). 2777 */ 2778 drv_usecwait(300000); 2779 2780 /* 2781 * If drive 0 exists the test for completion is simple 2782 */ 2783 deadline = gethrtime() + ((hrtime_t)31 * NANOSEC); 2784 2785 if (CTL2DRV(ata_ctlp, 0, 0)) { 2786 goto wait_for_not_busy; 2787 } 2788 2789 ASSERT(CTL2DRV(ata_ctlp, 1, 0) != NULL); 2790 2791 /* 2792 * This must be a single device configuration, with drive 1 2793 * only. This complicates the test for completion because 2794 * issuing the software reset just caused drive 1 to 2795 * deselect. With drive 1 deselected, if I just read the 2796 * status register to test the BSY bit I get garbage, but 2797 * I can't re-select drive 1 until I'm certain the BSY bit 2798 * is de-asserted. Catch-22. 2799 * 2800 * In ATA/ATAPI-4, rev 15, section 9.16.2, it says to handle 2801 * this situation like this: 2802 */ 2803 2804 /* give up if the drive doesn't settle within 31 seconds */ 2805 while (gethrtime() < deadline) { 2806 /* 2807 * delay 10msec each time around the loop 2808 */ 2809 drv_usecwait(10000); 2810 2811 /* 2812 * try to select drive 1 2813 */ 2814 ddi_put8(io_hdl1, ata_ctlp->ac_drvhd, ATDH_DRIVE1); 2815 2816 ddi_put8(io_hdl1, ata_ctlp->ac_sect, 0x55); 2817 ddi_put8(io_hdl1, ata_ctlp->ac_sect, 0xaa); 2818 if (ddi_get8(io_hdl1, ata_ctlp->ac_sect) != 0xaa) 2819 continue; 2820 2821 ddi_put8(io_hdl1, ata_ctlp->ac_count, 0x55); 2822 ddi_put8(io_hdl1, ata_ctlp->ac_count, 0xaa); 2823 if (ddi_get8(io_hdl1, ata_ctlp->ac_count) != 0xaa) 2824 continue; 2825 2826 goto wait_for_not_busy; 2827 } 2828 return (FALSE); 2829 2830 wait_for_not_busy: 2831 2832 /* 2833 * Now wait up to 31 seconds for BUSY to clear. 2834 */ 2835 usecs_left = (deadline - gethrtime()) / 1000; 2836 (void) ata_wait3(io_hdl2, ata_ctlp->ac_ioaddr2, 0, ATS_BSY, 2837 ATS_ERR, ATS_BSY, ATS_DF, ATS_BSY, usecs_left); 2838 2839 return (TRUE); 2840 } 2841 2842 /* 2843 * 2844 * DDI interrupt handler 2845 * 2846 */ 2847 2848 static uint_t 2849 ata_intr( 2850 caddr_t arg) 2851 { 2852 ata_ctl_t *ata_ctlp; 2853 int one_shot = 1; 2854 2855 ata_ctlp = (ata_ctl_t *)arg; 2856 2857 return (ghd_intr(&ata_ctlp->ac_ccc, (void *)&one_shot)); 2858 } 2859 2860 2861 /* 2862 * 2863 * GHD ccc_get_status callback 2864 * 2865 */ 2866 2867 static int 2868 ata_get_status( 2869 void *hba_handle, 2870 void *intr_status) 2871 { 2872 ata_ctl_t *ata_ctlp = (ata_ctl_t *)hba_handle; 2873 uchar_t status; 2874 2875 ADBG_TRACE(("ata_get_status entered\n")); 2876 2877 /* 2878 * ignore interrupts before ata_attach completes 2879 */ 2880 if (!(ata_ctlp->ac_flags & AC_ATTACHED)) 2881 return (FALSE); 2882 2883 /* 2884 * can't be interrupt pending if nothing active 2885 */ 2886 switch (ata_ctlp->ac_state) { 2887 case AS_IDLE: 2888 return (FALSE); 2889 case AS_ACTIVE0: 2890 case AS_ACTIVE1: 2891 ASSERT(ata_ctlp->ac_active_drvp != NULL); 2892 ASSERT(ata_ctlp->ac_active_pktp != NULL); 2893 break; 2894 } 2895 2896 /* 2897 * If this is a PCI-IDE controller, check the PCI-IDE controller's 2898 * interrupt status latch. But don't clear it yet. 2899 * 2900 * AC_BMSTATREG_PIO_BROKEN flag is used currently for 2901 * CMD chips with device id 0x646. Since the interrupt bit on 2902 * Bus master IDE register is not usable when in PIO mode, 2903 * this chip is treated as a legacy device for interrupt 2904 * indication. The following code for CMD 2905 * chips may need to be revisited when we enable support for dma. 2906 * 2907 * CHANGE: DMA is not disabled for these devices. BM intr bit is 2908 * checked only if there was DMA used or BM intr is useable on PIO, 2909 * else treat it as before - as legacy device. 2910 */ 2911 2912 if ((ata_ctlp->ac_pciide) && 2913 ((ata_ctlp->ac_pciide_bm != FALSE) && 2914 ((ata_ctlp->ac_active_pktp->ap_pciide_dma == TRUE) || 2915 !(ata_ctlp->ac_flags & AC_BMSTATREG_PIO_BROKEN)))) { 2916 2917 if (!ata_pciide_status_pending(ata_ctlp)) 2918 return (FALSE); 2919 } else { 2920 /* 2921 * Interrupts from legacy ATA/IDE controllers are 2922 * edge-triggered but the dumb legacy ATA/IDE controllers 2923 * and drives don't have an interrupt status bit. 2924 * 2925 * Use a one_shot variable to make sure we only return 2926 * one status per interrupt. 2927 */ 2928 if (intr_status != NULL) { 2929 int *one_shot = (int *)intr_status; 2930 2931 if (*one_shot == 1) 2932 *one_shot = 0; 2933 else 2934 return (FALSE); 2935 } 2936 } 2937 2938 /* check if device is still busy */ 2939 2940 status = ddi_get8(ata_ctlp->ac_iohandle2, ata_ctlp->ac_altstatus); 2941 if (status & ATS_BSY) 2942 return (FALSE); 2943 return (TRUE); 2944 } 2945 2946 2947 /* 2948 * 2949 * get the current status and clear the IRQ 2950 * 2951 */ 2952 2953 int 2954 ata_get_status_clear_intr( 2955 ata_ctl_t *ata_ctlp, 2956 ata_pkt_t *ata_pktp) 2957 { 2958 uchar_t status; 2959 2960 /* 2961 * Here's where we clear the PCI-IDE interrupt latch. If this 2962 * request used DMA mode then we also have to check and clear 2963 * the DMA error latch at the same time. 2964 */ 2965 2966 if (ata_pktp->ap_pciide_dma) { 2967 if (ata_pciide_status_dmacheck_clear(ata_ctlp)) 2968 ata_pktp->ap_flags |= AP_ERROR | AP_TRAN_ERROR; 2969 } else if ((ata_ctlp->ac_pciide) && 2970 !(ata_ctlp->ac_flags & AC_BMSTATREG_PIO_BROKEN)) { 2971 /* 2972 * Some requests don't use DMA mode and therefore won't 2973 * set the DMA error latch, but we still have to clear 2974 * the interrupt latch. 2975 * Controllers with broken BM intr in PIO mode do not go 2976 * through this path. 2977 */ 2978 (void) ata_pciide_status_clear(ata_ctlp); 2979 } 2980 2981 /* 2982 * this clears the drive's interrupt 2983 */ 2984 status = ddi_get8(ata_ctlp->ac_iohandle1, ata_ctlp->ac_status); 2985 ADBG_TRACE(("ata_get_status_clear_intr: 0x%x\n", status)); 2986 return (status); 2987 } 2988 2989 2990 2991 /* 2992 * 2993 * GHD interrupt handler 2994 * 2995 */ 2996 2997 /* ARGSUSED */ 2998 static void 2999 ata_process_intr( 3000 void *hba_handle, 3001 void *intr_status) 3002 { 3003 ata_ctl_t *ata_ctlp = (ata_ctl_t *)hba_handle; 3004 int watchdog; 3005 uchar_t fsm_func; 3006 int rc; 3007 3008 ADBG_TRACE(("ata_process_intr entered\n")); 3009 3010 /* 3011 * process the ATA or ATAPI interrupt 3012 */ 3013 3014 fsm_func = ATA_FSM_INTR; 3015 for (watchdog = ata_process_intr_watchdog; watchdog > 0; watchdog--) { 3016 rc = ata_ctlr_fsm(fsm_func, ata_ctlp, NULL, NULL, NULL); 3017 3018 switch (rc) { 3019 case ATA_FSM_RC_OKAY: 3020 return; 3021 3022 case ATA_FSM_RC_BUSY: /* wait for the next interrupt */ 3023 return; 3024 3025 case ATA_FSM_RC_INTR: /* re-invoke the FSM */ 3026 fsm_func = ATA_FSM_INTR; 3027 break; 3028 3029 case ATA_FSM_RC_FINI: /* move a request to done Q */ 3030 fsm_func = ATA_FSM_FINI; 3031 break; 3032 } 3033 } 3034 ADBG_WARN(("ata_process_intr: watchdog\n")); 3035 } 3036 3037 3038 3039 /* 3040 * 3041 * GHD ccc_hba_start callback 3042 * 3043 */ 3044 3045 static int 3046 ata_hba_start( 3047 void *hba_handle, 3048 gcmd_t *gcmdp) 3049 { 3050 ata_ctl_t *ata_ctlp; 3051 ata_drv_t *ata_drvp; 3052 ata_pkt_t *ata_pktp; 3053 uchar_t fsm_func; 3054 int request_started; 3055 int watchdog; 3056 3057 ADBG_TRACE(("ata_hba_start entered\n")); 3058 3059 ata_ctlp = (ata_ctl_t *)hba_handle; 3060 3061 if (ata_ctlp->ac_active_drvp != NULL) { 3062 ADBG_WARN(("ata_hba_start drvp not null\n")); 3063 return (FALSE); 3064 } 3065 if (ata_ctlp->ac_active_pktp != NULL) { 3066 ADBG_WARN(("ata_hba_start pktp not null\n")); 3067 return (FALSE); 3068 } 3069 3070 ata_pktp = GCMD2APKT(gcmdp); 3071 ata_drvp = GCMD2DRV(gcmdp); 3072 3073 /* 3074 * which drive? 3075 */ 3076 if (ata_drvp->ad_targ == 0) 3077 fsm_func = ATA_FSM_START0; 3078 else 3079 fsm_func = ATA_FSM_START1; 3080 3081 /* 3082 * start the request 3083 */ 3084 request_started = FALSE; 3085 for (watchdog = ata_hba_start_watchdog; watchdog > 0; watchdog--) { 3086 switch (ata_ctlr_fsm(fsm_func, ata_ctlp, ata_drvp, ata_pktp, 3087 NULL)) { 3088 case ATA_FSM_RC_OKAY: 3089 request_started = TRUE; 3090 goto fsm_done; 3091 3092 case ATA_FSM_RC_BUSY: 3093 /* if first time, tell GHD to requeue the request */ 3094 goto fsm_done; 3095 3096 case ATA_FSM_RC_INTR: 3097 /* 3098 * The start function polled for the next 3099 * bus phase, now fake an interrupt to process 3100 * the next action. 3101 */ 3102 request_started = TRUE; 3103 fsm_func = ATA_FSM_INTR; 3104 ata_drvp = NULL; 3105 ata_pktp = NULL; 3106 break; 3107 3108 case ATA_FSM_RC_FINI: /* move request to the done queue */ 3109 request_started = TRUE; 3110 fsm_func = ATA_FSM_FINI; 3111 ata_drvp = NULL; 3112 ata_pktp = NULL; 3113 break; 3114 } 3115 } 3116 ADBG_WARN(("ata_hba_start: watchdog\n")); 3117 3118 fsm_done: 3119 return (request_started); 3120 3121 } 3122 3123 static int 3124 ata_check_pciide_blacklist( 3125 dev_info_t *dip, 3126 uint_t flags) 3127 { 3128 ushort_t vendorid; 3129 ushort_t deviceid; 3130 pcibl_t *blp; 3131 int *propp; 3132 uint_t count; 3133 int rc; 3134 3135 3136 vendorid = ddi_prop_get_int(DDI_DEV_T_ANY, ddi_get_parent(dip), 3137 DDI_PROP_DONTPASS, "vendor-id", 0); 3138 deviceid = ddi_prop_get_int(DDI_DEV_T_ANY, ddi_get_parent(dip), 3139 DDI_PROP_DONTPASS, "device-id", 0); 3140 3141 /* 3142 * first check for a match in the "pci-ide-blacklist" property 3143 */ 3144 rc = ddi_prop_lookup_int_array(DDI_DEV_T_ANY, dip, 0, 3145 "pci-ide-blacklist", &propp, &count); 3146 3147 if (rc == DDI_PROP_SUCCESS) { 3148 count = (count * sizeof (uint_t)) / sizeof (pcibl_t); 3149 blp = (pcibl_t *)propp; 3150 while (count--) { 3151 /* check for matching ID */ 3152 if ((vendorid & blp->b_vmask) 3153 != (blp->b_vendorid & blp->b_vmask)) { 3154 blp++; 3155 continue; 3156 } 3157 if ((deviceid & blp->b_dmask) 3158 != (blp->b_deviceid & blp->b_dmask)) { 3159 blp++; 3160 continue; 3161 } 3162 3163 /* got a match */ 3164 if (blp->b_flags & flags) { 3165 ddi_prop_free(propp); 3166 return (TRUE); 3167 } else { 3168 ddi_prop_free(propp); 3169 return (FALSE); 3170 } 3171 } 3172 ddi_prop_free(propp); 3173 } 3174 3175 /* 3176 * then check the built-in blacklist 3177 */ 3178 for (blp = ata_pciide_blacklist; blp->b_vendorid; blp++) { 3179 if ((vendorid & blp->b_vmask) != blp->b_vendorid) 3180 continue; 3181 if ((deviceid & blp->b_dmask) != blp->b_deviceid) 3182 continue; 3183 if (!(blp->b_flags & flags)) 3184 continue; 3185 return (TRUE); 3186 } 3187 return (FALSE); 3188 } 3189 3190 int 3191 ata_check_drive_blacklist( 3192 struct ata_id *aidp, 3193 uint_t flags) 3194 { 3195 atabl_t *blp; 3196 3197 for (blp = ata_drive_blacklist; blp->b_model != NULL; blp++) { 3198 if (!ata_strncmp(blp->b_model, aidp->ai_model, 3199 sizeof (aidp->ai_model))) 3200 continue; 3201 if (blp->b_fw != NULL) { 3202 if (!ata_strncmp(blp->b_fw, aidp->ai_fw, 3203 sizeof (aidp->ai_fw))) 3204 continue; 3205 } 3206 if (blp->b_flags & flags) 3207 return (TRUE); 3208 return (FALSE); 3209 } 3210 return (FALSE); 3211 } 3212 3213 /* 3214 * Queue a request to perform some sort of internally 3215 * generated command. When this request packet reaches 3216 * the front of the queue (*func)() is invoked. 3217 * 3218 */ 3219 3220 int 3221 ata_queue_cmd( 3222 int (*func)(ata_ctl_t *, ata_drv_t *, ata_pkt_t *), 3223 void *arg, 3224 ata_ctl_t *ata_ctlp, 3225 ata_drv_t *ata_drvp, 3226 gtgt_t *gtgtp) 3227 { 3228 ata_pkt_t *ata_pktp; 3229 gcmd_t *gcmdp; 3230 int rc; 3231 3232 if (!(gcmdp = ghd_gcmd_alloc(gtgtp, sizeof (*ata_pktp), TRUE))) { 3233 ADBG_ERROR(("atapi_id_update alloc failed\n")); 3234 return (FALSE); 3235 } 3236 3237 3238 /* set the back ptr from the ata_pkt to the gcmd_t */ 3239 ata_pktp = GCMD2APKT(gcmdp); 3240 ata_pktp->ap_gcmdp = gcmdp; 3241 ata_pktp->ap_hd = ata_drvp->ad_drive_bits; 3242 ata_pktp->ap_bytes_per_block = ata_drvp->ad_bytes_per_block; 3243 3244 /* 3245 * over-ride the default start function 3246 */ 3247 ata_pktp = GCMD2APKT(gcmdp); 3248 ata_pktp->ap_start = func; 3249 ata_pktp->ap_complete = NULL; 3250 ata_pktp->ap_v_addr = (caddr_t)arg; 3251 3252 /* 3253 * add it to the queue, when it gets to the front the 3254 * ap_start function is called. 3255 */ 3256 rc = ghd_transport(&ata_ctlp->ac_ccc, gcmdp, gcmdp->cmd_gtgtp, 3257 0, TRUE, NULL); 3258 3259 if (rc != TRAN_ACCEPT) { 3260 /* this should never, ever happen */ 3261 return (FALSE); 3262 } 3263 3264 if (ata_pktp->ap_flags & AP_ERROR) 3265 return (FALSE); 3266 return (TRUE); 3267 } 3268 3269 /* 3270 * Check if this drive has the "revert to defaults" bug 3271 * PSARC 2001/500 and 2001/xxx - check for the properties 3272 * ata-revert-to-defaults and atarvrt-<diskmodel> before 3273 * examining the blacklist. 3274 * <diskmodel> is made from the model number reported by Identify Drive 3275 * with uppercase letters converted to lowercase and all characters 3276 * except letters, digits, ".", "_", and "-" deleted. 3277 * Return value: 3278 * TRUE: enable revert to defaults 3279 * FALSE: disable revert to defaults 3280 * 3281 * NOTE: revert to power on defaults that includes reverting to MDMA 3282 * mode is allowed by ATA-6 & ATA-7 specs. 3283 * Therefore drives exhibiting this behaviour are not violating the spec. 3284 * Furthermore, the spec explicitly says that after the soft reset 3285 * host should check the current setting of the device features. 3286 * Correctly working BIOS would therefore reprogram either the drive 3287 * and/or the host controller to match transfer modes. 3288 * Devices with ATA_BL_NORVRT flag will be removed from 3289 * the ata_blacklist. 3290 * The default behaviour will be - no revert to power-on defaults 3291 * for all devices. The property is retained in case the user 3292 * explicitly requests revert-to-defaults before reboot. 3293 */ 3294 3295 #define ATA_REVERT_PROP_PREFIX "revert-" 3296 #define ATA_REVERT_PROP_GLOBAL "ata-revert-to-defaults" 3297 /* room for prefix + model number + terminating NUL character */ 3298 #define PROP_BUF_SIZE (sizeof (ATA_REVERT_PROP_PREFIX) + \ 3299 sizeof (aidp->ai_model) + 1) 3300 #define PROP_LEN_MAX (31) 3301 3302 static int 3303 ata_check_revert_to_defaults( 3304 ata_drv_t *ata_drvp) 3305 { 3306 struct ata_id *aidp = &ata_drvp->ad_id; 3307 ata_ctl_t *ata_ctlp = ata_drvp->ad_ctlp; 3308 char prop_buf[PROP_BUF_SIZE]; 3309 int i, j; 3310 int propval; 3311 3312 /* put prefix into the buffer */ 3313 (void) strcpy(prop_buf, ATA_REVERT_PROP_PREFIX); 3314 j = strlen(prop_buf); 3315 3316 /* append the model number, leaving out invalid characters */ 3317 for (i = 0; i < sizeof (aidp->ai_model); ++i) { 3318 char c = aidp->ai_model[i]; 3319 if (c >= 'A' && c <= 'Z') /* uppercase -> lower */ 3320 c = c - 'A' + 'a'; 3321 if (c >= 'a' && c <= 'z' || c >= '0' && c <= '9' || 3322 c == '.' || c == '_' || c == '-') 3323 prop_buf[j++] = c; 3324 if (c == '\0') 3325 break; 3326 } 3327 3328 /* make sure there's a terminating NUL character */ 3329 if (j >= PROP_LEN_MAX) 3330 j = PROP_LEN_MAX; 3331 prop_buf[j] = '\0'; 3332 3333 /* look for a disk-specific "revert" property" */ 3334 propval = ddi_getprop(DDI_DEV_T_ANY, ata_ctlp->ac_dip, 3335 DDI_PROP_DONTPASS, prop_buf, -1); 3336 if (propval == 0) 3337 return (FALSE); 3338 else if (propval != -1) 3339 return (TRUE); 3340 3341 /* look for a global "revert" property" */ 3342 propval = ddi_getprop(DDI_DEV_T_ANY, ata_ctlp->ac_dip, 3343 0, ATA_REVERT_PROP_GLOBAL, -1); 3344 if (propval == 0) 3345 return (FALSE); 3346 else if (propval != -1) 3347 return (TRUE); 3348 3349 return (FALSE); 3350 } 3351 3352 void 3353 ata_show_transfer_mode(ata_ctl_t *ata_ctlp, ata_drv_t *ata_drvp) 3354 { 3355 int i; 3356 3357 if (ata_ctlp->ac_pciide_bm == FALSE || 3358 ata_drvp->ad_pciide_dma != ATA_DMA_ON) { 3359 if (ata_cntrl_DMA_sel_msg) { 3360 ATAPRT(( 3361 "?\tATA DMA off: %s\n", ata_cntrl_DMA_sel_msg)); 3362 } else if (ata_dev_DMA_sel_msg) { 3363 ATAPRT(("?\tATA DMA off: %s\n", ata_dev_DMA_sel_msg)); 3364 } 3365 ATAPRT(("?\tPIO mode %d selected\n", 3366 (ata_drvp->ad_id.ai_advpiomode & ATAC_ADVPIO_4_SUP) == 3367 ATAC_ADVPIO_4_SUP ? 4 : 3)); 3368 } else { 3369 /* Using DMA */ 3370 if (ata_drvp->ad_id.ai_dworddma & ATAC_MDMA_SEL_MASK) { 3371 /* 3372 * Rely on the fact that either dwdma or udma is 3373 * selected, not both. 3374 */ 3375 ATAPRT(("?\tMultiwordDMA mode %d selected\n", 3376 (ata_drvp->ad_id.ai_dworddma & ATAC_MDMA_2_SEL) == 3377 ATAC_MDMA_2_SEL ? 2 : 3378 (ata_drvp->ad_id.ai_dworddma & ATAC_MDMA_1_SEL) == 3379 ATAC_MDMA_1_SEL ? 1 : 0)); 3380 } else { 3381 for (i = 0; i <= 6; i++) { 3382 if (ata_drvp->ad_id.ai_ultradma & 3383 (1 << (i + 8))) { 3384 ATAPRT(( 3385 "?\tUltraDMA mode %d selected\n", 3386 i)); 3387 break; 3388 } 3389 } 3390 } 3391 } 3392 } 3393 3394 /* 3395 * Controller-specific operation pointers. 3396 * Should be extended as needed - init only for now 3397 */ 3398 struct ata_ctl_spec_ops { 3399 uint_t (*cs_init)(dev_info_t *, ushort_t, ushort_t); /* ctlr init */ 3400 }; 3401 3402 3403 struct ata_ctl_spec { 3404 ushort_t cs_vendor_id; 3405 ushort_t cs_device_id; 3406 struct ata_ctl_spec_ops *cs_ops; 3407 }; 3408 3409 /* Sil3XXX-specific functions (init only for now) */ 3410 struct ata_ctl_spec_ops sil3xxx_ops = { 3411 &sil3xxx_init_controller /* Sil3XXX cntrl initialization */ 3412 }; 3413 3414 3415 struct ata_ctl_spec ata_cntrls_spec[] = { 3416 {0x1095, 0x3114, &sil3xxx_ops}, 3417 {0x1095, 0x3512, &sil3xxx_ops}, 3418 {0x1095, 0x3112, &sil3xxx_ops}, 3419 {0, 0, NULL} /* List must end with cs_ops set to NULL */ 3420 }; 3421 3422 /* 3423 * Do controller specific initialization if necessary. 3424 * Pick-up controller specific functions. 3425 */ 3426 3427 int 3428 ata_spec_init_controller(dev_info_t *dip) 3429 { 3430 ushort_t vendor_id; 3431 ushort_t device_id; 3432 struct ata_ctl_spec *ctlsp; 3433 3434 vendor_id = ddi_prop_get_int(DDI_DEV_T_ANY, ddi_get_parent(dip), 3435 DDI_PROP_DONTPASS, "vendor-id", 0); 3436 device_id = ddi_prop_get_int(DDI_DEV_T_ANY, ddi_get_parent(dip), 3437 DDI_PROP_DONTPASS, "device-id", 0); 3438 3439 /* Locate controller specific ops, if they exist */ 3440 ctlsp = ata_cntrls_spec; 3441 while (ctlsp->cs_ops != NULL) { 3442 if (ctlsp->cs_vendor_id == vendor_id && 3443 ctlsp->cs_device_id == device_id) 3444 break; 3445 ctlsp++; 3446 } 3447 3448 if (ctlsp->cs_ops != NULL) { 3449 if (ctlsp->cs_ops->cs_init != NULL) { 3450 /* Initialize controller */ 3451 if ((*(ctlsp->cs_ops->cs_init)) 3452 (dip, vendor_id, device_id) != TRUE) { 3453 cmn_err(CE_WARN, 3454 "pci%4x,%4x cntrl specific " 3455 "initialization failed", 3456 vendor_id, device_id); 3457 return (FALSE); 3458 } 3459 } 3460 } 3461 return (TRUE); 3462 } 3463 3464 /* 3465 * this routine works like ddi_prop_get_int, except that it works on 3466 * a string property that contains ascii representations 3467 * of an integer. 3468 * If the property is not found, the default value is returned. 3469 */ 3470 static int 3471 ata_prop_lookup_int(dev_t match_dev, dev_info_t *dip, 3472 uint_t flags, char *name, int defvalue) 3473 { 3474 3475 char *bufp, *cp; 3476 int rc = defvalue; 3477 int proprc; 3478 3479 proprc = ddi_prop_lookup_string(match_dev, dip, 3480 flags, name, &bufp); 3481 3482 if (proprc == DDI_PROP_SUCCESS) { 3483 cp = bufp; 3484 rc = stoi(&cp); 3485 ddi_prop_free(bufp); 3486 } else { 3487 /* 3488 * see if property is encoded as an int instead of string. 3489 */ 3490 rc = ddi_prop_get_int(match_dev, dip, flags, name, defvalue); 3491 } 3492 3493 return (rc); 3494 } 3495 3496 /* 3497 * Initialize the power management components 3498 */ 3499 static void 3500 ata_init_pm(dev_info_t *dip) 3501 { 3502 char pmc_name[16]; 3503 char *pmc[] = { 3504 NULL, 3505 "0=Sleep (PCI D3 State)", 3506 "3=PowerOn (PCI D0 State)", 3507 NULL 3508 }; 3509 int instance; 3510 ata_ctl_t *ata_ctlp; 3511 3512 3513 instance = ddi_get_instance(dip); 3514 ata_ctlp = ddi_get_soft_state(ata_state, instance); 3515 ata_ctlp->ac_pm_support = 0; 3516 3517 /* check PCI capabilities */ 3518 if (!ata_is_pci(dip)) 3519 return; 3520 3521 (void) sprintf(pmc_name, "NAME=ata%d", instance); 3522 pmc[0] = pmc_name; 3523 3524 #ifdef ATA_USE_AUTOPM 3525 if (ddi_prop_update_string_array(DDI_DEV_T_NONE, dip, 3526 "pm-components", pmc, 3) != DDI_PROP_SUCCESS) { 3527 return; 3528 } 3529 #endif 3530 3531 ata_ctlp->ac_pm_support = 1; 3532 ata_ctlp->ac_pm_level = PM_LEVEL_D0; 3533 3534 ATA_BUSY_COMPONENT(dip, 0); 3535 if (ATA_RAISE_POWER(dip, 0, PM_LEVEL_D0) != DDI_SUCCESS) { 3536 (void) ddi_prop_remove(DDI_DEV_T_NONE, dip, "pm-components"); 3537 } 3538 ATA_IDLE_COMPONENT(dip, 0); 3539 } 3540 3541 /* 3542 * resume the hard drive 3543 */ 3544 static void 3545 ata_resume_drive(ata_drv_t *ata_drvp) 3546 { 3547 ata_ctl_t *ata_ctlp = ata_drvp->ad_ctlp; 3548 int drive_type; 3549 struct ata_id id; 3550 3551 ADBG_TRACE(("ata_resume_drive entered\n")); 3552 3553 drive_type = ata_drive_type(ata_drvp->ad_drive_bits, 3554 ata_ctlp->ac_iohandle1, ata_ctlp->ac_ioaddr1, 3555 ata_ctlp->ac_iohandle2, ata_ctlp->ac_ioaddr2, 3556 &id); 3557 if (drive_type == ATA_DEV_NONE) 3558 return; 3559 3560 if (!ATAPIDRV(ata_drvp)) { 3561 /* Reset Ultra DMA mode */ 3562 ata_reset_dma_mode(ata_drvp); 3563 if (!ata_disk_setup_parms(ata_ctlp, ata_drvp)) 3564 return; 3565 } else { 3566 (void) atapi_init_drive(ata_drvp); 3567 if (ata_drvp->ad_dma_mode != 0) { 3568 (void) atapi_reset_dma_mode(ata_drvp, FALSE); 3569 if (!ata_check_dma_mode(ata_drvp)) 3570 atapi_reset_dma_mode(ata_drvp, TRUE); 3571 if (ata_drvp->ad_id.ai_ultradma != 3572 ata_drvp->ad_dma_mode) { 3573 ata_drvp->ad_pciide_dma = ATA_DMA_OFF; 3574 } else { 3575 ata_drvp->ad_pciide_dma = ATA_DMA_ON; 3576 } 3577 } 3578 } 3579 (void) ata_set_feature(ata_ctlp, ata_drvp, ATSF_DIS_REVPOD, 0); 3580 3581 } 3582 3583 /* 3584 * resume routine, it will be run when get the command 3585 * DDI_RESUME at attach(9E) from system power management 3586 */ 3587 static int 3588 ata_resume(dev_info_t *dip) 3589 { 3590 int instance; 3591 ata_ctl_t *ata_ctlp; 3592 ddi_acc_handle_t io_hdl2; 3593 caddr_t ioaddr2; 3594 3595 instance = ddi_get_instance(dip); 3596 ata_ctlp = ddi_get_soft_state(ata_state, instance); 3597 3598 if (!ata_ctlp->ac_pm_support) 3599 return (DDI_FAILURE); 3600 if (ata_ctlp->ac_pm_level == PM_LEVEL_D0) 3601 return (DDI_SUCCESS); 3602 3603 ATA_BUSY_COMPONENT(dip, 0); 3604 if (ATA_RAISE_POWER(dip, 0, PM_LEVEL_D0) == DDI_FAILURE) 3605 return (DDI_FAILURE); 3606 ATA_IDLE_COMPONENT(dip, 0); 3607 3608 /* enable interrupts from the device */ 3609 io_hdl2 = ata_ctlp->ac_iohandle2; 3610 ioaddr2 = ata_ctlp->ac_ioaddr2; 3611 ddi_put8(io_hdl2, (uchar_t *)ioaddr2 + AT_DEVCTL, ATDC_D3); 3612 ata_ctlp->ac_pm_level = PM_LEVEL_D0; 3613 3614 return (DDI_SUCCESS); 3615 } 3616 3617 /* 3618 * suspend routine, it will be run when get the command 3619 * DDI_SUSPEND at detach(9E) from system power management 3620 */ 3621 static int 3622 ata_suspend(dev_info_t *dip) 3623 { 3624 int instance; 3625 ata_ctl_t *ata_ctlp; 3626 ddi_acc_handle_t io_hdl2; 3627 3628 instance = ddi_get_instance(dip); 3629 ata_ctlp = ddi_get_soft_state(ata_state, instance); 3630 3631 if (!ata_ctlp->ac_pm_support) 3632 return (DDI_FAILURE); 3633 if (ata_ctlp->ac_pm_level == PM_LEVEL_D3) 3634 return (DDI_SUCCESS); 3635 3636 /* disable interrupts and turn the software reset bit on */ 3637 io_hdl2 = ata_ctlp->ac_iohandle2; 3638 ddi_put8(io_hdl2, ata_ctlp->ac_devctl, (ATDC_D3 | ATDC_SRST)); 3639 3640 (void) ata_reset_bus(ata_ctlp); 3641 (void) ata_change_power(dip, ATC_SLEEP); 3642 ata_ctlp->ac_pm_level = PM_LEVEL_D3; 3643 return (DDI_SUCCESS); 3644 } 3645 3646 int ata_save_pci_config = 0; 3647 /* 3648 * ata specific power management entry point, it was 3649 * used to change the power management component 3650 */ 3651 static int 3652 ata_power(dev_info_t *dip, int component, int level) 3653 { 3654 int instance; 3655 ata_ctl_t *ata_ctlp; 3656 uint8_t cmd; 3657 3658 ADBG_TRACE(("ata_power entered, component = %d, level = %d\n", 3659 component, level)); 3660 3661 instance = ddi_get_instance(dip); 3662 ata_ctlp = ddi_get_soft_state(ata_state, instance); 3663 if (ata_ctlp == NULL || component != 0) 3664 return (DDI_FAILURE); 3665 3666 if (!ata_ctlp->ac_pm_support) 3667 return (DDI_FAILURE); 3668 3669 if (ata_ctlp->ac_pm_level == level) 3670 return (DDI_SUCCESS); 3671 3672 switch (level) { 3673 case PM_LEVEL_D0: 3674 if (ata_save_pci_config) 3675 (void) pci_restore_config_regs(dip); 3676 ata_ctlp->ac_pm_level = PM_LEVEL_D0; 3677 cmd = ATC_IDLE_IMMED; 3678 break; 3679 case PM_LEVEL_D3: 3680 if (ata_save_pci_config) 3681 (void) pci_save_config_regs(dip); 3682 ata_ctlp->ac_pm_level = PM_LEVEL_D3; 3683 cmd = ATC_SLEEP; 3684 break; 3685 default: 3686 return (DDI_FAILURE); 3687 } 3688 return (ata_change_power(dip, cmd)); 3689 } 3690 3691 /* 3692 * sent commands to ata controller to change the power level 3693 */ 3694 static int 3695 ata_change_power(dev_info_t *dip, uint8_t cmd) 3696 { 3697 int instance; 3698 ata_ctl_t *ata_ctlp; 3699 ata_drv_t *ata_drvp; 3700 uchar_t targ; 3701 struct ata_id id; 3702 uchar_t lun; 3703 uchar_t lastlun; 3704 struct ata_id *aidp; 3705 3706 ADBG_TRACE(("ata_change_power entered, cmd = %d\n", cmd)); 3707 3708 instance = ddi_get_instance(dip); 3709 ata_ctlp = ddi_get_soft_state(ata_state, instance); 3710 3711 /* 3712 * Issue command on each disk device on the bus. 3713 */ 3714 if (cmd == ATC_SLEEP) { 3715 for (targ = 0; targ < ATA_MAXTARG; targ++) { 3716 ata_drvp = CTL2DRV(ata_ctlp, targ, 0); 3717 if (ata_drvp == NULL) 3718 continue; 3719 if (ata_drvp->ad_dma_cap == 0 && 3720 ata_drvp->ad_pciide_dma == ATA_DMA_ON) { 3721 aidp = &ata_drvp->ad_id; 3722 if ((aidp->ai_validinfo & ATAC_VALIDINFO_83) && 3723 (aidp->ai_ultradma & ATAC_UDMA_SEL_MASK)) { 3724 ata_drvp->ad_dma_cap = 3725 ATA_DMA_ULTRAMODE; 3726 ata_drvp->ad_dma_mode = 3727 aidp->ai_ultradma; 3728 } else if (aidp->ai_dworddma & 3729 ATAC_MDMA_SEL_MASK) { 3730 ata_drvp->ad_dma_cap = 3731 ATA_DMA_MWORDMODE; 3732 ata_drvp->ad_dma_mode = 3733 aidp->ai_dworddma; 3734 } 3735 } 3736 if (ata_drive_type(ata_drvp->ad_drive_bits, 3737 ata_ctlp->ac_iohandle1, ata_ctlp->ac_ioaddr1, 3738 ata_ctlp->ac_iohandle2, ata_ctlp->ac_ioaddr2, 3739 &id) != ATA_DEV_DISK) 3740 continue; 3741 (void) ata_flush_cache(ata_ctlp, ata_drvp); 3742 if (!ata_command(ata_ctlp, ata_drvp, TRUE, TRUE, 3743 5 * 1000000, cmd, 0, 0, 0, 0, 0, 0)) { 3744 cmn_err(CE_WARN, "!ata_controller - Can not " 3745 "put drive %d in to power mode %u", 3746 targ, cmd); 3747 (void) ata_devo_reset(dip, DDI_RESET_FORCE); 3748 return (DDI_FAILURE); 3749 } 3750 } 3751 return (DDI_SUCCESS); 3752 } 3753 3754 (void) ata_software_reset(ata_ctlp); 3755 for (targ = 0; targ < ATA_MAXTARG; targ++) { 3756 ata_drvp = CTL2DRV(ata_ctlp, targ, 0); 3757 if (ata_drvp == NULL) 3758 continue; 3759 ata_resume_drive(ata_drvp); 3760 3761 if (ATAPIDRV(ata_drvp)) 3762 lastlun = ata_drvp->ad_id.ai_lastlun; 3763 else 3764 lastlun = 0; 3765 if (!ata_enable_atapi_luns) 3766 lastlun = 0; 3767 for (lun = 1; lun <= lastlun && lun < ATA_MAXLUN; lun++) { 3768 ata_drvp = CTL2DRV(ata_ctlp, targ, lun); 3769 if (ata_drvp != NULL) 3770 ata_resume_drive(ata_drvp); 3771 } 3772 } 3773 3774 return (DDI_SUCCESS); 3775 } 3776 3777 /* 3778 * return 1 when ata controller is a pci device, 3779 * otherwise return 0 3780 */ 3781 static int 3782 ata_is_pci(dev_info_t *dip) 3783 { 3784 int rc; 3785 char *bufp; 3786 int ispci; 3787 3788 rc = ddi_prop_lookup_string(DDI_DEV_T_ANY, ddi_get_parent(dip), 3789 DDI_PROP_DONTPASS, "device_type", &bufp); 3790 3791 if (rc != DDI_PROP_SUCCESS) { 3792 ADBG_ERROR(("ata_is_pci !device_type\n")); 3793 return (0); 3794 } 3795 3796 ispci = (strcmp(bufp, "pci-ide") == 0); 3797 3798 ddi_prop_free(bufp); 3799 3800 return (ispci); 3801 } 3802 3803 /* 3804 * Disable DMA for this drive 3805 */ 3806 static void 3807 ata_disable_DMA(ata_drv_t *ata_drvp) 3808 { 3809 struct ata_id *aidp; 3810 char buf[sizeof (aidp->ai_model) +2]; 3811 int i; 3812 3813 if (ata_drvp == NULL) 3814 return; 3815 3816 if (ata_drvp->ad_pciide_dma == ATA_DMA_OFF) 3817 return; 3818 3819 ata_drvp->ad_pciide_dma = ATA_DMA_OFF; 3820 3821 /* Print the message */ 3822 buf[0] = '\0'; 3823 aidp = &ata_drvp->ad_id; 3824 if (aidp != NULL) { 3825 (void) strncpy(buf, aidp->ai_model, sizeof (aidp->ai_model)); 3826 buf[sizeof (aidp->ai_model) -1] = '\0'; 3827 for (i = sizeof (aidp->ai_model) - 2; buf[i] == ' '; i--) 3828 buf[i] = '\0'; 3829 } 3830 cmn_err(CE_CONT, 3831 "?DMA disabled on %s target=%d, lun=%d due to DMA errors,", 3832 buf, ata_drvp->ad_targ, ata_drvp->ad_lun); 3833 cmn_err(CE_CONT, "?most likely due to the CF-to-IDE adapter."); 3834 } 3835 3836 /* 3837 * Check and select DMA mode 3838 * 3839 * TRUE is returned when set feature is called successfully, 3840 * otherwise return FALSE 3841 */ 3842 int 3843 ata_set_dma_mode(ata_ctl_t *ata_ctlp, ata_drv_t *ata_drvp) 3844 { 3845 struct ata_id *aidp; 3846 int mode, rval = FALSE; 3847 uint8_t subcmd; 3848 3849 aidp = &ata_drvp->ad_id; 3850 3851 /* Return directly if DMA is not supported */ 3852 if (!(aidp->ai_cap & ATAC_DMA_SUPPORT)) 3853 return (rval); 3854 3855 /* Return if DMA mode is already selected */ 3856 if (((aidp->ai_validinfo & ATAC_VALIDINFO_83) && 3857 (aidp->ai_ultradma & ATAC_UDMA_SEL_MASK)) || 3858 (aidp->ai_dworddma & ATAC_MDMA_SEL_MASK)) 3859 return (rval); 3860 3861 /* First check Ultra DMA mode if no DMA is selected */ 3862 if ((aidp->ai_validinfo & ATAC_VALIDINFO_83) && 3863 (aidp->ai_ultradma & ATAC_UDMA_SUP_MASK)) { 3864 for (mode = 6; mode >= 0; --mode) { 3865 if (aidp->ai_ultradma & (1 << mode)) 3866 break; 3867 } 3868 subcmd = ATF_XFRMOD_UDMA; 3869 3870 } else if (aidp->ai_dworddma & ATAC_MDMA_SUP_MASK) { 3871 /* Then check multi-word DMA mode */ 3872 for (mode = 2; mode >= 0; --mode) { 3873 if (aidp->ai_dworddma & (1 << mode)) 3874 break; 3875 } 3876 subcmd = ATF_XFRMOD_MDMA; 3877 3878 } else { 3879 return (rval); 3880 } 3881 3882 rval = ata_set_feature(ata_ctlp, ata_drvp, ATSF_SET_XFRMOD, 3883 subcmd|mode); 3884 3885 return (rval); 3886 } 3887 3888 /* 3889 * Reset Ultra DMA mode / MWDMA mode 3890 */ 3891 void 3892 ata_reset_dma_mode(ata_drv_t *ata_drvp) 3893 { 3894 uint8_t subcmd; 3895 int mode; 3896 ata_ctl_t *ata_ctlp = ata_drvp->ad_ctlp; 3897 3898 switch (ata_drvp->ad_dma_cap) { 3899 case ATA_DMA_ULTRAMODE: 3900 subcmd = ATF_XFRMOD_UDMA; 3901 for (mode = 0; mode <= 6; mode++) { 3902 if (ata_drvp->ad_dma_mode & (1 << (mode + 8))) 3903 break; 3904 } 3905 break; 3906 case ATA_DMA_MWORDMODE: 3907 subcmd = ATF_XFRMOD_MDMA; 3908 mode = ((ata_drvp->ad_dma_mode & ATAC_MDMA_2_SEL) == 3909 ATAC_MDMA_2_SEL ? 2 : 3910 (ata_drvp->ad_dma_mode & ATAC_MDMA_1_SEL) == 3911 ATAC_MDMA_1_SEL ? 1 : 0); 3912 break; 3913 default: 3914 return; 3915 } 3916 3917 (void) ata_set_feature(ata_ctlp, ata_drvp, ATSF_SET_XFRMOD, 3918 (subcmd | mode)); 3919 } 3920 3921 /* 3922 * Check DMA mode is the same with saved info 3923 * return value: 0 - not same 3924 * 1 - same 3925 */ 3926 static int 3927 ata_check_dma_mode(ata_drv_t *ata_drvp) 3928 { 3929 struct ata_id *aidp; 3930 3931 aidp = &ata_drvp->ad_id; 3932 switch (ata_drvp->ad_dma_cap) { 3933 case ATA_DMA_ULTRAMODE: 3934 if ((aidp->ai_validinfo & ATAC_VALIDINFO_83) && 3935 (aidp->ai_ultradma & ATAC_UDMA_SEL_MASK) && 3936 (aidp->ai_ultradma == ata_drvp->ad_dma_mode)) 3937 break; 3938 else 3939 return (0); 3940 case ATA_DMA_MWORDMODE: 3941 if ((aidp->ai_dworddma & ATAC_MDMA_SEL_MASK) && 3942 (aidp->ai_dworddma == ata_drvp->ad_dma_mode)) 3943 break; 3944 else 3945 return (0); 3946 default: 3947 return (0); 3948 } 3949 return (1); 3950 }