at v2.6.28 48 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/init.h> 10#include <linux/ioport.h> 11#include <linux/ata.h> 12#include <linux/blkdev.h> 13#include <linux/proc_fs.h> 14#include <linux/interrupt.h> 15#include <linux/bitops.h> 16#include <linux/bio.h> 17#include <linux/device.h> 18#include <linux/pci.h> 19#include <linux/completion.h> 20#include <linux/pm.h> 21#ifdef CONFIG_BLK_DEV_IDEACPI 22#include <acpi/acpi.h> 23#endif 24#include <asm/byteorder.h> 25#include <asm/system.h> 26#include <asm/io.h> 27#include <asm/mutex.h> 28 29#if defined(CONFIG_CRIS) || defined(CONFIG_FRV) 30# define SUPPORT_VLB_SYNC 0 31#else 32# define SUPPORT_VLB_SYNC 1 33#endif 34 35/* 36 * Used to indicate "no IRQ", should be a value that cannot be an IRQ 37 * number. 38 */ 39 40#define IDE_NO_IRQ (-1) 41 42typedef unsigned char byte; /* used everywhere */ 43 44/* 45 * Probably not wise to fiddle with these 46 */ 47#define ERROR_MAX 8 /* Max read/write errors per sector */ 48#define ERROR_RESET 3 /* Reset controller every 4th retry */ 49#define ERROR_RECAL 1 /* Recalibrate every 2nd retry */ 50 51#define HWIF(drive) ((ide_hwif_t *)((drive)->hwif)) 52#define HWGROUP(drive) ((ide_hwgroup_t *)(HWIF(drive)->hwgroup)) 53 54/* 55 * Definitions for accessing IDE controller registers 56 */ 57#define IDE_NR_PORTS (10) 58 59struct ide_io_ports { 60 unsigned long data_addr; 61 62 union { 63 unsigned long error_addr; /* read: error */ 64 unsigned long feature_addr; /* write: feature */ 65 }; 66 67 unsigned long nsect_addr; 68 unsigned long lbal_addr; 69 unsigned long lbam_addr; 70 unsigned long lbah_addr; 71 72 unsigned long device_addr; 73 74 union { 75 unsigned long status_addr; /*  read: status  */ 76 unsigned long command_addr; /* write: command */ 77 }; 78 79 unsigned long ctl_addr; 80 81 unsigned long irq_addr; 82}; 83 84#define OK_STAT(stat,good,bad) (((stat)&((good)|(bad)))==(good)) 85 86#define BAD_R_STAT (ATA_BUSY | ATA_ERR) 87#define BAD_W_STAT (BAD_R_STAT | ATA_DF) 88#define BAD_STAT (BAD_R_STAT | ATA_DRQ) 89#define DRIVE_READY (ATA_DRDY | ATA_DSC) 90 91#define BAD_CRC (ATA_ABORTED | ATA_ICRC) 92 93#define SATA_NR_PORTS (3) /* 16 possible ?? */ 94 95#define SATA_STATUS_OFFSET (0) 96#define SATA_ERROR_OFFSET (1) 97#define SATA_CONTROL_OFFSET (2) 98 99/* 100 * Our Physical Region Descriptor (PRD) table should be large enough 101 * to handle the biggest I/O request we are likely to see. Since requests 102 * can have no more than 256 sectors, and since the typical blocksize is 103 * two or more sectors, we could get by with a limit of 128 entries here for 104 * the usual worst case. Most requests seem to include some contiguous blocks, 105 * further reducing the number of table entries required. 106 * 107 * The driver reverts to PIO mode for individual requests that exceed 108 * this limit (possible with 512 byte blocksizes, eg. MSDOS f/s), so handling 109 * 100% of all crazy scenarios here is not necessary. 110 * 111 * As it turns out though, we must allocate a full 4KB page for this, 112 * so the two PRD tables (ide0 & ide1) will each get half of that, 113 * allowing each to have about 256 entries (8 bytes each) from this. 114 */ 115#define PRD_BYTES 8 116#define PRD_ENTRIES 256 117 118/* 119 * Some more useful definitions 120 */ 121#define PARTN_BITS 6 /* number of minor dev bits for partitions */ 122#define MAX_DRIVES 2 /* per interface; 2 assumed by lots of code */ 123#define SECTOR_SIZE 512 124 125#define IDE_LARGE_SEEK(b1,b2,t) (((b1) > (b2) + (t)) || ((b2) > (b1) + (t))) 126 127/* 128 * Timeouts for various operations: 129 */ 130enum { 131 /* spec allows up to 20ms */ 132 WAIT_DRQ = HZ / 10, /* 100ms */ 133 /* some laptops are very slow */ 134 WAIT_READY = 5 * HZ, /* 5s */ 135 /* should be less than 3ms (?), if all ATAPI CD is closed at boot */ 136 WAIT_PIDENTIFY = 10 * HZ, /* 10s */ 137 /* worst case when spinning up */ 138 WAIT_WORSTCASE = 30 * HZ, /* 30s */ 139 /* maximum wait for an IRQ to happen */ 140 WAIT_CMD = 10 * HZ, /* 10s */ 141 /* Some drives require a longer IRQ timeout. */ 142 WAIT_FLOPPY_CMD = 50 * HZ, /* 50s */ 143 /* 144 * Some drives (for example, Seagate STT3401A Travan) require a very 145 * long timeout, because they don't return an interrupt or clear their 146 * BSY bit until after the command completes (even retension commands). 147 */ 148 WAIT_TAPE_CMD = 900 * HZ, /* 900s */ 149 /* minimum sleep time */ 150 WAIT_MIN_SLEEP = HZ / 50, /* 20ms */ 151}; 152 153/* 154 * Op codes for special requests to be handled by ide_special_rq(). 155 * Values should be in the range of 0x20 to 0x3f. 156 */ 157#define REQ_DRIVE_RESET 0x20 158#define REQ_DEVSET_EXEC 0x21 159#define REQ_PARK_HEADS 0x22 160#define REQ_UNPARK_HEADS 0x23 161 162/* 163 * Check for an interrupt and acknowledge the interrupt status 164 */ 165struct hwif_s; 166typedef int (ide_ack_intr_t)(struct hwif_s *); 167 168/* 169 * hwif_chipset_t is used to keep track of the specific hardware 170 * chipset used by each IDE interface, if known. 171 */ 172enum { ide_unknown, ide_generic, ide_pci, 173 ide_cmd640, ide_dtc2278, ide_ali14xx, 174 ide_qd65xx, ide_umc8672, ide_ht6560b, 175 ide_rz1000, ide_trm290, 176 ide_cmd646, ide_cy82c693, ide_4drives, 177 ide_pmac, ide_acorn, 178 ide_au1xxx, ide_palm3710 179}; 180 181typedef u8 hwif_chipset_t; 182 183/* 184 * Structure to hold all information about the location of this port 185 */ 186typedef struct hw_regs_s { 187 union { 188 struct ide_io_ports io_ports; 189 unsigned long io_ports_array[IDE_NR_PORTS]; 190 }; 191 192 int irq; /* our irq number */ 193 ide_ack_intr_t *ack_intr; /* acknowledge interrupt */ 194 hwif_chipset_t chipset; 195 struct device *dev, *parent; 196 unsigned long config; 197} hw_regs_t; 198 199void ide_init_port_data(struct hwif_s *, unsigned int); 200void ide_init_port_hw(struct hwif_s *, hw_regs_t *); 201 202static inline void ide_std_init_ports(hw_regs_t *hw, 203 unsigned long io_addr, 204 unsigned long ctl_addr) 205{ 206 unsigned int i; 207 208 for (i = 0; i <= 7; i++) 209 hw->io_ports_array[i] = io_addr++; 210 211 hw->io_ports.ctl_addr = ctl_addr; 212} 213 214/* for IDE PCI controllers in legacy mode, temporary */ 215static inline int __ide_default_irq(unsigned long base) 216{ 217 switch (base) { 218#ifdef CONFIG_IA64 219 case 0x1f0: return isa_irq_to_vector(14); 220 case 0x170: return isa_irq_to_vector(15); 221#else 222 case 0x1f0: return 14; 223 case 0x170: return 15; 224#endif 225 } 226 return 0; 227} 228 229#if defined(CONFIG_ARM) || defined(CONFIG_FRV) || defined(CONFIG_M68K) || \ 230 defined(CONFIG_MIPS) || defined(CONFIG_MN10300) || defined(CONFIG_PARISC) \ 231 || defined(CONFIG_PPC) || defined(CONFIG_SPARC) || defined(CONFIG_SPARC64) 232#include <asm/ide.h> 233#else 234#include <asm-generic/ide_iops.h> 235#endif 236 237#define MAX_HWIFS 10 238 239/* Currently only m68k, apus and m8xx need it */ 240#ifndef IDE_ARCH_ACK_INTR 241# define ide_ack_intr(hwif) (1) 242#endif 243 244/* Currently only Atari needs it */ 245#ifndef IDE_ARCH_LOCK 246# define ide_release_lock() do {} while (0) 247# define ide_get_lock(hdlr, data) do {} while (0) 248#endif /* IDE_ARCH_LOCK */ 249 250/* 251 * Now for the data we need to maintain per-drive: ide_drive_t 252 */ 253 254#define ide_scsi 0x21 255#define ide_disk 0x20 256#define ide_optical 0x7 257#define ide_cdrom 0x5 258#define ide_tape 0x1 259#define ide_floppy 0x0 260 261/* 262 * Special Driver Flags 263 * 264 * set_geometry : respecify drive geometry 265 * recalibrate : seek to cyl 0 266 * set_multmode : set multmode count 267 * reserved : unused 268 */ 269typedef union { 270 unsigned all : 8; 271 struct { 272 unsigned set_geometry : 1; 273 unsigned recalibrate : 1; 274 unsigned set_multmode : 1; 275 unsigned reserved : 5; 276 } b; 277} special_t; 278 279/* 280 * Status returned from various ide_ functions 281 */ 282typedef enum { 283 ide_stopped, /* no drive operation was started */ 284 ide_started, /* a drive operation was started, handler was set */ 285} ide_startstop_t; 286 287enum { 288 IDE_TFLAG_LBA48 = (1 << 0), 289 IDE_TFLAG_FLAGGED = (1 << 2), 290 IDE_TFLAG_OUT_DATA = (1 << 3), 291 IDE_TFLAG_OUT_HOB_FEATURE = (1 << 4), 292 IDE_TFLAG_OUT_HOB_NSECT = (1 << 5), 293 IDE_TFLAG_OUT_HOB_LBAL = (1 << 6), 294 IDE_TFLAG_OUT_HOB_LBAM = (1 << 7), 295 IDE_TFLAG_OUT_HOB_LBAH = (1 << 8), 296 IDE_TFLAG_OUT_HOB = IDE_TFLAG_OUT_HOB_FEATURE | 297 IDE_TFLAG_OUT_HOB_NSECT | 298 IDE_TFLAG_OUT_HOB_LBAL | 299 IDE_TFLAG_OUT_HOB_LBAM | 300 IDE_TFLAG_OUT_HOB_LBAH, 301 IDE_TFLAG_OUT_FEATURE = (1 << 9), 302 IDE_TFLAG_OUT_NSECT = (1 << 10), 303 IDE_TFLAG_OUT_LBAL = (1 << 11), 304 IDE_TFLAG_OUT_LBAM = (1 << 12), 305 IDE_TFLAG_OUT_LBAH = (1 << 13), 306 IDE_TFLAG_OUT_TF = IDE_TFLAG_OUT_FEATURE | 307 IDE_TFLAG_OUT_NSECT | 308 IDE_TFLAG_OUT_LBAL | 309 IDE_TFLAG_OUT_LBAM | 310 IDE_TFLAG_OUT_LBAH, 311 IDE_TFLAG_OUT_DEVICE = (1 << 14), 312 IDE_TFLAG_WRITE = (1 << 15), 313 IDE_TFLAG_FLAGGED_SET_IN_FLAGS = (1 << 16), 314 IDE_TFLAG_IN_DATA = (1 << 17), 315 IDE_TFLAG_CUSTOM_HANDLER = (1 << 18), 316 IDE_TFLAG_DMA_PIO_FALLBACK = (1 << 19), 317 IDE_TFLAG_IN_HOB_FEATURE = (1 << 20), 318 IDE_TFLAG_IN_HOB_NSECT = (1 << 21), 319 IDE_TFLAG_IN_HOB_LBAL = (1 << 22), 320 IDE_TFLAG_IN_HOB_LBAM = (1 << 23), 321 IDE_TFLAG_IN_HOB_LBAH = (1 << 24), 322 IDE_TFLAG_IN_HOB_LBA = IDE_TFLAG_IN_HOB_LBAL | 323 IDE_TFLAG_IN_HOB_LBAM | 324 IDE_TFLAG_IN_HOB_LBAH, 325 IDE_TFLAG_IN_HOB = IDE_TFLAG_IN_HOB_FEATURE | 326 IDE_TFLAG_IN_HOB_NSECT | 327 IDE_TFLAG_IN_HOB_LBA, 328 IDE_TFLAG_IN_FEATURE = (1 << 1), 329 IDE_TFLAG_IN_NSECT = (1 << 25), 330 IDE_TFLAG_IN_LBAL = (1 << 26), 331 IDE_TFLAG_IN_LBAM = (1 << 27), 332 IDE_TFLAG_IN_LBAH = (1 << 28), 333 IDE_TFLAG_IN_LBA = IDE_TFLAG_IN_LBAL | 334 IDE_TFLAG_IN_LBAM | 335 IDE_TFLAG_IN_LBAH, 336 IDE_TFLAG_IN_TF = IDE_TFLAG_IN_NSECT | 337 IDE_TFLAG_IN_LBA, 338 IDE_TFLAG_IN_DEVICE = (1 << 29), 339 IDE_TFLAG_HOB = IDE_TFLAG_OUT_HOB | 340 IDE_TFLAG_IN_HOB, 341 IDE_TFLAG_TF = IDE_TFLAG_OUT_TF | 342 IDE_TFLAG_IN_TF, 343 IDE_TFLAG_DEVICE = IDE_TFLAG_OUT_DEVICE | 344 IDE_TFLAG_IN_DEVICE, 345 /* force 16-bit I/O operations */ 346 IDE_TFLAG_IO_16BIT = (1 << 30), 347 /* ide_task_t was allocated using kmalloc() */ 348 IDE_TFLAG_DYN = (1 << 31), 349}; 350 351struct ide_taskfile { 352 u8 hob_data; /* 0: high data byte (for TASKFILE IOCTL) */ 353 354 u8 hob_feature; /* 1-5: additional data to support LBA48 */ 355 u8 hob_nsect; 356 u8 hob_lbal; 357 u8 hob_lbam; 358 u8 hob_lbah; 359 360 u8 data; /* 6: low data byte (for TASKFILE IOCTL) */ 361 362 union { /*  7: */ 363 u8 error; /* read: error */ 364 u8 feature; /* write: feature */ 365 }; 366 367 u8 nsect; /* 8: number of sectors */ 368 u8 lbal; /* 9: LBA low */ 369 u8 lbam; /* 10: LBA mid */ 370 u8 lbah; /* 11: LBA high */ 371 372 u8 device; /* 12: device select */ 373 374 union { /* 13: */ 375 u8 status; /*  read: status  */ 376 u8 command; /* write: command */ 377 }; 378}; 379 380typedef struct ide_task_s { 381 union { 382 struct ide_taskfile tf; 383 u8 tf_array[14]; 384 }; 385 u32 tf_flags; 386 int data_phase; 387 struct request *rq; /* copy of request */ 388 void *special; /* valid_t generally */ 389} ide_task_t; 390 391/* ATAPI packet command flags */ 392enum { 393 /* set when an error is considered normal - no retry (ide-tape) */ 394 PC_FLAG_ABORT = (1 << 0), 395 PC_FLAG_SUPPRESS_ERROR = (1 << 1), 396 PC_FLAG_WAIT_FOR_DSC = (1 << 2), 397 PC_FLAG_DMA_OK = (1 << 3), 398 PC_FLAG_DMA_IN_PROGRESS = (1 << 4), 399 PC_FLAG_DMA_ERROR = (1 << 5), 400 PC_FLAG_WRITING = (1 << 6), 401 /* command timed out */ 402 PC_FLAG_TIMEDOUT = (1 << 7), 403}; 404 405/* 406 * With each packet command, we allocate a buffer of IDE_PC_BUFFER_SIZE bytes. 407 * This is used for several packet commands (not for READ/WRITE commands). 408 */ 409#define IDE_PC_BUFFER_SIZE 256 410 411struct ide_atapi_pc { 412 /* actual packet bytes */ 413 u8 c[12]; 414 /* incremented on each retry */ 415 int retries; 416 int error; 417 418 /* bytes to transfer */ 419 int req_xfer; 420 /* bytes actually transferred */ 421 int xferred; 422 423 /* data buffer */ 424 u8 *buf; 425 /* current buffer position */ 426 u8 *cur_pos; 427 int buf_size; 428 /* missing/available data on the current buffer */ 429 int b_count; 430 431 /* the corresponding request */ 432 struct request *rq; 433 434 unsigned long flags; 435 436 /* 437 * those are more or less driver-specific and some of them are subject 438 * to change/removal later. 439 */ 440 u8 pc_buf[IDE_PC_BUFFER_SIZE]; 441 442 /* idetape only */ 443 struct idetape_bh *bh; 444 char *b_data; 445 446 /* idescsi only for now */ 447 struct scatterlist *sg; 448 unsigned int sg_cnt; 449 450 struct scsi_cmnd *scsi_cmd; 451 void (*done) (struct scsi_cmnd *); 452 453 unsigned long timeout; 454}; 455 456struct ide_devset; 457struct ide_driver_s; 458 459#ifdef CONFIG_BLK_DEV_IDEACPI 460struct ide_acpi_drive_link; 461struct ide_acpi_hwif_link; 462#endif 463 464struct ide_drive_s; 465 466struct ide_disk_ops { 467 int (*check)(struct ide_drive_s *, const char *); 468 int (*get_capacity)(struct ide_drive_s *); 469 void (*setup)(struct ide_drive_s *); 470 void (*flush)(struct ide_drive_s *); 471 int (*init_media)(struct ide_drive_s *, struct gendisk *); 472 int (*set_doorlock)(struct ide_drive_s *, struct gendisk *, 473 int); 474 ide_startstop_t (*do_request)(struct ide_drive_s *, struct request *, 475 sector_t); 476 int (*end_request)(struct ide_drive_s *, int, int); 477 int (*ioctl)(struct ide_drive_s *, struct block_device *, 478 fmode_t, unsigned int, unsigned long); 479}; 480 481/* ATAPI device flags */ 482enum { 483 IDE_AFLAG_DRQ_INTERRUPT = (1 << 0), 484 485 /* ide-cd */ 486 /* Drive cannot eject the disc. */ 487 IDE_AFLAG_NO_EJECT = (1 << 3), 488 /* Drive is a pre ATAPI 1.2 drive. */ 489 IDE_AFLAG_PRE_ATAPI12 = (1 << 4), 490 /* TOC addresses are in BCD. */ 491 IDE_AFLAG_TOCADDR_AS_BCD = (1 << 5), 492 /* TOC track numbers are in BCD. */ 493 IDE_AFLAG_TOCTRACKS_AS_BCD = (1 << 6), 494 /* 495 * Drive does not provide data in multiples of SECTOR_SIZE 496 * when more than one interrupt is needed. 497 */ 498 IDE_AFLAG_LIMIT_NFRAMES = (1 << 7), 499 /* Seeking in progress. */ 500 IDE_AFLAG_SEEKING = (1 << 8), 501 /* Saved TOC information is current. */ 502 IDE_AFLAG_TOC_VALID = (1 << 9), 503 /* We think that the drive door is locked. */ 504 IDE_AFLAG_DOOR_LOCKED = (1 << 10), 505 /* SET_CD_SPEED command is unsupported. */ 506 IDE_AFLAG_NO_SPEED_SELECT = (1 << 11), 507 IDE_AFLAG_VERTOS_300_SSD = (1 << 12), 508 IDE_AFLAG_VERTOS_600_ESD = (1 << 13), 509 IDE_AFLAG_SANYO_3CD = (1 << 14), 510 IDE_AFLAG_FULL_CAPS_PAGE = (1 << 15), 511 IDE_AFLAG_PLAY_AUDIO_OK = (1 << 16), 512 IDE_AFLAG_LE_SPEED_FIELDS = (1 << 17), 513 514 /* ide-floppy */ 515 /* Avoid commands not supported in Clik drive */ 516 IDE_AFLAG_CLIK_DRIVE = (1 << 19), 517 /* Requires BH algorithm for packets */ 518 IDE_AFLAG_ZIP_DRIVE = (1 << 20), 519 /* Supports format progress report */ 520 IDE_AFLAG_SRFP = (1 << 22), 521 522 /* ide-tape */ 523 IDE_AFLAG_IGNORE_DSC = (1 << 23), 524 /* 0 When the tape position is unknown */ 525 IDE_AFLAG_ADDRESS_VALID = (1 << 24), 526 /* Device already opened */ 527 IDE_AFLAG_BUSY = (1 << 25), 528 /* Attempt to auto-detect the current user block size */ 529 IDE_AFLAG_DETECT_BS = (1 << 26), 530 /* Currently on a filemark */ 531 IDE_AFLAG_FILEMARK = (1 << 27), 532 /* 0 = no tape is loaded, so we don't rewind after ejecting */ 533 IDE_AFLAG_MEDIUM_PRESENT = (1 << 28), 534 535 IDE_AFLAG_NO_AUTOCLOSE = (1 << 29), 536}; 537 538/* device flags */ 539enum { 540 /* restore settings after device reset */ 541 IDE_DFLAG_KEEP_SETTINGS = (1 << 0), 542 /* device is using DMA for read/write */ 543 IDE_DFLAG_USING_DMA = (1 << 1), 544 /* okay to unmask other IRQs */ 545 IDE_DFLAG_UNMASK = (1 << 2), 546 /* don't attempt flushes */ 547 IDE_DFLAG_NOFLUSH = (1 << 3), 548 /* DSC overlap */ 549 IDE_DFLAG_DSC_OVERLAP = (1 << 4), 550 /* give potential excess bandwidth */ 551 IDE_DFLAG_NICE1 = (1 << 5), 552 /* device is physically present */ 553 IDE_DFLAG_PRESENT = (1 << 6), 554 /* device ejected hint */ 555 IDE_DFLAG_DEAD = (1 << 7), 556 /* id read from device (synthetic if not set) */ 557 IDE_DFLAG_ID_READ = (1 << 8), 558 IDE_DFLAG_NOPROBE = (1 << 9), 559 /* need to do check_media_change() */ 560 IDE_DFLAG_REMOVABLE = (1 << 10), 561 /* needed for removable devices */ 562 IDE_DFLAG_ATTACH = (1 << 11), 563 IDE_DFLAG_FORCED_GEOM = (1 << 12), 564 /* disallow setting unmask bit */ 565 IDE_DFLAG_NO_UNMASK = (1 << 13), 566 /* disallow enabling 32-bit I/O */ 567 IDE_DFLAG_NO_IO_32BIT = (1 << 14), 568 /* for removable only: door lock/unlock works */ 569 IDE_DFLAG_DOORLOCKING = (1 << 15), 570 /* disallow DMA */ 571 IDE_DFLAG_NODMA = (1 << 16), 572 /* powermanagment told us not to do anything, so sleep nicely */ 573 IDE_DFLAG_BLOCKED = (1 << 17), 574 /* ide-scsi emulation */ 575 IDE_DFLAG_SCSI = (1 << 18), 576 /* sleeping & sleep field valid */ 577 IDE_DFLAG_SLEEPING = (1 << 19), 578 IDE_DFLAG_POST_RESET = (1 << 20), 579 IDE_DFLAG_UDMA33_WARNED = (1 << 21), 580 IDE_DFLAG_LBA48 = (1 << 22), 581 /* status of write cache */ 582 IDE_DFLAG_WCACHE = (1 << 23), 583 /* used for ignoring ATA_DF */ 584 IDE_DFLAG_NOWERR = (1 << 24), 585 /* retrying in PIO */ 586 IDE_DFLAG_DMA_PIO_RETRY = (1 << 25), 587 IDE_DFLAG_LBA = (1 << 26), 588 /* don't unload heads */ 589 IDE_DFLAG_NO_UNLOAD = (1 << 27), 590 /* heads unloaded, please don't reset port */ 591 IDE_DFLAG_PARKED = (1 << 28), 592 IDE_DFLAG_MEDIA_CHANGED = (1 << 29), 593 /* write protect */ 594 IDE_DFLAG_WP = (1 << 30), 595 IDE_DFLAG_FORMAT_IN_PROGRESS = (1 << 31), 596}; 597 598struct ide_drive_s { 599 char name[4]; /* drive name, such as "hda" */ 600 char driver_req[10]; /* requests specific driver */ 601 602 struct request_queue *queue; /* request queue */ 603 604 struct request *rq; /* current request */ 605 struct ide_drive_s *next; /* circular list of hwgroup drives */ 606 void *driver_data; /* extra driver data */ 607 u16 *id; /* identification info */ 608#ifdef CONFIG_IDE_PROC_FS 609 struct proc_dir_entry *proc; /* /proc/ide/ directory entry */ 610 const struct ide_proc_devset *settings; /* /proc/ide/ drive settings */ 611#endif 612 struct hwif_s *hwif; /* actually (ide_hwif_t *) */ 613 614 const struct ide_disk_ops *disk_ops; 615 616 unsigned long dev_flags; 617 618 unsigned long sleep; /* sleep until this time */ 619 unsigned long service_start; /* time we started last request */ 620 unsigned long service_time; /* service time of last request */ 621 unsigned long timeout; /* max time to wait for irq */ 622 623 special_t special; /* special action flags */ 624 625 u8 select; /* basic drive/head select reg value */ 626 u8 retry_pio; /* retrying dma capable host in pio */ 627 u8 waiting_for_dma; /* dma currently in progress */ 628 u8 dma; /* atapi dma flag */ 629 630 u8 quirk_list; /* considered quirky, set for a specific host */ 631 u8 init_speed; /* transfer rate set at boot */ 632 u8 current_speed; /* current transfer rate set */ 633 u8 desired_speed; /* desired transfer rate set */ 634 u8 dn; /* now wide spread use */ 635 u8 acoustic; /* acoustic management */ 636 u8 media; /* disk, cdrom, tape, floppy, ... */ 637 u8 ready_stat; /* min status value for drive ready */ 638 u8 mult_count; /* current multiple sector setting */ 639 u8 mult_req; /* requested multiple sector setting */ 640 u8 io_32bit; /* 0=16-bit, 1=32-bit, 2/3=32bit+sync */ 641 u8 bad_wstat; /* used for ignoring ATA_DF */ 642 u8 head; /* "real" number of heads */ 643 u8 sect; /* "real" sectors per track */ 644 u8 bios_head; /* BIOS/fdisk/LILO number of heads */ 645 u8 bios_sect; /* BIOS/fdisk/LILO sectors per track */ 646 647 /* delay this long before sending packet command */ 648 u8 pc_delay; 649 650 unsigned int bios_cyl; /* BIOS/fdisk/LILO number of cyls */ 651 unsigned int cyl; /* "real" number of cyls */ 652 unsigned int drive_data; /* used by set_pio_mode/selectproc */ 653 unsigned int failures; /* current failure count */ 654 unsigned int max_failures; /* maximum allowed failure count */ 655 u64 probed_capacity;/* initial reported media capacity (ide-cd only currently) */ 656 657 u64 capacity64; /* total number of sectors */ 658 659 int lun; /* logical unit */ 660 int crc_count; /* crc counter to reduce drive speed */ 661 662 unsigned long debug_mask; /* debugging levels switch */ 663 664#ifdef CONFIG_BLK_DEV_IDEACPI 665 struct ide_acpi_drive_link *acpidata; 666#endif 667 struct list_head list; 668 struct device gendev; 669 struct completion gendev_rel_comp; /* to deal with device release() */ 670 671 /* current packet command */ 672 struct ide_atapi_pc *pc; 673 674 /* callback for packet commands */ 675 void (*pc_callback)(struct ide_drive_s *, int); 676 677 void (*pc_update_buffers)(struct ide_drive_s *, struct ide_atapi_pc *); 678 int (*pc_io_buffers)(struct ide_drive_s *, struct ide_atapi_pc *, 679 unsigned int, int); 680 681 unsigned long atapi_flags; 682 683 struct ide_atapi_pc request_sense_pc; 684 struct request request_sense_rq; 685}; 686 687typedef struct ide_drive_s ide_drive_t; 688 689#define to_ide_device(dev) container_of(dev, ide_drive_t, gendev) 690 691#define to_ide_drv(obj, cont_type) \ 692 container_of(obj, struct cont_type, kref) 693 694#define ide_drv_g(disk, cont_type) \ 695 container_of((disk)->private_data, struct cont_type, driver) 696 697struct ide_port_info; 698 699struct ide_tp_ops { 700 void (*exec_command)(struct hwif_s *, u8); 701 u8 (*read_status)(struct hwif_s *); 702 u8 (*read_altstatus)(struct hwif_s *); 703 u8 (*read_sff_dma_status)(struct hwif_s *); 704 705 void (*set_irq)(struct hwif_s *, int); 706 707 void (*tf_load)(ide_drive_t *, struct ide_task_s *); 708 void (*tf_read)(ide_drive_t *, struct ide_task_s *); 709 710 void (*input_data)(ide_drive_t *, struct request *, void *, 711 unsigned int); 712 void (*output_data)(ide_drive_t *, struct request *, void *, 713 unsigned int); 714}; 715 716extern const struct ide_tp_ops default_tp_ops; 717 718/** 719 * struct ide_port_ops - IDE port operations 720 * 721 * @init_dev: host specific initialization of a device 722 * @set_pio_mode: routine to program host for PIO mode 723 * @set_dma_mode: routine to program host for DMA mode 724 * @selectproc: tweaks hardware to select drive 725 * @reset_poll: chipset polling based on hba specifics 726 * @pre_reset: chipset specific changes to default for device-hba resets 727 * @resetproc: routine to reset controller after a disk reset 728 * @maskproc: special host masking for drive selection 729 * @quirkproc: check host's drive quirk list 730 * @clear_irq: clear IRQ 731 * 732 * @mdma_filter: filter MDMA modes 733 * @udma_filter: filter UDMA modes 734 * 735 * @cable_detect: detect cable type 736 */ 737struct ide_port_ops { 738 void (*init_dev)(ide_drive_t *); 739 void (*set_pio_mode)(ide_drive_t *, const u8); 740 void (*set_dma_mode)(ide_drive_t *, const u8); 741 void (*selectproc)(ide_drive_t *); 742 int (*reset_poll)(ide_drive_t *); 743 void (*pre_reset)(ide_drive_t *); 744 void (*resetproc)(ide_drive_t *); 745 void (*maskproc)(ide_drive_t *, int); 746 void (*quirkproc)(ide_drive_t *); 747 void (*clear_irq)(ide_drive_t *); 748 749 u8 (*mdma_filter)(ide_drive_t *); 750 u8 (*udma_filter)(ide_drive_t *); 751 752 u8 (*cable_detect)(struct hwif_s *); 753}; 754 755struct ide_dma_ops { 756 void (*dma_host_set)(struct ide_drive_s *, int); 757 int (*dma_setup)(struct ide_drive_s *); 758 void (*dma_exec_cmd)(struct ide_drive_s *, u8); 759 void (*dma_start)(struct ide_drive_s *); 760 int (*dma_end)(struct ide_drive_s *); 761 int (*dma_test_irq)(struct ide_drive_s *); 762 void (*dma_lost_irq)(struct ide_drive_s *); 763 void (*dma_timeout)(struct ide_drive_s *); 764}; 765 766struct ide_host; 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 struct ide_host *host; 775 776 char name[6]; /* name of interface, eg. "ide0" */ 777 778 struct ide_io_ports io_ports; 779 780 unsigned long sata_scr[SATA_NR_PORTS]; 781 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 788 u32 host_flags; 789 790 u8 pio_mask; 791 792 u8 ultra_mask; 793 u8 mwdma_mask; 794 u8 swdma_mask; 795 796 u8 cbl; /* cable type */ 797 798 hwif_chipset_t chipset; /* sub-module for tuning.. */ 799 800 struct device *dev; 801 802 ide_ack_intr_t *ack_intr; 803 804 void (*rw_disk)(ide_drive_t *, struct request *); 805 806 const struct ide_tp_ops *tp_ops; 807 const struct ide_port_ops *port_ops; 808 const struct ide_dma_ops *dma_ops; 809 810 /* dma physical region descriptor table (cpu view) */ 811 unsigned int *dmatable_cpu; 812 /* dma physical region descriptor table (dma view) */ 813 dma_addr_t dmatable_dma; 814 815 /* maximum number of PRD table entries */ 816 int prd_max_nents; 817 /* PRD entry size in bytes */ 818 int prd_ent_size; 819 820 /* Scatter-gather list used to build the above */ 821 struct scatterlist *sg_table; 822 int sg_max_nents; /* Maximum number of entries in it */ 823 int sg_nents; /* Current number of entries in it */ 824 int sg_dma_direction; /* dma transfer direction */ 825 826 /* data phase of the active command (currently only valid for PIO/DMA) */ 827 int data_phase; 828 829 struct ide_task_s task; /* current command */ 830 831 unsigned int nsect; 832 unsigned int nleft; 833 struct scatterlist *cursg; 834 unsigned int cursg_ofs; 835 836 int rqsize; /* max sectors per request */ 837 int irq; /* our irq number */ 838 839 unsigned long dma_base; /* base addr for dma ports */ 840 841 unsigned long config_data; /* for use by chipset-specific code */ 842 unsigned long select_data; /* for use by chipset-specific code */ 843 844 unsigned long extra_base; /* extra addr for dma ports */ 845 unsigned extra_ports; /* number of extra dma ports */ 846 847 unsigned present : 1; /* this interface exists */ 848 unsigned serialized : 1; /* serialized all channel operation */ 849 unsigned sharing_irq: 1; /* 1 = sharing irq with another hwif */ 850 unsigned sg_mapped : 1; /* sg_table and sg_nents are ready */ 851 852 struct device gendev; 853 struct device *portdev; 854 855 struct completion gendev_rel_comp; /* To deal with device release() */ 856 857 void *hwif_data; /* extra hwif data */ 858 859#ifdef CONFIG_BLK_DEV_IDEACPI 860 struct ide_acpi_hwif_link *acpidata; 861#endif 862} ____cacheline_internodealigned_in_smp ide_hwif_t; 863 864#define MAX_HOST_PORTS 4 865 866struct ide_host { 867 ide_hwif_t *ports[MAX_HOST_PORTS]; 868 unsigned int n_ports; 869 struct device *dev[2]; 870 unsigned int (*init_chipset)(struct pci_dev *); 871 unsigned long host_flags; 872 void *host_priv; 873}; 874 875/* 876 * internal ide interrupt handler type 877 */ 878typedef ide_startstop_t (ide_handler_t)(ide_drive_t *); 879typedef int (ide_expiry_t)(ide_drive_t *); 880 881/* used by ide-cd, ide-floppy, etc. */ 882typedef void (xfer_func_t)(ide_drive_t *, struct request *rq, void *, unsigned); 883 884typedef struct hwgroup_s { 885 /* irq handler, if active */ 886 ide_startstop_t (*handler)(ide_drive_t *); 887 888 /* BOOL: protects all fields below */ 889 volatile int busy; 890 /* BOOL: wake us up on timer expiry */ 891 unsigned int sleeping : 1; 892 /* BOOL: polling active & poll_timeout field valid */ 893 unsigned int polling : 1; 894 895 /* current drive */ 896 ide_drive_t *drive; 897 /* ptr to current hwif in linked-list */ 898 ide_hwif_t *hwif; 899 900 /* current request */ 901 struct request *rq; 902 903 /* failsafe timer */ 904 struct timer_list timer; 905 /* timeout value during long polls */ 906 unsigned long poll_timeout; 907 /* queried upon timeouts */ 908 int (*expiry)(ide_drive_t *); 909 910 int req_gen; 911 int req_gen_timer; 912} ide_hwgroup_t; 913 914typedef struct ide_driver_s ide_driver_t; 915 916extern struct mutex ide_setting_mtx; 917 918/* 919 * configurable drive settings 920 */ 921 922#define DS_SYNC (1 << 0) 923 924struct ide_devset { 925 int (*get)(ide_drive_t *); 926 int (*set)(ide_drive_t *, int); 927 unsigned int flags; 928}; 929 930#define __DEVSET(_flags, _get, _set) { \ 931 .flags = _flags, \ 932 .get = _get, \ 933 .set = _set, \ 934} 935 936#define ide_devset_get(name, field) \ 937static int get_##name(ide_drive_t *drive) \ 938{ \ 939 return drive->field; \ 940} 941 942#define ide_devset_set(name, field) \ 943static int set_##name(ide_drive_t *drive, int arg) \ 944{ \ 945 drive->field = arg; \ 946 return 0; \ 947} 948 949#define ide_devset_get_flag(name, flag) \ 950static int get_##name(ide_drive_t *drive) \ 951{ \ 952 return !!(drive->dev_flags & flag); \ 953} 954 955#define ide_devset_set_flag(name, flag) \ 956static int set_##name(ide_drive_t *drive, int arg) \ 957{ \ 958 if (arg) \ 959 drive->dev_flags |= flag; \ 960 else \ 961 drive->dev_flags &= ~flag; \ 962 return 0; \ 963} 964 965#define __IDE_DEVSET(_name, _flags, _get, _set) \ 966const struct ide_devset ide_devset_##_name = \ 967 __DEVSET(_flags, _get, _set) 968 969#define IDE_DEVSET(_name, _flags, _get, _set) \ 970static __IDE_DEVSET(_name, _flags, _get, _set) 971 972#define ide_devset_rw(_name, _func) \ 973IDE_DEVSET(_name, 0, get_##_func, set_##_func) 974 975#define ide_devset_w(_name, _func) \ 976IDE_DEVSET(_name, 0, NULL, set_##_func) 977 978#define ide_ext_devset_rw(_name, _func) \ 979__IDE_DEVSET(_name, 0, get_##_func, set_##_func) 980 981#define ide_ext_devset_rw_sync(_name, _func) \ 982__IDE_DEVSET(_name, DS_SYNC, get_##_func, set_##_func) 983 984#define ide_decl_devset(_name) \ 985extern const struct ide_devset ide_devset_##_name 986 987ide_decl_devset(io_32bit); 988ide_decl_devset(keepsettings); 989ide_decl_devset(pio_mode); 990ide_decl_devset(unmaskirq); 991ide_decl_devset(using_dma); 992 993#ifdef CONFIG_IDE_PROC_FS 994/* 995 * /proc/ide interface 996 */ 997 998#define ide_devset_rw_field(_name, _field) \ 999ide_devset_get(_name, _field); \ 1000ide_devset_set(_name, _field); \ 1001IDE_DEVSET(_name, DS_SYNC, get_##_name, set_##_name) 1002 1003#define ide_devset_rw_flag(_name, _field) \ 1004ide_devset_get_flag(_name, _field); \ 1005ide_devset_set_flag(_name, _field); \ 1006IDE_DEVSET(_name, DS_SYNC, get_##_name, set_##_name) 1007 1008struct ide_proc_devset { 1009 const char *name; 1010 const struct ide_devset *setting; 1011 int min, max; 1012 int (*mulf)(ide_drive_t *); 1013 int (*divf)(ide_drive_t *); 1014}; 1015 1016#define __IDE_PROC_DEVSET(_name, _min, _max, _mulf, _divf) { \ 1017 .name = __stringify(_name), \ 1018 .setting = &ide_devset_##_name, \ 1019 .min = _min, \ 1020 .max = _max, \ 1021 .mulf = _mulf, \ 1022 .divf = _divf, \ 1023} 1024 1025#define IDE_PROC_DEVSET(_name, _min, _max) \ 1026__IDE_PROC_DEVSET(_name, _min, _max, NULL, NULL) 1027 1028typedef struct { 1029 const char *name; 1030 mode_t mode; 1031 read_proc_t *read_proc; 1032 write_proc_t *write_proc; 1033} ide_proc_entry_t; 1034 1035void proc_ide_create(void); 1036void proc_ide_destroy(void); 1037void ide_proc_register_port(ide_hwif_t *); 1038void ide_proc_port_register_devices(ide_hwif_t *); 1039void ide_proc_unregister_device(ide_drive_t *); 1040void ide_proc_unregister_port(ide_hwif_t *); 1041void ide_proc_register_driver(ide_drive_t *, ide_driver_t *); 1042void ide_proc_unregister_driver(ide_drive_t *, ide_driver_t *); 1043 1044read_proc_t proc_ide_read_capacity; 1045read_proc_t proc_ide_read_geometry; 1046 1047/* 1048 * Standard exit stuff: 1049 */ 1050#define PROC_IDE_READ_RETURN(page,start,off,count,eof,len) \ 1051{ \ 1052 len -= off; \ 1053 if (len < count) { \ 1054 *eof = 1; \ 1055 if (len <= 0) \ 1056 return 0; \ 1057 } else \ 1058 len = count; \ 1059 *start = page + off; \ 1060 return len; \ 1061} 1062#else 1063static inline void proc_ide_create(void) { ; } 1064static inline void proc_ide_destroy(void) { ; } 1065static inline void ide_proc_register_port(ide_hwif_t *hwif) { ; } 1066static inline void ide_proc_port_register_devices(ide_hwif_t *hwif) { ; } 1067static inline void ide_proc_unregister_device(ide_drive_t *drive) { ; } 1068static inline void ide_proc_unregister_port(ide_hwif_t *hwif) { ; } 1069static inline void ide_proc_register_driver(ide_drive_t *drive, ide_driver_t *driver) { ; } 1070static inline void ide_proc_unregister_driver(ide_drive_t *drive, ide_driver_t *driver) { ; } 1071#define PROC_IDE_READ_RETURN(page,start,off,count,eof,len) return 0; 1072#endif 1073 1074enum { 1075 /* enter/exit functions */ 1076 IDE_DBG_FUNC = (1 << 0), 1077 /* sense key/asc handling */ 1078 IDE_DBG_SENSE = (1 << 1), 1079 /* packet commands handling */ 1080 IDE_DBG_PC = (1 << 2), 1081 /* request handling */ 1082 IDE_DBG_RQ = (1 << 3), 1083 /* driver probing/setup */ 1084 IDE_DBG_PROBE = (1 << 4), 1085}; 1086 1087/* DRV_NAME has to be defined in the driver before using the macro below */ 1088#define __ide_debug_log(lvl, fmt, args...) \ 1089{ \ 1090 if (unlikely(drive->debug_mask & lvl)) \ 1091 printk(KERN_INFO DRV_NAME ": " fmt, ## args); \ 1092} 1093 1094/* 1095 * Power Management state machine (rq->pm->pm_step). 1096 * 1097 * For each step, the core calls ide_start_power_step() first. 1098 * This can return: 1099 * - ide_stopped : In this case, the core calls us back again unless 1100 * step have been set to ide_power_state_completed. 1101 * - ide_started : In this case, the channel is left busy until an 1102 * async event (interrupt) occurs. 1103 * Typically, ide_start_power_step() will issue a taskfile request with 1104 * do_rw_taskfile(). 1105 * 1106 * Upon reception of the interrupt, the core will call ide_complete_power_step() 1107 * with the error code if any. This routine should update the step value 1108 * and return. It should not start a new request. The core will call 1109 * ide_start_power_step() for the new step value, unless step have been 1110 * set to IDE_PM_COMPLETED. 1111 */ 1112enum { 1113 IDE_PM_START_SUSPEND, 1114 IDE_PM_FLUSH_CACHE = IDE_PM_START_SUSPEND, 1115 IDE_PM_STANDBY, 1116 1117 IDE_PM_START_RESUME, 1118 IDE_PM_RESTORE_PIO = IDE_PM_START_RESUME, 1119 IDE_PM_IDLE, 1120 IDE_PM_RESTORE_DMA, 1121 1122 IDE_PM_COMPLETED, 1123}; 1124 1125/* 1126 * Subdrivers support. 1127 * 1128 * The gendriver.owner field should be set to the module owner of this driver. 1129 * The gendriver.name field should be set to the name of this driver 1130 */ 1131struct ide_driver_s { 1132 const char *version; 1133 ide_startstop_t (*do_request)(ide_drive_t *, struct request *, sector_t); 1134 int (*end_request)(ide_drive_t *, int, int); 1135 ide_startstop_t (*error)(ide_drive_t *, struct request *rq, u8, u8); 1136 struct device_driver gen_driver; 1137 int (*probe)(ide_drive_t *); 1138 void (*remove)(ide_drive_t *); 1139 void (*resume)(ide_drive_t *); 1140 void (*shutdown)(ide_drive_t *); 1141#ifdef CONFIG_IDE_PROC_FS 1142 ide_proc_entry_t * (*proc_entries)(ide_drive_t *); 1143 const struct ide_proc_devset * (*proc_devsets)(ide_drive_t *); 1144#endif 1145}; 1146 1147#define to_ide_driver(drv) container_of(drv, ide_driver_t, gen_driver) 1148 1149int ide_device_get(ide_drive_t *); 1150void ide_device_put(ide_drive_t *); 1151 1152struct ide_ioctl_devset { 1153 unsigned int get_ioctl; 1154 unsigned int set_ioctl; 1155 const struct ide_devset *setting; 1156}; 1157 1158int ide_setting_ioctl(ide_drive_t *, struct block_device *, unsigned int, 1159 unsigned long, const struct ide_ioctl_devset *); 1160 1161int generic_ide_ioctl(ide_drive_t *, struct block_device *, unsigned, unsigned long); 1162 1163extern int ide_vlb_clk; 1164extern int ide_pci_clk; 1165 1166extern int ide_end_request (ide_drive_t *drive, int uptodate, int nrsecs); 1167int ide_end_dequeued_request(ide_drive_t *drive, struct request *rq, 1168 int uptodate, int nr_sectors); 1169 1170extern void ide_set_handler (ide_drive_t *drive, ide_handler_t *handler, unsigned int timeout, ide_expiry_t *expiry); 1171 1172void ide_execute_command(ide_drive_t *, u8, ide_handler_t *, unsigned int, 1173 ide_expiry_t *); 1174 1175void ide_execute_pkt_cmd(ide_drive_t *); 1176 1177void ide_pad_transfer(ide_drive_t *, int, int); 1178 1179ide_startstop_t __ide_error(ide_drive_t *, struct request *, u8, u8); 1180 1181ide_startstop_t ide_error (ide_drive_t *drive, const char *msg, byte stat); 1182 1183void ide_fix_driveid(u16 *); 1184 1185extern void ide_fixstring(u8 *, const int, const int); 1186 1187int ide_busy_sleep(ide_hwif_t *, unsigned long, int); 1188 1189int ide_wait_stat(ide_startstop_t *, ide_drive_t *, u8, u8, unsigned long); 1190 1191extern ide_startstop_t ide_do_reset (ide_drive_t *); 1192 1193extern int ide_devset_execute(ide_drive_t *drive, 1194 const struct ide_devset *setting, int arg); 1195 1196extern void ide_do_drive_cmd(ide_drive_t *, struct request *); 1197 1198extern void ide_end_drive_cmd(ide_drive_t *, u8, u8); 1199 1200void ide_tf_dump(const char *, struct ide_taskfile *); 1201 1202void ide_exec_command(ide_hwif_t *, u8); 1203u8 ide_read_status(ide_hwif_t *); 1204u8 ide_read_altstatus(ide_hwif_t *); 1205u8 ide_read_sff_dma_status(ide_hwif_t *); 1206 1207void ide_set_irq(ide_hwif_t *, int); 1208 1209void ide_tf_load(ide_drive_t *, ide_task_t *); 1210void ide_tf_read(ide_drive_t *, ide_task_t *); 1211 1212void ide_input_data(ide_drive_t *, struct request *, void *, unsigned int); 1213void ide_output_data(ide_drive_t *, struct request *, void *, unsigned int); 1214 1215int ide_io_buffers(ide_drive_t *, struct ide_atapi_pc *, unsigned int, int); 1216 1217extern void SELECT_DRIVE(ide_drive_t *); 1218void SELECT_MASK(ide_drive_t *, int); 1219 1220u8 ide_read_error(ide_drive_t *); 1221void ide_read_bcount_and_ireason(ide_drive_t *, u16 *, u8 *); 1222 1223extern int drive_is_ready(ide_drive_t *); 1224 1225void ide_pktcmd_tf_load(ide_drive_t *, u32, u16, u8); 1226 1227int ide_check_atapi_device(ide_drive_t *, const char *); 1228 1229void ide_init_pc(struct ide_atapi_pc *); 1230 1231/* Disk head parking */ 1232extern wait_queue_head_t ide_park_wq; 1233ssize_t ide_park_show(struct device *dev, struct device_attribute *attr, 1234 char *buf); 1235ssize_t ide_park_store(struct device *dev, struct device_attribute *attr, 1236 const char *buf, size_t len); 1237 1238/* 1239 * Special requests for ide-tape block device strategy routine. 1240 * 1241 * In order to service a character device command, we add special requests to 1242 * the tail of our block device request queue and wait for their completion. 1243 */ 1244enum { 1245 REQ_IDETAPE_PC1 = (1 << 0), /* packet command (first stage) */ 1246 REQ_IDETAPE_PC2 = (1 << 1), /* packet command (second stage) */ 1247 REQ_IDETAPE_READ = (1 << 2), 1248 REQ_IDETAPE_WRITE = (1 << 3), 1249}; 1250 1251int ide_queue_pc_tail(ide_drive_t *, struct gendisk *, struct ide_atapi_pc *); 1252 1253int ide_do_test_unit_ready(ide_drive_t *, struct gendisk *); 1254int ide_do_start_stop(ide_drive_t *, struct gendisk *, int); 1255int ide_set_media_lock(ide_drive_t *, struct gendisk *, int); 1256void ide_create_request_sense_cmd(ide_drive_t *, struct ide_atapi_pc *); 1257void ide_retry_pc(ide_drive_t *, struct gendisk *); 1258 1259static inline unsigned long ide_scsi_get_timeout(struct ide_atapi_pc *pc) 1260{ 1261 return max_t(unsigned long, WAIT_CMD, pc->timeout - jiffies); 1262} 1263 1264int ide_scsi_expiry(ide_drive_t *); 1265 1266ide_startstop_t ide_issue_pc(ide_drive_t *, unsigned int, ide_expiry_t *); 1267 1268ide_startstop_t do_rw_taskfile(ide_drive_t *, ide_task_t *); 1269 1270void task_end_request(ide_drive_t *, struct request *, u8); 1271 1272int ide_raw_taskfile(ide_drive_t *, ide_task_t *, u8 *, u16); 1273int ide_no_data_taskfile(ide_drive_t *, ide_task_t *); 1274 1275int ide_taskfile_ioctl(ide_drive_t *, unsigned int, unsigned long); 1276 1277extern int ide_driveid_update(ide_drive_t *); 1278extern int ide_config_drive_speed(ide_drive_t *, u8); 1279extern u8 eighty_ninty_three (ide_drive_t *); 1280extern int taskfile_lib_get_identify(ide_drive_t *drive, u8 *); 1281 1282extern int ide_wait_not_busy(ide_hwif_t *hwif, unsigned long timeout); 1283 1284extern void ide_stall_queue(ide_drive_t *drive, unsigned long timeout); 1285 1286extern void ide_timer_expiry(unsigned long); 1287extern irqreturn_t ide_intr(int irq, void *dev_id); 1288extern void do_ide_request(struct request_queue *); 1289 1290void ide_init_disk(struct gendisk *, ide_drive_t *); 1291 1292#ifdef CONFIG_IDEPCI_PCIBUS_ORDER 1293extern int __ide_pci_register_driver(struct pci_driver *driver, struct module *owner, const char *mod_name); 1294#define ide_pci_register_driver(d) __ide_pci_register_driver(d, THIS_MODULE, KBUILD_MODNAME) 1295#else 1296#define ide_pci_register_driver(d) pci_register_driver(d) 1297#endif 1298 1299static inline int ide_pci_is_in_compatibility_mode(struct pci_dev *dev) 1300{ 1301 if ((dev->class >> 8) == PCI_CLASS_STORAGE_IDE && (dev->class & 5) != 5) 1302 return 1; 1303 return 0; 1304} 1305 1306void ide_pci_setup_ports(struct pci_dev *, const struct ide_port_info *, int, 1307 hw_regs_t *, hw_regs_t **); 1308void ide_setup_pci_noise(struct pci_dev *, const struct ide_port_info *); 1309 1310#ifdef CONFIG_BLK_DEV_IDEDMA_PCI 1311int ide_pci_set_master(struct pci_dev *, const char *); 1312unsigned long ide_pci_dma_base(ide_hwif_t *, const struct ide_port_info *); 1313int ide_pci_check_simplex(ide_hwif_t *, const struct ide_port_info *); 1314int ide_hwif_setup_dma(ide_hwif_t *, const struct ide_port_info *); 1315#else 1316static inline int ide_hwif_setup_dma(ide_hwif_t *hwif, 1317 const struct ide_port_info *d) 1318{ 1319 return -EINVAL; 1320} 1321#endif 1322 1323typedef struct ide_pci_enablebit_s { 1324 u8 reg; /* byte pci reg holding the enable-bit */ 1325 u8 mask; /* mask to isolate the enable-bit */ 1326 u8 val; /* value of masked reg when "enabled" */ 1327} ide_pci_enablebit_t; 1328 1329enum { 1330 /* Uses ISA control ports not PCI ones. */ 1331 IDE_HFLAG_ISA_PORTS = (1 << 0), 1332 /* single port device */ 1333 IDE_HFLAG_SINGLE = (1 << 1), 1334 /* don't use legacy PIO blacklist */ 1335 IDE_HFLAG_PIO_NO_BLACKLIST = (1 << 2), 1336 /* set for the second port of QD65xx */ 1337 IDE_HFLAG_QD_2ND_PORT = (1 << 3), 1338 /* use PIO8/9 for prefetch off/on */ 1339 IDE_HFLAG_ABUSE_PREFETCH = (1 << 4), 1340 /* use PIO6/7 for fast-devsel off/on */ 1341 IDE_HFLAG_ABUSE_FAST_DEVSEL = (1 << 5), 1342 /* use 100-102 and 200-202 PIO values to set DMA modes */ 1343 IDE_HFLAG_ABUSE_DMA_MODES = (1 << 6), 1344 /* 1345 * keep DMA setting when programming PIO mode, may be used only 1346 * for hosts which have separate PIO and DMA timings (ie. PMAC) 1347 */ 1348 IDE_HFLAG_SET_PIO_MODE_KEEP_DMA = (1 << 7), 1349 /* program host for the transfer mode after programming device */ 1350 IDE_HFLAG_POST_SET_MODE = (1 << 8), 1351 /* don't program host/device for the transfer mode ("smart" hosts) */ 1352 IDE_HFLAG_NO_SET_MODE = (1 << 9), 1353 /* trust BIOS for programming chipset/device for DMA */ 1354 IDE_HFLAG_TRUST_BIOS_FOR_DMA = (1 << 10), 1355 /* host is CS5510/CS5520 */ 1356 IDE_HFLAG_CS5520 = (1 << 11), 1357 /* ATAPI DMA is unsupported */ 1358 IDE_HFLAG_NO_ATAPI_DMA = (1 << 12), 1359 /* set if host is a "non-bootable" controller */ 1360 IDE_HFLAG_NON_BOOTABLE = (1 << 13), 1361 /* host doesn't support DMA */ 1362 IDE_HFLAG_NO_DMA = (1 << 14), 1363 /* check if host is PCI IDE device before allowing DMA */ 1364 IDE_HFLAG_NO_AUTODMA = (1 << 15), 1365 /* host uses MMIO */ 1366 IDE_HFLAG_MMIO = (1 << 16), 1367 /* no LBA48 */ 1368 IDE_HFLAG_NO_LBA48 = (1 << 17), 1369 /* no LBA48 DMA */ 1370 IDE_HFLAG_NO_LBA48_DMA = (1 << 18), 1371 /* data FIFO is cleared by an error */ 1372 IDE_HFLAG_ERROR_STOPS_FIFO = (1 << 19), 1373 /* serialize ports */ 1374 IDE_HFLAG_SERIALIZE = (1 << 20), 1375 /* use legacy IRQs */ 1376 IDE_HFLAG_LEGACY_IRQS = (1 << 21), 1377 /* force use of legacy IRQs */ 1378 IDE_HFLAG_FORCE_LEGACY_IRQS = (1 << 22), 1379 /* limit LBA48 requests to 256 sectors */ 1380 IDE_HFLAG_RQSIZE_256 = (1 << 23), 1381 /* use 32-bit I/O ops */ 1382 IDE_HFLAG_IO_32BIT = (1 << 24), 1383 /* unmask IRQs */ 1384 IDE_HFLAG_UNMASK_IRQS = (1 << 25), 1385 IDE_HFLAG_BROKEN_ALTSTATUS = (1 << 26), 1386 /* serialize ports if DMA is possible (for sl82c105) */ 1387 IDE_HFLAG_SERIALIZE_DMA = (1 << 27), 1388 /* force host out of "simplex" mode */ 1389 IDE_HFLAG_CLEAR_SIMPLEX = (1 << 28), 1390 /* DSC overlap is unsupported */ 1391 IDE_HFLAG_NO_DSC = (1 << 29), 1392 /* never use 32-bit I/O ops */ 1393 IDE_HFLAG_NO_IO_32BIT = (1 << 30), 1394 /* never unmask IRQs */ 1395 IDE_HFLAG_NO_UNMASK_IRQS = (1 << 31), 1396}; 1397 1398#ifdef CONFIG_BLK_DEV_OFFBOARD 1399# define IDE_HFLAG_OFF_BOARD 0 1400#else 1401# define IDE_HFLAG_OFF_BOARD IDE_HFLAG_NON_BOOTABLE 1402#endif 1403 1404struct ide_port_info { 1405 char *name; 1406 unsigned int (*init_chipset)(struct pci_dev *); 1407 void (*init_iops)(ide_hwif_t *); 1408 void (*init_hwif)(ide_hwif_t *); 1409 int (*init_dma)(ide_hwif_t *, 1410 const struct ide_port_info *); 1411 1412 const struct ide_tp_ops *tp_ops; 1413 const struct ide_port_ops *port_ops; 1414 const struct ide_dma_ops *dma_ops; 1415 1416 ide_pci_enablebit_t enablebits[2]; 1417 hwif_chipset_t chipset; 1418 u32 host_flags; 1419 u8 pio_mask; 1420 u8 swdma_mask; 1421 u8 mwdma_mask; 1422 u8 udma_mask; 1423}; 1424 1425int ide_pci_init_one(struct pci_dev *, const struct ide_port_info *, void *); 1426int ide_pci_init_two(struct pci_dev *, struct pci_dev *, 1427 const struct ide_port_info *, void *); 1428void ide_pci_remove(struct pci_dev *); 1429 1430#ifdef CONFIG_PM 1431int ide_pci_suspend(struct pci_dev *, pm_message_t); 1432int ide_pci_resume(struct pci_dev *); 1433#else 1434#define ide_pci_suspend NULL 1435#define ide_pci_resume NULL 1436#endif 1437 1438void ide_map_sg(ide_drive_t *, struct request *); 1439void ide_init_sg_cmd(ide_drive_t *, struct request *); 1440 1441#define BAD_DMA_DRIVE 0 1442#define GOOD_DMA_DRIVE 1 1443 1444struct drive_list_entry { 1445 const char *id_model; 1446 const char *id_firmware; 1447}; 1448 1449int ide_in_drive_list(u16 *, const struct drive_list_entry *); 1450 1451#ifdef CONFIG_BLK_DEV_IDEDMA 1452int ide_dma_good_drive(ide_drive_t *); 1453int __ide_dma_bad_drive(ide_drive_t *); 1454int ide_id_dma_bug(ide_drive_t *); 1455 1456u8 ide_find_dma_mode(ide_drive_t *, u8); 1457 1458static inline u8 ide_max_dma_mode(ide_drive_t *drive) 1459{ 1460 return ide_find_dma_mode(drive, XFER_UDMA_6); 1461} 1462 1463void ide_dma_off_quietly(ide_drive_t *); 1464void ide_dma_off(ide_drive_t *); 1465void ide_dma_on(ide_drive_t *); 1466int ide_set_dma(ide_drive_t *); 1467void ide_check_dma_crc(ide_drive_t *); 1468ide_startstop_t ide_dma_intr(ide_drive_t *); 1469 1470int ide_allocate_dma_engine(ide_hwif_t *); 1471void ide_release_dma_engine(ide_hwif_t *); 1472 1473int ide_build_sglist(ide_drive_t *, struct request *); 1474void ide_destroy_dmatable(ide_drive_t *); 1475 1476#ifdef CONFIG_BLK_DEV_IDEDMA_SFF 1477int config_drive_for_dma(ide_drive_t *); 1478extern int ide_build_dmatable(ide_drive_t *, struct request *); 1479void ide_dma_host_set(ide_drive_t *, int); 1480extern int ide_dma_setup(ide_drive_t *); 1481void ide_dma_exec_cmd(ide_drive_t *, u8); 1482extern void ide_dma_start(ide_drive_t *); 1483int ide_dma_end(ide_drive_t *); 1484int ide_dma_test_irq(ide_drive_t *); 1485extern const struct ide_dma_ops sff_dma_ops; 1486#else 1487static inline int config_drive_for_dma(ide_drive_t *drive) { return 0; } 1488#endif /* CONFIG_BLK_DEV_IDEDMA_SFF */ 1489 1490void ide_dma_lost_irq(ide_drive_t *); 1491void ide_dma_timeout(ide_drive_t *); 1492 1493#else 1494static inline int ide_id_dma_bug(ide_drive_t *drive) { return 0; } 1495static inline u8 ide_find_dma_mode(ide_drive_t *drive, u8 speed) { return 0; } 1496static inline u8 ide_max_dma_mode(ide_drive_t *drive) { return 0; } 1497static inline void ide_dma_off_quietly(ide_drive_t *drive) { ; } 1498static inline void ide_dma_off(ide_drive_t *drive) { ; } 1499static inline void ide_dma_on(ide_drive_t *drive) { ; } 1500static inline void ide_dma_verbose(ide_drive_t *drive) { ; } 1501static inline int ide_set_dma(ide_drive_t *drive) { return 1; } 1502static inline void ide_check_dma_crc(ide_drive_t *drive) { ; } 1503static inline void ide_release_dma_engine(ide_hwif_t *hwif) { ; } 1504#endif /* CONFIG_BLK_DEV_IDEDMA */ 1505 1506#ifdef CONFIG_BLK_DEV_IDEACPI 1507extern int ide_acpi_exec_tfs(ide_drive_t *drive); 1508extern void ide_acpi_get_timing(ide_hwif_t *hwif); 1509extern void ide_acpi_push_timing(ide_hwif_t *hwif); 1510extern void ide_acpi_init(ide_hwif_t *hwif); 1511void ide_acpi_port_init_devices(ide_hwif_t *); 1512extern void ide_acpi_set_state(ide_hwif_t *hwif, int on); 1513#else 1514static inline int ide_acpi_exec_tfs(ide_drive_t *drive) { return 0; } 1515static inline void ide_acpi_get_timing(ide_hwif_t *hwif) { ; } 1516static inline void ide_acpi_push_timing(ide_hwif_t *hwif) { ; } 1517static inline void ide_acpi_init(ide_hwif_t *hwif) { ; } 1518static inline void ide_acpi_port_init_devices(ide_hwif_t *hwif) { ; } 1519static inline void ide_acpi_set_state(ide_hwif_t *hwif, int on) {} 1520#endif 1521 1522void ide_remove_port_from_hwgroup(ide_hwif_t *); 1523void ide_unregister(ide_hwif_t *); 1524 1525void ide_register_region(struct gendisk *); 1526void ide_unregister_region(struct gendisk *); 1527 1528void ide_undecoded_slave(ide_drive_t *); 1529 1530void ide_port_apply_params(ide_hwif_t *); 1531 1532struct ide_host *ide_host_alloc(const struct ide_port_info *, hw_regs_t **); 1533void ide_host_free(struct ide_host *); 1534int ide_host_register(struct ide_host *, const struct ide_port_info *, 1535 hw_regs_t **); 1536int ide_host_add(const struct ide_port_info *, hw_regs_t **, 1537 struct ide_host **); 1538void ide_host_remove(struct ide_host *); 1539int ide_legacy_device_add(const struct ide_port_info *, unsigned long); 1540void ide_port_unregister_devices(ide_hwif_t *); 1541void ide_port_scan(ide_hwif_t *); 1542 1543static inline void *ide_get_hwifdata (ide_hwif_t * hwif) 1544{ 1545 return hwif->hwif_data; 1546} 1547 1548static inline void ide_set_hwifdata (ide_hwif_t * hwif, void *data) 1549{ 1550 hwif->hwif_data = data; 1551} 1552 1553const char *ide_xfer_verbose(u8 mode); 1554extern void ide_toggle_bounce(ide_drive_t *drive, int on); 1555extern int ide_set_xfer_rate(ide_drive_t *drive, u8 rate); 1556 1557u64 ide_get_lba_addr(struct ide_taskfile *, int); 1558u8 ide_dump_status(ide_drive_t *, const char *, u8); 1559 1560struct ide_timing { 1561 u8 mode; 1562 u8 setup; /* t1 */ 1563 u16 act8b; /* t2 for 8-bit io */ 1564 u16 rec8b; /* t2i for 8-bit io */ 1565 u16 cyc8b; /* t0 for 8-bit io */ 1566 u16 active; /* t2 or tD */ 1567 u16 recover; /* t2i or tK */ 1568 u16 cycle; /* t0 */ 1569 u16 udma; /* t2CYCTYP/2 */ 1570}; 1571 1572enum { 1573 IDE_TIMING_SETUP = (1 << 0), 1574 IDE_TIMING_ACT8B = (1 << 1), 1575 IDE_TIMING_REC8B = (1 << 2), 1576 IDE_TIMING_CYC8B = (1 << 3), 1577 IDE_TIMING_8BIT = IDE_TIMING_ACT8B | IDE_TIMING_REC8B | 1578 IDE_TIMING_CYC8B, 1579 IDE_TIMING_ACTIVE = (1 << 4), 1580 IDE_TIMING_RECOVER = (1 << 5), 1581 IDE_TIMING_CYCLE = (1 << 6), 1582 IDE_TIMING_UDMA = (1 << 7), 1583 IDE_TIMING_ALL = IDE_TIMING_SETUP | IDE_TIMING_8BIT | 1584 IDE_TIMING_ACTIVE | IDE_TIMING_RECOVER | 1585 IDE_TIMING_CYCLE | IDE_TIMING_UDMA, 1586}; 1587 1588struct ide_timing *ide_timing_find_mode(u8); 1589u16 ide_pio_cycle_time(ide_drive_t *, u8); 1590void ide_timing_merge(struct ide_timing *, struct ide_timing *, 1591 struct ide_timing *, unsigned int); 1592int ide_timing_compute(ide_drive_t *, u8, struct ide_timing *, int, int); 1593 1594int ide_scan_pio_blacklist(char *); 1595 1596u8 ide_get_best_pio_mode(ide_drive_t *, u8, u8); 1597 1598int ide_set_pio_mode(ide_drive_t *, u8); 1599int ide_set_dma_mode(ide_drive_t *, u8); 1600 1601void ide_set_pio(ide_drive_t *, u8); 1602 1603static inline void ide_set_max_pio(ide_drive_t *drive) 1604{ 1605 ide_set_pio(drive, 255); 1606} 1607 1608extern spinlock_t ide_lock; 1609extern struct mutex ide_cfg_mtx; 1610/* 1611 * Structure locking: 1612 * 1613 * ide_cfg_mtx and ide_lock together protect changes to 1614 * ide_hwif_t->{next,hwgroup} 1615 * ide_drive_t->next 1616 * 1617 * ide_hwgroup_t->busy: ide_lock 1618 * ide_hwgroup_t->hwif: ide_lock 1619 * ide_hwif_t->mate: constant, no locking 1620 * ide_drive_t->hwif: constant, no locking 1621 */ 1622 1623#define local_irq_set(flags) do { local_save_flags((flags)); local_irq_enable_in_hardirq(); } while (0) 1624 1625extern struct bus_type ide_bus_type; 1626extern struct class *ide_port_class; 1627 1628static inline void ide_dump_identify(u8 *id) 1629{ 1630 print_hex_dump(KERN_INFO, "", DUMP_PREFIX_NONE, 16, 2, id, 512, 0); 1631} 1632 1633static inline int hwif_to_node(ide_hwif_t *hwif) 1634{ 1635 return hwif->dev ? dev_to_node(hwif->dev) : -1; 1636} 1637 1638static inline ide_drive_t *ide_get_pair_dev(ide_drive_t *drive) 1639{ 1640 ide_drive_t *peer = &drive->hwif->drives[(drive->dn ^ 1) & 1]; 1641 1642 return (peer->dev_flags & IDE_DFLAG_PRESENT) ? peer : NULL; 1643} 1644#endif /* _IDE_H */