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