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