1#ifndef _IDE_H 2#define _IDE_H 3/* 4 * linux/include/linux/ide.h 5 * 6 * Copyright (C) 1994-2002 Linus Torvalds & authors 7 */ 8 9#include <linux/config.h> 10#include <linux/init.h> 11#include <linux/ioport.h> 12#include <linux/hdreg.h> 13#include <linux/hdsmart.h> 14#include <linux/blkdev.h> 15#include <linux/proc_fs.h> 16#include <linux/interrupt.h> 17#include <linux/bitops.h> 18#include <linux/bio.h> 19#include <linux/device.h> 20#include <linux/pci.h> 21#include <asm/byteorder.h> 22#include <asm/system.h> 23#include <asm/io.h> 24#include <asm/semaphore.h> 25 26/* 27 * This is the multiple IDE interface driver, as evolved from hd.c. 28 * It supports up to four IDE interfaces, on one or more IRQs (usually 14 & 15). 29 * There can be up to two drives per interface, as per the ATA-2 spec. 30 * 31 * Primary i/f: ide0: major=3; (hda) minor=0; (hdb) minor=64 32 * Secondary i/f: ide1: major=22; (hdc or hd1a) minor=0; (hdd or hd1b) minor=64 33 * Tertiary i/f: ide2: major=33; (hde) minor=0; (hdf) minor=64 34 * Quaternary i/f: ide3: major=34; (hdg) minor=0; (hdh) minor=64 35 */ 36 37/****************************************************************************** 38 * IDE driver configuration options (play with these as desired): 39 * 40 * REALLY_SLOW_IO can be defined in ide.c and ide-cd.c, if necessary 41 */ 42#define INITIAL_MULT_COUNT 0 /* off=0; on=2,4,8,16,32, etc.. */ 43 44#ifndef SUPPORT_SLOW_DATA_PORTS /* 1 to support slow data ports */ 45#define SUPPORT_SLOW_DATA_PORTS 1 /* 0 to reduce kernel size */ 46#endif 47#ifndef SUPPORT_VLB_SYNC /* 1 to support weird 32-bit chips */ 48#define SUPPORT_VLB_SYNC 1 /* 0 to reduce kernel size */ 49#endif 50#ifndef OK_TO_RESET_CONTROLLER /* 1 needed for good error recovery */ 51#define OK_TO_RESET_CONTROLLER 1 /* 0 for use with AH2372A/B interface */ 52#endif 53 54#ifndef DISABLE_IRQ_NOSYNC 55#define DISABLE_IRQ_NOSYNC 0 56#endif 57 58/* 59 * Used to indicate "no IRQ", should be a value that cannot be an IRQ 60 * number. 61 */ 62 63#define IDE_NO_IRQ (-1) 64 65/* 66 * "No user-serviceable parts" beyond this point :) 67 *****************************************************************************/ 68 69typedef unsigned char byte; /* used everywhere */ 70 71/* 72 * Probably not wise to fiddle with these 73 */ 74#define ERROR_MAX 8 /* Max read/write errors per sector */ 75#define ERROR_RESET 3 /* Reset controller every 4th retry */ 76#define ERROR_RECAL 1 /* Recalibrate every 2nd retry */ 77 78/* 79 * Tune flags 80 */ 81#define IDE_TUNE_NOAUTO 2 82#define IDE_TUNE_AUTO 1 83#define IDE_TUNE_DEFAULT 0 84 85/* 86 * state flags 87 */ 88 89#define DMA_PIO_RETRY 1 /* retrying in PIO */ 90 91#define HWIF(drive) ((ide_hwif_t *)((drive)->hwif)) 92#define HWGROUP(drive) ((ide_hwgroup_t *)(HWIF(drive)->hwgroup)) 93 94/* 95 * Definitions for accessing IDE controller registers 96 */ 97#define IDE_NR_PORTS (10) 98 99#define IDE_DATA_OFFSET (0) 100#define IDE_ERROR_OFFSET (1) 101#define IDE_NSECTOR_OFFSET (2) 102#define IDE_SECTOR_OFFSET (3) 103#define IDE_LCYL_OFFSET (4) 104#define IDE_HCYL_OFFSET (5) 105#define IDE_SELECT_OFFSET (6) 106#define IDE_STATUS_OFFSET (7) 107#define IDE_CONTROL_OFFSET (8) 108#define IDE_IRQ_OFFSET (9) 109 110#define IDE_FEATURE_OFFSET IDE_ERROR_OFFSET 111#define IDE_COMMAND_OFFSET IDE_STATUS_OFFSET 112 113#define IDE_CONTROL_OFFSET_HOB (7) 114 115#define IDE_DATA_REG (HWIF(drive)->io_ports[IDE_DATA_OFFSET]) 116#define IDE_ERROR_REG (HWIF(drive)->io_ports[IDE_ERROR_OFFSET]) 117#define IDE_NSECTOR_REG (HWIF(drive)->io_ports[IDE_NSECTOR_OFFSET]) 118#define IDE_SECTOR_REG (HWIF(drive)->io_ports[IDE_SECTOR_OFFSET]) 119#define IDE_LCYL_REG (HWIF(drive)->io_ports[IDE_LCYL_OFFSET]) 120#define IDE_HCYL_REG (HWIF(drive)->io_ports[IDE_HCYL_OFFSET]) 121#define IDE_SELECT_REG (HWIF(drive)->io_ports[IDE_SELECT_OFFSET]) 122#define IDE_STATUS_REG (HWIF(drive)->io_ports[IDE_STATUS_OFFSET]) 123#define IDE_CONTROL_REG (HWIF(drive)->io_ports[IDE_CONTROL_OFFSET]) 124#define IDE_IRQ_REG (HWIF(drive)->io_ports[IDE_IRQ_OFFSET]) 125 126#define IDE_FEATURE_REG IDE_ERROR_REG 127#define IDE_COMMAND_REG IDE_STATUS_REG 128#define IDE_ALTSTATUS_REG IDE_CONTROL_REG 129#define IDE_IREASON_REG IDE_NSECTOR_REG 130#define IDE_BCOUNTL_REG IDE_LCYL_REG 131#define IDE_BCOUNTH_REG IDE_HCYL_REG 132 133#define OK_STAT(stat,good,bad) (((stat)&((good)|(bad)))==(good)) 134#define BAD_R_STAT (BUSY_STAT | ERR_STAT) 135#define BAD_W_STAT (BAD_R_STAT | WRERR_STAT) 136#define BAD_STAT (BAD_R_STAT | DRQ_STAT) 137#define DRIVE_READY (READY_STAT | SEEK_STAT) 138#define DATA_READY (DRQ_STAT) 139 140#define BAD_CRC (ABRT_ERR | ICRC_ERR) 141 142#define SATA_NR_PORTS (3) /* 16 possible ?? */ 143 144#define SATA_STATUS_OFFSET (0) 145#define SATA_STATUS_REG (HWIF(drive)->sata_scr[SATA_STATUS_OFFSET]) 146#define SATA_ERROR_OFFSET (1) 147#define SATA_ERROR_REG (HWIF(drive)->sata_scr[SATA_ERROR_OFFSET]) 148#define SATA_CONTROL_OFFSET (2) 149#define SATA_CONTROL_REG (HWIF(drive)->sata_scr[SATA_CONTROL_OFFSET]) 150 151#define SATA_MISC_OFFSET (0) 152#define SATA_MISC_REG (HWIF(drive)->sata_misc[SATA_MISC_OFFSET]) 153#define SATA_PHY_OFFSET (1) 154#define SATA_PHY_REG (HWIF(drive)->sata_misc[SATA_PHY_OFFSET]) 155#define SATA_IEN_OFFSET (2) 156#define SATA_IEN_REG (HWIF(drive)->sata_misc[SATA_IEN_OFFSET]) 157 158/* 159 * Our Physical Region Descriptor (PRD) table should be large enough 160 * to handle the biggest I/O request we are likely to see. Since requests 161 * can have no more than 256 sectors, and since the typical blocksize is 162 * two or more sectors, we could get by with a limit of 128 entries here for 163 * the usual worst case. Most requests seem to include some contiguous blocks, 164 * further reducing the number of table entries required. 165 * 166 * The driver reverts to PIO mode for individual requests that exceed 167 * this limit (possible with 512 byte blocksizes, eg. MSDOS f/s), so handling 168 * 100% of all crazy scenarios here is not necessary. 169 * 170 * As it turns out though, we must allocate a full 4KB page for this, 171 * so the two PRD tables (ide0 & ide1) will each get half of that, 172 * allowing each to have about 256 entries (8 bytes each) from this. 173 */ 174#define PRD_BYTES 8 175#define PRD_ENTRIES 256 176 177/* 178 * Some more useful definitions 179 */ 180#define PARTN_BITS 6 /* number of minor dev bits for partitions */ 181#define MAX_DRIVES 2 /* per interface; 2 assumed by lots of code */ 182#define SECTOR_SIZE 512 183#define SECTOR_WORDS (SECTOR_SIZE / 4) /* number of 32bit words per sector */ 184#define IDE_LARGE_SEEK(b1,b2,t) (((b1) > (b2) + (t)) || ((b2) > (b1) + (t))) 185 186/* 187 * Timeouts for various operations: 188 */ 189#define WAIT_DRQ (HZ/10) /* 100msec - spec allows up to 20ms */ 190#define WAIT_READY (5*HZ) /* 5sec - some laptops are very slow */ 191#define WAIT_PIDENTIFY (10*HZ) /* 10sec - should be less than 3ms (?), if all ATAPI CD is closed at boot */ 192#define WAIT_WORSTCASE (30*HZ) /* 30sec - worst case when spinning up */ 193#define WAIT_CMD (10*HZ) /* 10sec - maximum wait for an IRQ to happen */ 194#define WAIT_MIN_SLEEP (2*HZ/100) /* 20msec - minimum sleep time */ 195 196#define HOST(hwif,chipset) \ 197{ \ 198 return ((hwif)->chipset == chipset) ? 1 : 0; \ 199} 200 201/* 202 * Check for an interrupt and acknowledge the interrupt status 203 */ 204struct hwif_s; 205typedef int (ide_ack_intr_t)(struct hwif_s *); 206 207#ifndef NO_DMA 208#define NO_DMA 255 209#endif 210 211/* 212 * hwif_chipset_t is used to keep track of the specific hardware 213 * chipset used by each IDE interface, if known. 214 */ 215typedef enum { ide_unknown, ide_generic, ide_pci, 216 ide_cmd640, ide_dtc2278, ide_ali14xx, 217 ide_qd65xx, ide_umc8672, ide_ht6560b, 218 ide_rz1000, ide_trm290, 219 ide_cmd646, ide_cy82c693, ide_4drives, 220 ide_pmac, ide_etrax100, ide_acorn, 221 ide_au1xxx, ide_forced 222} hwif_chipset_t; 223 224/* 225 * Structure to hold all information about the location of this port 226 */ 227typedef struct hw_regs_s { 228 unsigned long io_ports[IDE_NR_PORTS]; /* task file registers */ 229 int irq; /* our irq number */ 230 int dma; /* our dma entry */ 231 ide_ack_intr_t *ack_intr; /* acknowledge interrupt */ 232 hwif_chipset_t chipset; 233 struct device *dev; 234} hw_regs_t; 235 236/* 237 * Register new hardware with ide 238 */ 239int ide_register_hw(hw_regs_t *hw, struct hwif_s **hwifp); 240int ide_register_hw_with_fixup(hw_regs_t *, struct hwif_s **, void (*)(struct hwif_s *)); 241 242/* 243 * Set up hw_regs_t structure before calling ide_register_hw (optional) 244 */ 245void ide_setup_ports( hw_regs_t *hw, 246 unsigned long base, 247 int *offsets, 248 unsigned long ctrl, 249 unsigned long intr, 250 ide_ack_intr_t *ack_intr, 251#if 0 252 ide_io_ops_t *iops, 253#endif 254 int irq); 255 256static inline void ide_std_init_ports(hw_regs_t *hw, 257 unsigned long io_addr, 258 unsigned long ctl_addr) 259{ 260 unsigned int i; 261 262 for (i = IDE_DATA_OFFSET; i <= IDE_STATUS_OFFSET; i++) 263 hw->io_ports[i] = io_addr++; 264 265 hw->io_ports[IDE_CONTROL_OFFSET] = ctl_addr; 266} 267 268#include <asm/ide.h> 269 270#ifndef MAX_HWIFS 271#define MAX_HWIFS CONFIG_IDE_MAX_HWIFS 272#endif 273 274/* needed on alpha, x86/x86_64, ia64, mips, ppc32 and sh */ 275#ifndef IDE_ARCH_OBSOLETE_DEFAULTS 276# define ide_default_io_base(index) (0) 277# define ide_default_irq(base) (0) 278# define ide_init_default_irq(base) (0) 279#endif 280 281/* 282 * ide_init_hwif_ports() is OBSOLETE and will be removed in 2.7 series. 283 * New ports shouldn't define IDE_ARCH_OBSOLETE_INIT in <asm/ide.h>. 284 */ 285#ifdef IDE_ARCH_OBSOLETE_INIT 286static inline void ide_init_hwif_ports(hw_regs_t *hw, 287 unsigned long io_addr, 288 unsigned long ctl_addr, 289 int *irq) 290{ 291 if (!ctl_addr) 292 ide_std_init_ports(hw, io_addr, ide_default_io_ctl(io_addr)); 293 else 294 ide_std_init_ports(hw, io_addr, ctl_addr); 295 296 if (irq) 297 *irq = 0; 298 299 hw->io_ports[IDE_IRQ_OFFSET] = 0; 300 301#ifdef CONFIG_PPC32 302 if (ppc_ide_md.ide_init_hwif) 303 ppc_ide_md.ide_init_hwif(hw, io_addr, ctl_addr, irq); 304#endif 305} 306#else 307static inline void ide_init_hwif_ports(hw_regs_t *hw, 308 unsigned long io_addr, 309 unsigned long ctl_addr, 310 int *irq) 311{ 312 if (io_addr || ctl_addr) 313 printk(KERN_WARNING "%s: must not be called\n", __FUNCTION__); 314} 315#endif /* IDE_ARCH_OBSOLETE_INIT */ 316 317/* Currently only m68k, apus and m8xx need it */ 318#ifndef IDE_ARCH_ACK_INTR 319# define ide_ack_intr(hwif) (1) 320#endif 321 322/* Currently only Atari needs it */ 323#ifndef IDE_ARCH_LOCK 324# define ide_release_lock() do {} while (0) 325# define ide_get_lock(hdlr, data) do {} while (0) 326#endif /* IDE_ARCH_LOCK */ 327 328/* 329 * Now for the data we need to maintain per-drive: ide_drive_t 330 */ 331 332#define ide_scsi 0x21 333#define ide_disk 0x20 334#define ide_optical 0x7 335#define ide_cdrom 0x5 336#define ide_tape 0x1 337#define ide_floppy 0x0 338 339/* 340 * Special Driver Flags 341 * 342 * set_geometry : respecify drive geometry 343 * recalibrate : seek to cyl 0 344 * set_multmode : set multmode count 345 * set_tune : tune interface for drive 346 * serviced : service command 347 * reserved : unused 348 */ 349typedef union { 350 unsigned all : 8; 351 struct { 352#if defined(__LITTLE_ENDIAN_BITFIELD) 353 unsigned set_geometry : 1; 354 unsigned recalibrate : 1; 355 unsigned set_multmode : 1; 356 unsigned set_tune : 1; 357 unsigned serviced : 1; 358 unsigned reserved : 3; 359#elif defined(__BIG_ENDIAN_BITFIELD) 360 unsigned reserved : 3; 361 unsigned serviced : 1; 362 unsigned set_tune : 1; 363 unsigned set_multmode : 1; 364 unsigned recalibrate : 1; 365 unsigned set_geometry : 1; 366#else 367#error "Please fix <asm/byteorder.h>" 368#endif 369 } b; 370} special_t; 371 372/* 373 * ATA DATA Register Special. 374 * ATA NSECTOR Count Register(). 375 * ATAPI Byte Count Register. 376 * Channel index ordering pairs. 377 */ 378typedef union { 379 unsigned all :16; 380 struct { 381#if defined(__LITTLE_ENDIAN_BITFIELD) 382 unsigned low :8; /* LSB */ 383 unsigned high :8; /* MSB */ 384#elif defined(__BIG_ENDIAN_BITFIELD) 385 unsigned high :8; /* MSB */ 386 unsigned low :8; /* LSB */ 387#else 388#error "Please fix <asm/byteorder.h>" 389#endif 390 } b; 391} ata_nsector_t, ata_data_t, atapi_bcount_t, ata_index_t; 392 393/* 394 * ATA-IDE Error Register 395 * 396 * mark : Bad address mark 397 * tzero : Couldn't find track 0 398 * abrt : Aborted Command 399 * mcr : Media Change Request 400 * id : ID field not found 401 * mce : Media Change Event 402 * ecc : Uncorrectable ECC error 403 * bdd : dual meaing 404 */ 405typedef union { 406 unsigned all :8; 407 struct { 408#if defined(__LITTLE_ENDIAN_BITFIELD) 409 unsigned mark :1; 410 unsigned tzero :1; 411 unsigned abrt :1; 412 unsigned mcr :1; 413 unsigned id :1; 414 unsigned mce :1; 415 unsigned ecc :1; 416 unsigned bdd :1; 417#elif defined(__BIG_ENDIAN_BITFIELD) 418 unsigned bdd :1; 419 unsigned ecc :1; 420 unsigned mce :1; 421 unsigned id :1; 422 unsigned mcr :1; 423 unsigned abrt :1; 424 unsigned tzero :1; 425 unsigned mark :1; 426#else 427#error "Please fix <asm/byteorder.h>" 428#endif 429 } b; 430} ata_error_t; 431 432/* 433 * ATA-IDE Select Register, aka Device-Head 434 * 435 * head : always zeros here 436 * unit : drive select number: 0/1 437 * bit5 : always 1 438 * lba : using LBA instead of CHS 439 * bit7 : always 1 440 */ 441typedef union { 442 unsigned all : 8; 443 struct { 444#if defined(__LITTLE_ENDIAN_BITFIELD) 445 unsigned head : 4; 446 unsigned unit : 1; 447 unsigned bit5 : 1; 448 unsigned lba : 1; 449 unsigned bit7 : 1; 450#elif defined(__BIG_ENDIAN_BITFIELD) 451 unsigned bit7 : 1; 452 unsigned lba : 1; 453 unsigned bit5 : 1; 454 unsigned unit : 1; 455 unsigned head : 4; 456#else 457#error "Please fix <asm/byteorder.h>" 458#endif 459 } b; 460} select_t, ata_select_t; 461 462/* 463 * The ATA-IDE Status Register. 464 * The ATAPI Status Register. 465 * 466 * check : Error occurred 467 * idx : Index Error 468 * corr : Correctable error occurred 469 * drq : Data is request by the device 470 * dsc : Disk Seek Complete : ata 471 * : Media access command finished : atapi 472 * df : Device Fault : ata 473 * : Reserved : atapi 474 * drdy : Ready, Command Mode Capable : ata 475 * : Ignored for ATAPI commands : atapi 476 * bsy : Disk is Busy 477 * : The device has access to the command block 478 */ 479typedef union { 480 unsigned all :8; 481 struct { 482#if defined(__LITTLE_ENDIAN_BITFIELD) 483 unsigned check :1; 484 unsigned idx :1; 485 unsigned corr :1; 486 unsigned drq :1; 487 unsigned dsc :1; 488 unsigned df :1; 489 unsigned drdy :1; 490 unsigned bsy :1; 491#elif defined(__BIG_ENDIAN_BITFIELD) 492 unsigned bsy :1; 493 unsigned drdy :1; 494 unsigned df :1; 495 unsigned dsc :1; 496 unsigned drq :1; 497 unsigned corr :1; 498 unsigned idx :1; 499 unsigned check :1; 500#else 501#error "Please fix <asm/byteorder.h>" 502#endif 503 } b; 504} ata_status_t, atapi_status_t; 505 506/* 507 * ATA-IDE Control Register 508 * 509 * bit0 : Should be set to zero 510 * nIEN : device INTRQ to host 511 * SRST : host soft reset bit 512 * bit3 : ATA-2 thingy, Should be set to 1 513 * reserved456 : Reserved 514 * HOB : 48-bit address ordering, High Ordered Bit 515 */ 516typedef union { 517 unsigned all : 8; 518 struct { 519#if defined(__LITTLE_ENDIAN_BITFIELD) 520 unsigned bit0 : 1; 521 unsigned nIEN : 1; 522 unsigned SRST : 1; 523 unsigned bit3 : 1; 524 unsigned reserved456 : 3; 525 unsigned HOB : 1; 526#elif defined(__BIG_ENDIAN_BITFIELD) 527 unsigned HOB : 1; 528 unsigned reserved456 : 3; 529 unsigned bit3 : 1; 530 unsigned SRST : 1; 531 unsigned nIEN : 1; 532 unsigned bit0 : 1; 533#else 534#error "Please fix <asm/byteorder.h>" 535#endif 536 } b; 537} ata_control_t; 538 539/* 540 * ATAPI Feature Register 541 * 542 * dma : Using DMA or PIO 543 * reserved321 : Reserved 544 * reserved654 : Reserved (Tag Type) 545 * reserved7 : Reserved 546 */ 547typedef union { 548 unsigned all :8; 549 struct { 550#if defined(__LITTLE_ENDIAN_BITFIELD) 551 unsigned dma :1; 552 unsigned reserved321 :3; 553 unsigned reserved654 :3; 554 unsigned reserved7 :1; 555#elif defined(__BIG_ENDIAN_BITFIELD) 556 unsigned reserved7 :1; 557 unsigned reserved654 :3; 558 unsigned reserved321 :3; 559 unsigned dma :1; 560#else 561#error "Please fix <asm/byteorder.h>" 562#endif 563 } b; 564} atapi_feature_t; 565 566/* 567 * ATAPI Interrupt Reason Register. 568 * 569 * cod : Information transferred is command (1) or data (0) 570 * io : The device requests us to read (1) or write (0) 571 * reserved : Reserved 572 */ 573typedef union { 574 unsigned all :8; 575 struct { 576#if defined(__LITTLE_ENDIAN_BITFIELD) 577 unsigned cod :1; 578 unsigned io :1; 579 unsigned reserved :6; 580#elif defined(__BIG_ENDIAN_BITFIELD) 581 unsigned reserved :6; 582 unsigned io :1; 583 unsigned cod :1; 584#else 585#error "Please fix <asm/byteorder.h>" 586#endif 587 } b; 588} atapi_ireason_t; 589 590/* 591 * The ATAPI error register. 592 * 593 * ili : Illegal Length Indication 594 * eom : End Of Media Detected 595 * abrt : Aborted command - As defined by ATA 596 * mcr : Media Change Requested - As defined by ATA 597 * sense_key : Sense key of the last failed packet command 598 */ 599typedef union { 600 unsigned all :8; 601 struct { 602#if defined(__LITTLE_ENDIAN_BITFIELD) 603 unsigned ili :1; 604 unsigned eom :1; 605 unsigned abrt :1; 606 unsigned mcr :1; 607 unsigned sense_key :4; 608#elif defined(__BIG_ENDIAN_BITFIELD) 609 unsigned sense_key :4; 610 unsigned mcr :1; 611 unsigned abrt :1; 612 unsigned eom :1; 613 unsigned ili :1; 614#else 615#error "Please fix <asm/byteorder.h>" 616#endif 617 } b; 618} atapi_error_t; 619 620/* 621 * ATAPI floppy Drive Select Register 622 * 623 * sam_lun : Logical unit number 624 * reserved3 : Reserved 625 * drv : The responding drive will be drive 0 (0) or drive 1 (1) 626 * one5 : Should be set to 1 627 * reserved6 : Reserved 628 * one7 : Should be set to 1 629 */ 630typedef union { 631 unsigned all :8; 632 struct { 633#if defined(__LITTLE_ENDIAN_BITFIELD) 634 unsigned sam_lun :3; 635 unsigned reserved3 :1; 636 unsigned drv :1; 637 unsigned one5 :1; 638 unsigned reserved6 :1; 639 unsigned one7 :1; 640#elif defined(__BIG_ENDIAN_BITFIELD) 641 unsigned one7 :1; 642 unsigned reserved6 :1; 643 unsigned one5 :1; 644 unsigned drv :1; 645 unsigned reserved3 :1; 646 unsigned sam_lun :3; 647#else 648#error "Please fix <asm/byteorder.h>" 649#endif 650 } b; 651} atapi_select_t; 652 653/* 654 * Status returned from various ide_ functions 655 */ 656typedef enum { 657 ide_stopped, /* no drive operation was started */ 658 ide_started, /* a drive operation was started, handler was set */ 659} ide_startstop_t; 660 661struct ide_driver_s; 662struct ide_settings_s; 663 664typedef struct ide_drive_s { 665 char name[4]; /* drive name, such as "hda" */ 666 char driver_req[10]; /* requests specific driver */ 667 668 request_queue_t *queue; /* request queue */ 669 670 struct request *rq; /* current request */ 671 struct ide_drive_s *next; /* circular list of hwgroup drives */ 672 void *driver_data; /* extra driver data */ 673 struct hd_driveid *id; /* drive model identification info */ 674 struct proc_dir_entry *proc; /* /proc/ide/ directory entry */ 675 struct ide_settings_s *settings;/* /proc/ide/ drive settings */ 676 char devfs_name[64]; /* devfs crap */ 677 678 struct hwif_s *hwif; /* actually (ide_hwif_t *) */ 679 680 unsigned long sleep; /* sleep until this time */ 681 unsigned long service_start; /* time we started last request */ 682 unsigned long service_time; /* service time of last request */ 683 unsigned long timeout; /* max time to wait for irq */ 684 685 special_t special; /* special action flags */ 686 select_t select; /* basic drive/head select reg value */ 687 688 u8 keep_settings; /* restore settings after drive reset */ 689 u8 autodma; /* device can safely use dma on host */ 690 u8 using_dma; /* disk is using dma for read/write */ 691 u8 retry_pio; /* retrying dma capable host in pio */ 692 u8 state; /* retry state */ 693 u8 waiting_for_dma; /* dma currently in progress */ 694 u8 unmask; /* okay to unmask other irqs */ 695 u8 bswap; /* byte swap data */ 696 u8 dsc_overlap; /* DSC overlap */ 697 u8 nice1; /* give potential excess bandwidth */ 698 699 unsigned present : 1; /* drive is physically present */ 700 unsigned dead : 1; /* device ejected hint */ 701 unsigned id_read : 1; /* 1=id read from disk 0 = synthetic */ 702 unsigned noprobe : 1; /* from: hdx=noprobe */ 703 unsigned removable : 1; /* 1 if need to do check_media_change */ 704 unsigned attach : 1; /* needed for removable devices */ 705 unsigned is_flash : 1; /* 1 if probed as flash */ 706 unsigned forced_geom : 1; /* 1 if hdx=c,h,s was given at boot */ 707 unsigned no_unmask : 1; /* disallow setting unmask bit */ 708 unsigned no_io_32bit : 1; /* disallow enabling 32bit I/O */ 709 unsigned atapi_overlap : 1; /* ATAPI overlap (not supported) */ 710 unsigned nice0 : 1; /* give obvious excess bandwidth */ 711 unsigned nice2 : 1; /* give a share in our own bandwidth */ 712 unsigned doorlocking : 1; /* for removable only: door lock/unlock works */ 713 unsigned autotune : 2; /* 0=default, 1=autotune, 2=noautotune */ 714 unsigned remap_0_to_1 : 1; /* 0=noremap, 1=remap 0->1 (for EZDrive) */ 715 unsigned blocked : 1; /* 1=powermanagment told us not to do anything, so sleep nicely */ 716 unsigned vdma : 1; /* 1=doing PIO over DMA 0=doing normal DMA */ 717 unsigned addressing; /* : 3; 718 * 0=28-bit 719 * 1=48-bit 720 * 2=48-bit doing 28-bit 721 * 3=64-bit 722 */ 723 unsigned scsi : 1; /* 0=default, 1=ide-scsi emulation */ 724 unsigned sleeping : 1; /* 1=sleeping & sleep field valid */ 725 unsigned post_reset : 1; 726 727 u8 quirk_list; /* considered quirky, set for a specific host */ 728 u8 init_speed; /* transfer rate set at boot */ 729 u8 pio_speed; /* unused by core, used by some drivers for fallback from DMA */ 730 u8 current_speed; /* current transfer rate set */ 731 u8 dn; /* now wide spread use */ 732 u8 wcache; /* status of write cache */ 733 u8 acoustic; /* acoustic management */ 734 u8 media; /* disk, cdrom, tape, floppy, ... */ 735 u8 ctl; /* "normal" value for IDE_CONTROL_REG */ 736 u8 ready_stat; /* min status value for drive ready */ 737 u8 mult_count; /* current multiple sector setting */ 738 u8 mult_req; /* requested multiple sector setting */ 739 u8 tune_req; /* requested drive tuning setting */ 740 u8 io_32bit; /* 0=16-bit, 1=32-bit, 2/3=32bit+sync */ 741 u8 bad_wstat; /* used for ignoring WRERR_STAT */ 742 u8 nowerr; /* used for ignoring WRERR_STAT */ 743 u8 sect0; /* offset of first sector for DM6:DDO */ 744 u8 head; /* "real" number of heads */ 745 u8 sect; /* "real" sectors per track */ 746 u8 bios_head; /* BIOS/fdisk/LILO number of heads */ 747 u8 bios_sect; /* BIOS/fdisk/LILO sectors per track */ 748 749 unsigned int bios_cyl; /* BIOS/fdisk/LILO number of cyls */ 750 unsigned int cyl; /* "real" number of cyls */ 751 unsigned int drive_data; /* use by tuneproc/selectproc */ 752 unsigned int usage; /* current "open()" count for drive */ 753 unsigned int failures; /* current failure count */ 754 unsigned int max_failures; /* maximum allowed failure count */ 755 756 u64 capacity64; /* total number of sectors */ 757 758 int lun; /* logical unit */ 759 int crc_count; /* crc counter to reduce drive speed */ 760 struct list_head list; 761 struct device gendev; 762 struct semaphore gendev_rel_sem; /* to deal with device release() */ 763} ide_drive_t; 764 765#define to_ide_device(dev)container_of(dev, ide_drive_t, gendev) 766 767#define IDE_CHIPSET_PCI_MASK \ 768 ((1<<ide_pci)|(1<<ide_cmd646)|(1<<ide_ali14xx)) 769#define IDE_CHIPSET_IS_PCI(c) ((IDE_CHIPSET_PCI_MASK >> (c)) & 1) 770 771struct ide_pci_device_s; 772 773typedef struct hwif_s { 774 struct hwif_s *next; /* for linked-list in ide_hwgroup_t */ 775 struct hwif_s *mate; /* other hwif from same PCI chip */ 776 struct hwgroup_s *hwgroup; /* actually (ide_hwgroup_t *) */ 777 struct proc_dir_entry *proc; /* /proc/ide/ directory entry */ 778 779 char name[6]; /* name of interface, eg. "ide0" */ 780 781 /* task file registers for pata and sata */ 782 unsigned long io_ports[IDE_NR_PORTS]; 783 unsigned long sata_scr[SATA_NR_PORTS]; 784 unsigned long sata_misc[SATA_NR_PORTS]; 785 786 hw_regs_t hw; /* Hardware info */ 787 ide_drive_t drives[MAX_DRIVES]; /* drive info */ 788 789 u8 major; /* our major number */ 790 u8 index; /* 0 for ide0; 1 for ide1; ... */ 791 u8 channel; /* for dual-port chips: 0=primary, 1=secondary */ 792 u8 straight8; /* Alan's straight 8 check */ 793 u8 bus_state; /* power state of the IDE bus */ 794 795 u8 atapi_dma; /* host supports atapi_dma */ 796 u8 ultra_mask; 797 u8 mwdma_mask; 798 u8 swdma_mask; 799 800 hwif_chipset_t chipset; /* sub-module for tuning.. */ 801 802 struct pci_dev *pci_dev; /* for pci chipsets */ 803 struct ide_pci_device_s *cds; /* chipset device struct */ 804 805 void (*rw_disk)(ide_drive_t *, struct request *); 806 807#if 0 808 ide_hwif_ops_t *hwifops; 809#else 810 /* routine to tune PIO mode for drives */ 811 void (*tuneproc)(ide_drive_t *, u8); 812 /* routine to retune DMA modes for drives */ 813 int (*speedproc)(ide_drive_t *, u8); 814 /* tweaks hardware to select drive */ 815 void (*selectproc)(ide_drive_t *); 816 /* chipset polling based on hba specifics */ 817 int (*reset_poll)(ide_drive_t *); 818 /* chipset specific changes to default for device-hba resets */ 819 void (*pre_reset)(ide_drive_t *); 820 /* routine to reset controller after a disk reset */ 821 void (*resetproc)(ide_drive_t *); 822 /* special interrupt handling for shared pci interrupts */ 823 void (*intrproc)(ide_drive_t *); 824 /* special host masking for drive selection */ 825 void (*maskproc)(ide_drive_t *, int); 826 /* check host's drive quirk list */ 827 int (*quirkproc)(ide_drive_t *); 828 /* driver soft-power interface */ 829 int (*busproc)(ide_drive_t *, int); 830// /* host rate limiter */ 831// u8 (*ratemask)(ide_drive_t *); 832// /* device rate limiter */ 833// u8 (*ratefilter)(ide_drive_t *, u8); 834#endif 835 836 void (*ata_input_data)(ide_drive_t *, void *, u32); 837 void (*ata_output_data)(ide_drive_t *, void *, u32); 838 839 void (*atapi_input_bytes)(ide_drive_t *, void *, u32); 840 void (*atapi_output_bytes)(ide_drive_t *, void *, u32); 841 842 int (*dma_setup)(ide_drive_t *); 843 void (*dma_exec_cmd)(ide_drive_t *, u8); 844 void (*dma_start)(ide_drive_t *); 845 int (*ide_dma_end)(ide_drive_t *drive); 846 int (*ide_dma_check)(ide_drive_t *drive); 847 int (*ide_dma_on)(ide_drive_t *drive); 848 int (*ide_dma_off_quietly)(ide_drive_t *drive); 849 int (*ide_dma_test_irq)(ide_drive_t *drive); 850 int (*ide_dma_host_on)(ide_drive_t *drive); 851 int (*ide_dma_host_off)(ide_drive_t *drive); 852 int (*ide_dma_lostirq)(ide_drive_t *drive); 853 int (*ide_dma_timeout)(ide_drive_t *drive); 854 855 void (*OUTB)(u8 addr, unsigned long port); 856 void (*OUTBSYNC)(ide_drive_t *drive, u8 addr, unsigned long port); 857 void (*OUTW)(u16 addr, unsigned long port); 858 void (*OUTL)(u32 addr, unsigned long port); 859 void (*OUTSW)(unsigned long port, void *addr, u32 count); 860 void (*OUTSL)(unsigned long port, void *addr, u32 count); 861 862 u8 (*INB)(unsigned long port); 863 u16 (*INW)(unsigned long port); 864 u32 (*INL)(unsigned long port); 865 void (*INSW)(unsigned long port, void *addr, u32 count); 866 void (*INSL)(unsigned long port, void *addr, u32 count); 867 868 /* dma physical region descriptor table (cpu view) */ 869 unsigned int *dmatable_cpu; 870 /* dma physical region descriptor table (dma view) */ 871 dma_addr_t dmatable_dma; 872 /* Scatter-gather list used to build the above */ 873 struct scatterlist *sg_table; 874 int sg_max_nents; /* Maximum number of entries in it */ 875 int sg_nents; /* Current number of entries in it */ 876 int sg_dma_direction; /* dma transfer direction */ 877 878 /* data phase of the active command (currently only valid for PIO/DMA) */ 879 int data_phase; 880 881 unsigned int nsect; 882 unsigned int nleft; 883 unsigned int cursg; 884 unsigned int cursg_ofs; 885 886 int mmio; /* hosts iomio (0) or custom (2) select */ 887 int rqsize; /* max sectors per request */ 888 int irq; /* our irq number */ 889 890 unsigned long dma_master; /* reference base addr dmabase */ 891 unsigned long dma_base; /* base addr for dma ports */ 892 unsigned long dma_command; /* dma command register */ 893 unsigned long dma_vendor1; /* dma vendor 1 register */ 894 unsigned long dma_status; /* dma status register */ 895 unsigned long dma_vendor3; /* dma vendor 3 register */ 896 unsigned long dma_prdtable; /* actual prd table address */ 897 unsigned long dma_base2; /* extended base addr for dma ports */ 898 899 unsigned dma_extra; /* extra addr for dma ports */ 900 unsigned long config_data; /* for use by chipset-specific code */ 901 unsigned long select_data; /* for use by chipset-specific code */ 902 903 unsigned noprobe : 1; /* don't probe for this interface */ 904 unsigned present : 1; /* this interface exists */ 905 unsigned hold : 1; /* this interface is always present */ 906 unsigned serialized : 1; /* serialized all channel operation */ 907 unsigned sharing_irq: 1; /* 1 = sharing irq with another hwif */ 908 unsigned reset : 1; /* reset after probe */ 909 unsigned autodma : 1; /* auto-attempt using DMA at boot */ 910 unsigned udma_four : 1; /* 1=ATA-66 capable, 0=default */ 911 unsigned no_lba48 : 1; /* 1 = cannot do LBA48 */ 912 unsigned no_lba48_dma : 1; /* 1 = cannot do LBA48 DMA */ 913 unsigned no_dsc : 1; /* 0 default, 1 dsc_overlap disabled */ 914 unsigned auto_poll : 1; /* supports nop auto-poll */ 915 unsigned sg_mapped : 1; /* sg_table and sg_nents are ready */ 916 917 struct device gendev; 918 struct semaphore gendev_rel_sem; /* To deal with device release() */ 919 920 void *hwif_data; /* extra hwif data */ 921 922 unsigned dma; 923 924 void (*led_act)(void *data, int rw); 925} ____cacheline_maxaligned_in_smp ide_hwif_t; 926 927/* 928 * internal ide interrupt handler type 929 */ 930typedef ide_startstop_t (ide_pre_handler_t)(ide_drive_t *, struct request *); 931typedef ide_startstop_t (ide_handler_t)(ide_drive_t *); 932typedef int (ide_expiry_t)(ide_drive_t *); 933 934typedef struct hwgroup_s { 935 /* irq handler, if active */ 936 ide_startstop_t (*handler)(ide_drive_t *); 937 /* irq handler, suspended if active */ 938 ide_startstop_t (*handler_save)(ide_drive_t *); 939 /* BOOL: protects all fields below */ 940 volatile int busy; 941 /* BOOL: wake us up on timer expiry */ 942 unsigned int sleeping : 1; 943 /* BOOL: polling active & poll_timeout field valid */ 944 unsigned int polling : 1; 945 /* current drive */ 946 ide_drive_t *drive; 947 /* ptr to current hwif in linked-list */ 948 ide_hwif_t *hwif; 949 950 /* for pci chipsets */ 951 struct pci_dev *pci_dev; 952 /* chipset device struct */ 953 struct ide_pci_device_s *cds; 954 955 /* current request */ 956 struct request *rq; 957 /* failsafe timer */ 958 struct timer_list timer; 959 /* local copy of current write rq */ 960 struct request wrq; 961 /* timeout value during long polls */ 962 unsigned long poll_timeout; 963 /* queried upon timeouts */ 964 int (*expiry)(ide_drive_t *); 965 /* ide_system_bus_speed */ 966 int pio_clock; 967 968 unsigned char cmd_buf[4]; 969} ide_hwgroup_t; 970 971/* structure attached to the request for IDE_TASK_CMDS */ 972 973/* 974 * configurable drive settings 975 */ 976 977#define TYPE_INT 0 978#define TYPE_INTA 1 979#define TYPE_BYTE 2 980#define TYPE_SHORT 3 981 982#define SETTING_READ (1 << 0) 983#define SETTING_WRITE (1 << 1) 984#define SETTING_RW (SETTING_READ | SETTING_WRITE) 985 986typedef int (ide_procset_t)(ide_drive_t *, int); 987typedef struct ide_settings_s { 988 char *name; 989 int rw; 990 int read_ioctl; 991 int write_ioctl; 992 int data_type; 993 int min; 994 int max; 995 int mul_factor; 996 int div_factor; 997 void *data; 998 ide_procset_t *set; 999 int auto_remove; 1000 struct ide_settings_s *next; 1001} ide_settings_t; 1002 1003extern struct semaphore ide_setting_sem; 1004extern int ide_add_setting(ide_drive_t *drive, const char *name, int rw, int read_ioctl, int write_ioctl, int data_type, int min, int max, int mul_factor, int div_factor, void *data, ide_procset_t *set); 1005extern ide_settings_t *ide_find_setting_by_name(ide_drive_t *drive, char *name); 1006extern int ide_read_setting(ide_drive_t *t, ide_settings_t *setting); 1007extern int ide_write_setting(ide_drive_t *drive, ide_settings_t *setting, int val); 1008extern void ide_add_generic_settings(ide_drive_t *drive); 1009 1010/* 1011 * /proc/ide interface 1012 */ 1013typedef struct { 1014 const char *name; 1015 mode_t mode; 1016 read_proc_t *read_proc; 1017 write_proc_t *write_proc; 1018} ide_proc_entry_t; 1019 1020#ifdef CONFIG_PROC_FS 1021extern struct proc_dir_entry *proc_ide_root; 1022 1023extern void proc_ide_create(void); 1024extern void proc_ide_destroy(void); 1025extern void create_proc_ide_interfaces(void); 1026void destroy_proc_ide_interface(ide_hwif_t *); 1027extern void ide_add_proc_entries(struct proc_dir_entry *, ide_proc_entry_t *, void *); 1028extern void ide_remove_proc_entries(struct proc_dir_entry *, ide_proc_entry_t *); 1029read_proc_t proc_ide_read_capacity; 1030read_proc_t proc_ide_read_geometry; 1031 1032#ifdef CONFIG_BLK_DEV_IDEPCI 1033void ide_pci_create_host_proc(const char *, get_info_t *); 1034#endif 1035 1036/* 1037 * Standard exit stuff: 1038 */ 1039#define PROC_IDE_READ_RETURN(page,start,off,count,eof,len) \ 1040{ \ 1041 len -= off; \ 1042 if (len < count) { \ 1043 *eof = 1; \ 1044 if (len <= 0) \ 1045 return 0; \ 1046 } else \ 1047 len = count; \ 1048 *start = page + off; \ 1049 return len; \ 1050} 1051#else 1052static inline void create_proc_ide_interfaces(void) { ; } 1053static inline void destroy_proc_ide_interface(ide_hwif_t *hwif) { ; } 1054#define PROC_IDE_READ_RETURN(page,start,off,count,eof,len) return 0; 1055#endif 1056 1057/* 1058 * Power Management step value (rq->pm->pm_step). 1059 * 1060 * The step value starts at 0 (ide_pm_state_start_suspend) for a 1061 * suspend operation or 1000 (ide_pm_state_start_resume) for a 1062 * resume operation. 1063 * 1064 * For each step, the core calls the subdriver start_power_step() first. 1065 * This can return: 1066 * - ide_stopped : In this case, the core calls us back again unless 1067 * step have been set to ide_power_state_completed. 1068 * - ide_started : In this case, the channel is left busy until an 1069 * async event (interrupt) occurs. 1070 * Typically, start_power_step() will issue a taskfile request with 1071 * do_rw_taskfile(). 1072 * 1073 * Upon reception of the interrupt, the core will call complete_power_step() 1074 * with the error code if any. This routine should update the step value 1075 * and return. It should not start a new request. The core will call 1076 * start_power_step for the new step value, unless step have been set to 1077 * ide_power_state_completed. 1078 * 1079 * Subdrivers are expected to define their own additional power 1080 * steps from 1..999 for suspend and from 1001..1999 for resume, 1081 * other values are reserved for future use. 1082 */ 1083 1084enum { 1085 ide_pm_state_completed = -1, 1086 ide_pm_state_start_suspend = 0, 1087 ide_pm_state_start_resume = 1000, 1088}; 1089 1090/* 1091 * Subdrivers support. 1092 * 1093 * The gendriver.owner field should be set to the module owner of this driver. 1094 * The gendriver.name field should be set to the name of this driver 1095 */ 1096typedef struct ide_driver_s { 1097 const char *version; 1098 u8 media; 1099 unsigned supports_dsc_overlap : 1; 1100 ide_startstop_t (*do_request)(ide_drive_t *, struct request *, sector_t); 1101 int (*end_request)(ide_drive_t *, int, int); 1102 ide_startstop_t (*error)(ide_drive_t *, struct request *rq, u8, u8); 1103 ide_startstop_t (*abort)(ide_drive_t *, struct request *rq); 1104 int (*ioctl)(ide_drive_t *, struct inode *, struct file *, unsigned int, unsigned long); 1105 ide_proc_entry_t *proc; 1106 void (*ata_prebuilder)(ide_drive_t *); 1107 void (*atapi_prebuilder)(ide_drive_t *); 1108 struct device_driver gen_driver; 1109} ide_driver_t; 1110 1111int generic_ide_ioctl(ide_drive_t *, struct file *, struct block_device *, unsigned, unsigned long); 1112 1113/* 1114 * ide_hwifs[] is the master data structure used to keep track 1115 * of just about everything in ide.c. Whenever possible, routines 1116 * should be using pointers to a drive (ide_drive_t *) or 1117 * pointers to a hwif (ide_hwif_t *), rather than indexing this 1118 * structure directly (the allocation/layout may change!). 1119 * 1120 */ 1121#ifndef _IDE_C 1122extern ide_hwif_t ide_hwifs[]; /* master data repository */ 1123#endif 1124extern int noautodma; 1125 1126extern int ide_end_request (ide_drive_t *drive, int uptodate, int nrsecs); 1127extern int __ide_end_request (ide_drive_t *drive, struct request *rq, int uptodate, int nrsecs); 1128 1129/* 1130 * This is used on exit from the driver to designate the next irq handler 1131 * and also to start the safety timer. 1132 */ 1133extern void ide_set_handler (ide_drive_t *drive, ide_handler_t *handler, unsigned int timeout, ide_expiry_t *expiry); 1134 1135/* 1136 * This is used on exit from the driver to designate the next irq handler 1137 * and start the safety time safely and atomically from the IRQ handler 1138 * with respect to the command issue (which it also does) 1139 */ 1140extern void ide_execute_command(ide_drive_t *, task_ioreg_t cmd, ide_handler_t *, unsigned int, ide_expiry_t *); 1141 1142ide_startstop_t __ide_error(ide_drive_t *, struct request *, u8, u8); 1143 1144/* 1145 * ide_error() takes action based on the error returned by the controller. 1146 * The caller should return immediately after invoking this. 1147 * 1148 * (drive, msg, status) 1149 */ 1150ide_startstop_t ide_error (ide_drive_t *drive, const char *msg, byte stat); 1151 1152ide_startstop_t __ide_abort(ide_drive_t *, struct request *); 1153 1154/* 1155 * Abort a running command on the controller triggering the abort 1156 * from a host side, non error situation 1157 * (drive, msg) 1158 */ 1159extern ide_startstop_t ide_abort(ide_drive_t *, const char *); 1160 1161extern void ide_fix_driveid(struct hd_driveid *); 1162/* 1163 * ide_fixstring() cleans up and (optionally) byte-swaps a text string, 1164 * removing leading/trailing blanks and compressing internal blanks. 1165 * It is primarily used to tidy up the model name/number fields as 1166 * returned by the WIN_[P]IDENTIFY commands. 1167 * 1168 * (s, bytecount, byteswap) 1169 */ 1170extern void ide_fixstring(u8 *, const int, const int); 1171 1172/* 1173 * This routine busy-waits for the drive status to be not "busy". 1174 * It then checks the status for all of the "good" bits and none 1175 * of the "bad" bits, and if all is okay it returns 0. All other 1176 * cases return 1 after doing "*startstop = ide_error()", and the 1177 * caller should return the updated value of "startstop" in this case. 1178 * "startstop" is unchanged when the function returns 0; 1179 * (startstop, drive, good, bad, timeout) 1180 */ 1181extern int ide_wait_stat(ide_startstop_t *, ide_drive_t *, u8, u8, unsigned long); 1182 1183/* 1184 * Start a reset operation for an IDE interface. 1185 * The caller should return immediately after invoking this. 1186 */ 1187extern ide_startstop_t ide_do_reset (ide_drive_t *); 1188 1189/* 1190 * This function is intended to be used prior to invoking ide_do_drive_cmd(). 1191 */ 1192extern void ide_init_drive_cmd (struct request *rq); 1193 1194/* 1195 * this function returns error location sector offset in case of a write error 1196 */ 1197extern u64 ide_get_error_location(ide_drive_t *, char *); 1198 1199/* 1200 * "action" parameter type for ide_do_drive_cmd() below. 1201 */ 1202typedef enum { 1203 ide_wait, /* insert rq at end of list, and wait for it */ 1204 ide_preempt, /* insert rq in front of current request */ 1205 ide_head_wait, /* insert rq in front of current request and wait for it */ 1206 ide_end /* insert rq at end of list, but don't wait for it */ 1207} ide_action_t; 1208 1209extern int ide_do_drive_cmd(ide_drive_t *, struct request *, ide_action_t); 1210 1211/* 1212 * Clean up after success/failure of an explicit drive cmd. 1213 * stat/err are used only when (HWGROUP(drive)->rq->cmd == IDE_DRIVE_CMD). 1214 * stat/err are used only when (HWGROUP(drive)->rq->cmd == IDE_DRIVE_TASK_MASK). 1215 * 1216 * (ide_drive_t *drive, u8 stat, u8 err) 1217 */ 1218extern void ide_end_drive_cmd(ide_drive_t *, u8, u8); 1219 1220/* 1221 * Issue ATA command and wait for completion. 1222 * Use for implementing commands in kernel 1223 * 1224 * (ide_drive_t *drive, u8 cmd, u8 nsect, u8 feature, u8 sectors, u8 *buf) 1225 */ 1226extern int ide_wait_cmd(ide_drive_t *, u8, u8, u8, u8, u8 *); 1227 1228typedef struct ide_task_s { 1229/* 1230 * struct hd_drive_task_hdr tf; 1231 * task_struct_t tf; 1232 * struct hd_drive_hob_hdr hobf; 1233 * hob_struct_t hobf; 1234 */ 1235 task_ioreg_t tfRegister[8]; 1236 task_ioreg_t hobRegister[8]; 1237 ide_reg_valid_t tf_out_flags; 1238 ide_reg_valid_t tf_in_flags; 1239 int data_phase; 1240 int command_type; 1241 ide_pre_handler_t *prehandler; 1242 ide_handler_t *handler; 1243 struct request *rq; /* copy of request */ 1244 void *special; /* valid_t generally */ 1245} ide_task_t; 1246 1247extern u32 ide_read_24(ide_drive_t *); 1248 1249extern void SELECT_DRIVE(ide_drive_t *); 1250extern void SELECT_INTERRUPT(ide_drive_t *); 1251extern void SELECT_MASK(ide_drive_t *, int); 1252extern void QUIRK_LIST(ide_drive_t *); 1253 1254extern int drive_is_ready(ide_drive_t *); 1255extern int wait_for_ready(ide_drive_t *, int /* timeout */); 1256 1257/* 1258 * taskfile io for disks for now...and builds request from ide_ioctl 1259 */ 1260extern ide_startstop_t do_rw_taskfile(ide_drive_t *, ide_task_t *); 1261 1262/* 1263 * Special Flagged Register Validation Caller 1264 */ 1265extern ide_startstop_t flagged_taskfile(ide_drive_t *, ide_task_t *); 1266 1267extern ide_startstop_t set_multmode_intr(ide_drive_t *); 1268extern ide_startstop_t set_geometry_intr(ide_drive_t *); 1269extern ide_startstop_t recal_intr(ide_drive_t *); 1270extern ide_startstop_t task_no_data_intr(ide_drive_t *); 1271extern ide_startstop_t task_in_intr(ide_drive_t *); 1272extern ide_startstop_t pre_task_out_intr(ide_drive_t *, struct request *); 1273 1274extern int ide_raw_taskfile(ide_drive_t *, ide_task_t *, u8 *); 1275 1276int ide_taskfile_ioctl(ide_drive_t *, unsigned int, unsigned long); 1277int ide_cmd_ioctl(ide_drive_t *, unsigned int, unsigned long); 1278int ide_task_ioctl(ide_drive_t *, unsigned int, unsigned long); 1279 1280extern int system_bus_clock(void); 1281 1282extern int ide_driveid_update(ide_drive_t *); 1283extern int ide_ata66_check(ide_drive_t *, ide_task_t *); 1284extern int ide_config_drive_speed(ide_drive_t *, u8); 1285extern u8 eighty_ninty_three (ide_drive_t *); 1286extern int set_transfer(ide_drive_t *, ide_task_t *); 1287extern int taskfile_lib_get_identify(ide_drive_t *drive, u8 *); 1288 1289extern int ide_wait_not_busy(ide_hwif_t *hwif, unsigned long timeout); 1290 1291/* 1292 * ide_stall_queue() can be used by a drive to give excess bandwidth back 1293 * to the hwgroup by sleeping for timeout jiffies. 1294 */ 1295extern void ide_stall_queue(ide_drive_t *drive, unsigned long timeout); 1296 1297extern int ide_spin_wait_hwgroup(ide_drive_t *); 1298extern void ide_timer_expiry(unsigned long); 1299extern irqreturn_t ide_intr(int irq, void *dev_id, struct pt_regs *regs); 1300extern void do_ide_request(request_queue_t *); 1301extern void ide_init_subdrivers(void); 1302 1303void ide_init_disk(struct gendisk *, ide_drive_t *); 1304 1305extern int ideprobe_init(void); 1306 1307extern void ide_scan_pcibus(int scan_direction) __init; 1308extern int __ide_pci_register_driver(struct pci_driver *driver, struct module *owner); 1309#define ide_pci_register_driver(d) __ide_pci_register_driver(d, THIS_MODULE) 1310extern void ide_pci_unregister_driver(struct pci_driver *driver); 1311void ide_pci_setup_ports(struct pci_dev *, struct ide_pci_device_s *, int, ata_index_t *); 1312extern void ide_setup_pci_noise (struct pci_dev *dev, struct ide_pci_device_s *d); 1313 1314extern void default_hwif_iops(ide_hwif_t *); 1315extern void default_hwif_mmiops(ide_hwif_t *); 1316extern void default_hwif_transport(ide_hwif_t *); 1317 1318void ide_register_subdriver(ide_drive_t *, ide_driver_t *); 1319void ide_unregister_subdriver(ide_drive_t *, ide_driver_t *); 1320 1321#define ON_BOARD 1 1322#define NEVER_BOARD 0 1323 1324#ifdef CONFIG_BLK_DEV_OFFBOARD 1325# define OFF_BOARD ON_BOARD 1326#else /* CONFIG_BLK_DEV_OFFBOARD */ 1327# define OFF_BOARD NEVER_BOARD 1328#endif /* CONFIG_BLK_DEV_OFFBOARD */ 1329 1330#define NODMA 0 1331#define NOAUTODMA 1 1332#define AUTODMA 2 1333 1334typedef struct ide_pci_enablebit_s { 1335 u8 reg; /* byte pci reg holding the enable-bit */ 1336 u8 mask; /* mask to isolate the enable-bit */ 1337 u8 val; /* value of masked reg when "enabled" */ 1338} ide_pci_enablebit_t; 1339 1340enum { 1341 /* Uses ISA control ports not PCI ones. */ 1342 IDEPCI_FLAG_ISA_PORTS = (1 << 0), 1343 IDEPCI_FLAG_FORCE_PDC = (1 << 1), 1344}; 1345 1346typedef struct ide_pci_device_s { 1347 char *name; 1348 int (*init_setup)(struct pci_dev *, struct ide_pci_device_s *); 1349 void (*init_setup_dma)(struct pci_dev *, struct ide_pci_device_s *, ide_hwif_t *); 1350 unsigned int (*init_chipset)(struct pci_dev *, const char *); 1351 void (*init_iops)(ide_hwif_t *); 1352 void (*init_hwif)(ide_hwif_t *); 1353 void (*init_dma)(ide_hwif_t *, unsigned long); 1354 void (*fixup)(ide_hwif_t *); 1355 u8 channels; 1356 u8 autodma; 1357 ide_pci_enablebit_t enablebits[2]; 1358 u8 bootable; 1359 unsigned int extra; 1360 struct ide_pci_device_s *next; 1361 u8 flags; 1362} ide_pci_device_t; 1363 1364extern int ide_setup_pci_device(struct pci_dev *, ide_pci_device_t *); 1365extern int ide_setup_pci_devices(struct pci_dev *, struct pci_dev *, ide_pci_device_t *); 1366 1367void ide_map_sg(ide_drive_t *, struct request *); 1368void ide_init_sg_cmd(ide_drive_t *, struct request *); 1369 1370#define BAD_DMA_DRIVE 0 1371#define GOOD_DMA_DRIVE 1 1372 1373#ifdef CONFIG_BLK_DEV_IDEDMA 1374int __ide_dma_bad_drive(ide_drive_t *); 1375int __ide_dma_good_drive(ide_drive_t *); 1376int ide_use_dma(ide_drive_t *); 1377int __ide_dma_off(ide_drive_t *); 1378void ide_dma_verbose(ide_drive_t *); 1379ide_startstop_t ide_dma_intr(ide_drive_t *); 1380 1381#ifdef CONFIG_BLK_DEV_IDEDMA_PCI 1382extern int ide_build_sglist(ide_drive_t *, struct request *); 1383extern int ide_build_dmatable(ide_drive_t *, struct request *); 1384extern void ide_destroy_dmatable(ide_drive_t *); 1385extern int ide_release_dma(ide_hwif_t *); 1386extern void ide_setup_dma(ide_hwif_t *, unsigned long, unsigned int); 1387 1388extern int __ide_dma_host_off(ide_drive_t *); 1389extern int __ide_dma_off_quietly(ide_drive_t *); 1390extern int __ide_dma_host_on(ide_drive_t *); 1391extern int __ide_dma_on(ide_drive_t *); 1392extern int __ide_dma_check(ide_drive_t *); 1393extern int ide_dma_setup(ide_drive_t *); 1394extern void ide_dma_start(ide_drive_t *); 1395extern int __ide_dma_end(ide_drive_t *); 1396extern int __ide_dma_lostirq(ide_drive_t *); 1397extern int __ide_dma_timeout(ide_drive_t *); 1398#endif /* CONFIG_BLK_DEV_IDEDMA_PCI */ 1399 1400#else 1401static inline int ide_use_dma(ide_drive_t *drive) { return 0; } 1402static inline int __ide_dma_off(ide_drive_t *drive) { return 0; } 1403static inline void ide_dma_verbose(ide_drive_t *drive) { ; } 1404#endif /* CONFIG_BLK_DEV_IDEDMA */ 1405 1406#ifndef CONFIG_BLK_DEV_IDEDMA_PCI 1407static inline void ide_release_dma(ide_hwif_t *drive) {;} 1408#endif 1409 1410extern int ide_hwif_request_regions(ide_hwif_t *hwif); 1411extern void ide_hwif_release_regions(ide_hwif_t* hwif); 1412extern void ide_unregister (unsigned int index); 1413 1414void ide_register_region(struct gendisk *); 1415void ide_unregister_region(struct gendisk *); 1416 1417void ide_undecoded_slave(ide_hwif_t *); 1418 1419int probe_hwif_init_with_fixup(ide_hwif_t *, void (*)(ide_hwif_t *)); 1420extern int probe_hwif_init(ide_hwif_t *); 1421 1422static inline void *ide_get_hwifdata (ide_hwif_t * hwif) 1423{ 1424 return hwif->hwif_data; 1425} 1426 1427static inline void ide_set_hwifdata (ide_hwif_t * hwif, void *data) 1428{ 1429 hwif->hwif_data = data; 1430} 1431 1432/* ide-lib.c */ 1433extern u8 ide_dma_speed(ide_drive_t *drive, u8 mode); 1434extern u8 ide_rate_filter(u8 mode, u8 speed); 1435extern int ide_dma_enable(ide_drive_t *drive); 1436extern char *ide_xfer_verbose(u8 xfer_rate); 1437extern void ide_toggle_bounce(ide_drive_t *drive, int on); 1438extern int ide_set_xfer_rate(ide_drive_t *drive, u8 rate); 1439 1440u8 ide_dump_status(ide_drive_t *, const char *, u8); 1441 1442typedef struct ide_pio_timings_s { 1443 int setup_time; /* Address setup (ns) minimum */ 1444 int active_time; /* Active pulse (ns) minimum */ 1445 int cycle_time; /* Cycle time (ns) minimum = (setup + active + recovery) */ 1446} ide_pio_timings_t; 1447 1448typedef struct ide_pio_data_s { 1449 u8 pio_mode; 1450 u8 use_iordy; 1451 u8 overridden; 1452 u8 blacklisted; 1453 unsigned int cycle_time; 1454} ide_pio_data_t; 1455 1456extern u8 ide_get_best_pio_mode (ide_drive_t *drive, u8 mode_wanted, u8 max_mode, ide_pio_data_t *d); 1457extern const ide_pio_timings_t ide_pio_timings[6]; 1458 1459 1460extern spinlock_t ide_lock; 1461extern struct semaphore ide_cfg_sem; 1462/* 1463 * Structure locking: 1464 * 1465 * ide_cfg_sem and ide_lock together protect changes to 1466 * ide_hwif_t->{next,hwgroup} 1467 * ide_drive_t->next 1468 * 1469 * ide_hwgroup_t->busy: ide_lock 1470 * ide_hwgroup_t->hwif: ide_lock 1471 * ide_hwif_t->mate: constant, no locking 1472 * ide_drive_t->hwif: constant, no locking 1473 */ 1474 1475#define local_irq_set(flags) do { local_save_flags((flags)); local_irq_enable(); } while (0) 1476 1477extern struct bus_type ide_bus_type; 1478 1479/* check if CACHE FLUSH (EXT) command is supported (bits defined in ATA-6) */ 1480#define ide_id_has_flush_cache(id) ((id)->cfs_enable_2 & 0x3000) 1481 1482/* some Maxtor disks have bit 13 defined incorrectly so check bit 10 too */ 1483#define ide_id_has_flush_cache_ext(id) \ 1484 (((id)->cfs_enable_2 & 0x2400) == 0x2400) 1485 1486static inline int hwif_to_node(ide_hwif_t *hwif) 1487{ 1488 struct pci_dev *dev = hwif->pci_dev; 1489 return dev ? pcibus_to_node(dev->bus) : -1; 1490} 1491 1492#endif /* _IDE_H */