aboutsummaryrefslogtreecommitdiffstats
path: root/include/linux
diff options
context:
space:
mode:
Diffstat (limited to 'include/linux')
-rw-r--r--include/linux/ata.h22
-rw-r--r--include/linux/libata.h72
2 files changed, 65 insertions, 29 deletions
diff --git a/include/linux/ata.h b/include/linux/ata.h
index 3671af869696..991b858acc30 100644
--- a/include/linux/ata.h
+++ b/include/linux/ata.h
@@ -40,6 +40,8 @@ enum {
40 ATA_MAX_DEVICES = 2, /* per bus/port */ 40 ATA_MAX_DEVICES = 2, /* per bus/port */
41 ATA_MAX_PRD = 256, /* we could make these 256/256 */ 41 ATA_MAX_PRD = 256, /* we could make these 256/256 */
42 ATA_SECT_SIZE = 512, 42 ATA_SECT_SIZE = 512,
43 ATA_MAX_SECTORS = 256,
44 ATA_MAX_SECTORS_LBA48 = 65535,/* TODO: 65536? */
43 45
44 ATA_ID_WORDS = 256, 46 ATA_ID_WORDS = 256,
45 ATA_ID_SERNO_OFS = 10, 47 ATA_ID_SERNO_OFS = 10,
@@ -168,12 +170,16 @@ enum {
168 XFER_UDMA_2 = 0x42, 170 XFER_UDMA_2 = 0x42,
169 XFER_UDMA_1 = 0x41, 171 XFER_UDMA_1 = 0x41,
170 XFER_UDMA_0 = 0x40, 172 XFER_UDMA_0 = 0x40,
173 XFER_MW_DMA_4 = 0x24, /* CFA only */
174 XFER_MW_DMA_3 = 0x23, /* CFA only */
171 XFER_MW_DMA_2 = 0x22, 175 XFER_MW_DMA_2 = 0x22,
172 XFER_MW_DMA_1 = 0x21, 176 XFER_MW_DMA_1 = 0x21,
173 XFER_MW_DMA_0 = 0x20, 177 XFER_MW_DMA_0 = 0x20,
174 XFER_SW_DMA_2 = 0x12, 178 XFER_SW_DMA_2 = 0x12,
175 XFER_SW_DMA_1 = 0x11, 179 XFER_SW_DMA_1 = 0x11,
176 XFER_SW_DMA_0 = 0x10, 180 XFER_SW_DMA_0 = 0x10,
181 XFER_PIO_6 = 0x0E, /* CFA only */
182 XFER_PIO_5 = 0x0D, /* CFA only */
177 XFER_PIO_4 = 0x0C, 183 XFER_PIO_4 = 0x0C,
178 XFER_PIO_3 = 0x0B, 184 XFER_PIO_3 = 0x0B,
179 XFER_PIO_2 = 0x0A, 185 XFER_PIO_2 = 0x0A,
@@ -272,7 +278,6 @@ struct ata_taskfile {
272}; 278};
273 279
274#define ata_id_is_ata(id) (((id)[0] & (1 << 15)) == 0) 280#define ata_id_is_ata(id) (((id)[0] & (1 << 15)) == 0)
275#define ata_id_is_cfa(id) ((id)[0] == 0x848A)
276#define ata_id_is_sata(id) ((id)[93] == 0) 281#define ata_id_is_sata(id) ((id)[93] == 0)
277#define ata_id_rahead_enabled(id) ((id)[85] & (1 << 6)) 282#define ata_id_rahead_enabled(id) ((id)[85] & (1 << 6))
278#define ata_id_wcache_enabled(id) ((id)[85] & (1 << 5)) 283#define ata_id_wcache_enabled(id) ((id)[85] & (1 << 5))
@@ -304,6 +309,9 @@ static inline unsigned int ata_id_major_version(const u16 *id)
304{ 309{
305 unsigned int mver; 310 unsigned int mver;
306 311
312 if (id[ATA_ID_MAJOR_VER] == 0xFFFF)
313 return 0;
314
307 for (mver = 14; mver >= 1; mver--) 315 for (mver = 14; mver >= 1; mver--)
308 if (id[ATA_ID_MAJOR_VER] & (1 << mver)) 316 if (id[ATA_ID_MAJOR_VER] & (1 << mver))
309 break; 317 break;
@@ -322,6 +330,18 @@ static inline int ata_id_current_chs_valid(const u16 *id)
322 id[56]; /* sectors in current translation */ 330 id[56]; /* sectors in current translation */
323} 331}
324 332
333static inline int ata_id_is_cfa(const u16 *id)
334{
335 u16 v = id[0];
336 if (v == 0x848A) /* Standard CF */
337 return 1;
338 /* Could be CF hiding as standard ATA */
339 if (ata_id_major_version(id) >= 3 && id[82] != 0xFFFF &&
340 (id[82] & ( 1 << 2)))
341 return 1;
342 return 0;
343}
344
325static inline int atapi_cdb_len(const u16 *dev_id) 345static inline int atapi_cdb_len(const u16 *dev_id)
326{ 346{
327 u16 tmp = dev_id[0] & 0x3; 347 u16 tmp = dev_id[0] & 0x3;
diff --git a/include/linux/libata.h b/include/linux/libata.h
index 66c3100c2b94..563885cb0995 100644
--- a/include/linux/libata.h
+++ b/include/linux/libata.h
@@ -36,6 +36,8 @@
36#include <linux/workqueue.h> 36#include <linux/workqueue.h>
37#include <scsi/scsi_host.h> 37#include <scsi/scsi_host.h>
38 38
39#include <asm/libata-portmap.h>
40
39/* 41/*
40 * compile-time options: to be removed as soon as all the drivers are 42 * compile-time options: to be removed as soon as all the drivers are
41 * converted to the new debugging mechanism 43 * converted to the new debugging mechanism
@@ -112,8 +114,6 @@ enum {
112 /* tag ATA_MAX_QUEUE - 1 is reserved for internal commands */ 114 /* tag ATA_MAX_QUEUE - 1 is reserved for internal commands */
113 ATA_MAX_QUEUE = 32, 115 ATA_MAX_QUEUE = 32,
114 ATA_TAG_INTERNAL = ATA_MAX_QUEUE - 1, 116 ATA_TAG_INTERNAL = ATA_MAX_QUEUE - 1,
115 ATA_MAX_SECTORS = 200, /* FIXME */
116 ATA_MAX_SECTORS_LBA48 = 65535,
117 ATA_MAX_BUS = 2, 117 ATA_MAX_BUS = 2,
118 ATA_DEF_BUSY_WAIT = 10000, 118 ATA_DEF_BUSY_WAIT = 10000,
119 ATA_SHORT_PAUSE = (HZ >> 6) + 1, 119 ATA_SHORT_PAUSE = (HZ >> 6) + 1,
@@ -197,7 +197,7 @@ enum {
197 ATA_QCFLAG_EH_SCHEDULED = (1 << 18), /* EH scheduled (obsolete) */ 197 ATA_QCFLAG_EH_SCHEDULED = (1 << 18), /* EH scheduled (obsolete) */
198 198
199 /* host set flags */ 199 /* host set flags */
200 ATA_HOST_SIMPLEX = (1 << 0), /* Host is simplex, one DMA channel per host_set only */ 200 ATA_HOST_SIMPLEX = (1 << 0), /* Host is simplex, one DMA channel per host only */
201 201
202 /* various lengths of time */ 202 /* various lengths of time */
203 ATA_TMOUT_BOOT = 30 * HZ, /* heuristic */ 203 ATA_TMOUT_BOOT = 30 * HZ, /* heuristic */
@@ -225,8 +225,8 @@ enum {
225 /* encoding various smaller bitmaps into a single 225 /* encoding various smaller bitmaps into a single
226 * unsigned int bitmap 226 * unsigned int bitmap
227 */ 227 */
228 ATA_BITS_PIO = 5, 228 ATA_BITS_PIO = 7,
229 ATA_BITS_MWDMA = 3, 229 ATA_BITS_MWDMA = 5,
230 ATA_BITS_UDMA = 8, 230 ATA_BITS_UDMA = 8,
231 231
232 ATA_SHIFT_PIO = 0, 232 ATA_SHIFT_PIO = 0,
@@ -350,23 +350,24 @@ struct ata_probe_ent {
350 struct scsi_host_template *sht; 350 struct scsi_host_template *sht;
351 struct ata_ioports port[ATA_MAX_PORTS]; 351 struct ata_ioports port[ATA_MAX_PORTS];
352 unsigned int n_ports; 352 unsigned int n_ports;
353 unsigned int hard_port_no; 353 unsigned int dummy_port_mask;
354 unsigned int pio_mask; 354 unsigned int pio_mask;
355 unsigned int mwdma_mask; 355 unsigned int mwdma_mask;
356 unsigned int udma_mask; 356 unsigned int udma_mask;
357 unsigned int legacy_mode;
358 unsigned long irq; 357 unsigned long irq;
358 unsigned long irq2;
359 unsigned int irq_flags; 359 unsigned int irq_flags;
360 unsigned long host_flags; 360 unsigned long port_flags;
361 unsigned long host_set_flags; 361 unsigned long _host_flags;
362 void __iomem *mmio_base; 362 void __iomem *mmio_base;
363 void *private_data; 363 void *private_data;
364}; 364};
365 365
366struct ata_host_set { 366struct ata_host {
367 spinlock_t lock; 367 spinlock_t lock;
368 struct device *dev; 368 struct device *dev;
369 unsigned long irq; 369 unsigned long irq;
370 unsigned long irq2;
370 void __iomem *mmio_base; 371 void __iomem *mmio_base;
371 unsigned int n_ports; 372 unsigned int n_ports;
372 void *private_data; 373 void *private_data;
@@ -374,7 +375,6 @@ struct ata_host_set {
374 unsigned long flags; 375 unsigned long flags;
375 int simplex_claimed; /* Keep seperate in case we 376 int simplex_claimed; /* Keep seperate in case we
376 ever need to do this locked */ 377 ever need to do this locked */
377 struct ata_host_set *next; /* for legacy mode */
378 struct ata_port *ports[0]; 378 struct ata_port *ports[0];
379}; 379};
380 380
@@ -420,7 +420,7 @@ struct ata_queued_cmd {
420 void *private_data; 420 void *private_data;
421}; 421};
422 422
423struct ata_host_stats { 423struct ata_port_stats {
424 unsigned long unhandled_irq; 424 unsigned long unhandled_irq;
425 unsigned long idle_irq; 425 unsigned long idle_irq;
426 unsigned long rw_reqbuf; 426 unsigned long rw_reqbuf;
@@ -498,14 +498,13 @@ struct ata_eh_context {
498}; 498};
499 499
500struct ata_port { 500struct ata_port {
501 struct Scsi_Host *host; /* our co-allocated scsi host */ 501 struct Scsi_Host *scsi_host; /* our co-allocated scsi host */
502 const struct ata_port_operations *ops; 502 const struct ata_port_operations *ops;
503 spinlock_t *lock; 503 spinlock_t *lock;
504 unsigned long flags; /* ATA_FLAG_xxx */ 504 unsigned long flags; /* ATA_FLAG_xxx */
505 unsigned int pflags; /* ATA_PFLAG_xxx */ 505 unsigned int pflags; /* ATA_PFLAG_xxx */
506 unsigned int id; /* unique id req'd by scsi midlyr */ 506 unsigned int id; /* unique id req'd by scsi midlyr */
507 unsigned int port_no; /* unique port #; from zero */ 507 unsigned int port_no; /* unique port #; from zero */
508 unsigned int hard_port_no; /* hardware port #; from zero */
509 508
510 struct ata_prd *prd; /* our SG list */ 509 struct ata_prd *prd; /* our SG list */
511 dma_addr_t prd_dma; /* and its DMA mapping */ 510 dma_addr_t prd_dma; /* and its DMA mapping */
@@ -524,7 +523,7 @@ struct ata_port {
524 unsigned int hw_sata_spd_limit; 523 unsigned int hw_sata_spd_limit;
525 unsigned int sata_spd_limit; /* SATA PHY speed limit */ 524 unsigned int sata_spd_limit; /* SATA PHY speed limit */
526 525
527 /* record runtime error info, protected by host_set lock */ 526 /* record runtime error info, protected by host lock */
528 struct ata_eh_info eh_info; 527 struct ata_eh_info eh_info;
529 /* EH context owned by EH */ 528 /* EH context owned by EH */
530 struct ata_eh_context eh_context; 529 struct ata_eh_context eh_context;
@@ -538,8 +537,8 @@ struct ata_port {
538 unsigned int active_tag; 537 unsigned int active_tag;
539 u32 sactive; 538 u32 sactive;
540 539
541 struct ata_host_stats stats; 540 struct ata_port_stats stats;
542 struct ata_host_set *host_set; 541 struct ata_host *host;
543 struct device *dev; 542 struct device *dev;
544 543
545 struct work_struct port_task; 544 struct work_struct port_task;
@@ -615,7 +614,7 @@ struct ata_port_operations {
615 int (*port_start) (struct ata_port *ap); 614 int (*port_start) (struct ata_port *ap);
616 void (*port_stop) (struct ata_port *ap); 615 void (*port_stop) (struct ata_port *ap);
617 616
618 void (*host_stop) (struct ata_host_set *host_set); 617 void (*host_stop) (struct ata_host *host);
619 618
620 void (*bmdma_stop) (struct ata_queued_cmd *qc); 619 void (*bmdma_stop) (struct ata_queued_cmd *qc);
621 u8 (*bmdma_status) (struct ata_port *ap); 620 u8 (*bmdma_status) (struct ata_port *ap);
@@ -623,7 +622,7 @@ struct ata_port_operations {
623 622
624struct ata_port_info { 623struct ata_port_info {
625 struct scsi_host_template *sht; 624 struct scsi_host_template *sht;
626 unsigned long host_flags; 625 unsigned long flags;
627 unsigned long pio_mask; 626 unsigned long pio_mask;
628 unsigned long mwdma_mask; 627 unsigned long mwdma_mask;
629 unsigned long udma_mask; 628 unsigned long udma_mask;
@@ -649,6 +648,8 @@ extern const unsigned long sata_deb_timing_normal[];
649extern const unsigned long sata_deb_timing_hotplug[]; 648extern const unsigned long sata_deb_timing_hotplug[];
650extern const unsigned long sata_deb_timing_long[]; 649extern const unsigned long sata_deb_timing_long[];
651 650
651extern const struct ata_port_operations ata_dummy_port_ops;
652
652static inline const unsigned long * 653static inline const unsigned long *
653sata_ehc_deb_timing(struct ata_eh_context *ehc) 654sata_ehc_deb_timing(struct ata_eh_context *ehc)
654{ 655{
@@ -658,6 +659,11 @@ sata_ehc_deb_timing(struct ata_eh_context *ehc)
658 return sata_deb_timing_normal; 659 return sata_deb_timing_normal;
659} 660}
660 661
662static inline int ata_port_is_dummy(struct ata_port *ap)
663{
664 return ap->ops == &ata_dummy_port_ops;
665}
666
661extern void ata_port_probe(struct ata_port *); 667extern void ata_port_probe(struct ata_port *);
662extern void __sata_phy_reset(struct ata_port *ap); 668extern void __sata_phy_reset(struct ata_port *ap);
663extern void sata_phy_reset(struct ata_port *ap); 669extern void sata_phy_reset(struct ata_port *ap);
@@ -676,19 +682,30 @@ extern void ata_std_ports(struct ata_ioports *ioaddr);
676extern int ata_pci_init_one (struct pci_dev *pdev, struct ata_port_info **port_info, 682extern int ata_pci_init_one (struct pci_dev *pdev, struct ata_port_info **port_info,
677 unsigned int n_ports); 683 unsigned int n_ports);
678extern void ata_pci_remove_one (struct pci_dev *pdev); 684extern void ata_pci_remove_one (struct pci_dev *pdev);
679extern void ata_pci_device_do_suspend(struct pci_dev *pdev, pm_message_t state); 685extern void ata_pci_device_do_suspend(struct pci_dev *pdev, pm_message_t mesg);
680extern void ata_pci_device_do_resume(struct pci_dev *pdev); 686extern void ata_pci_device_do_resume(struct pci_dev *pdev);
681extern int ata_pci_device_suspend(struct pci_dev *pdev, pm_message_t state); 687extern int ata_pci_device_suspend(struct pci_dev *pdev, pm_message_t mesg);
682extern int ata_pci_device_resume(struct pci_dev *pdev); 688extern int ata_pci_device_resume(struct pci_dev *pdev);
683extern int ata_pci_clear_simplex(struct pci_dev *pdev); 689extern int ata_pci_clear_simplex(struct pci_dev *pdev);
684#endif /* CONFIG_PCI */ 690#endif /* CONFIG_PCI */
685extern int ata_device_add(const struct ata_probe_ent *ent); 691extern int ata_device_add(const struct ata_probe_ent *ent);
686extern void ata_port_detach(struct ata_port *ap); 692extern void ata_port_detach(struct ata_port *ap);
687extern void ata_host_set_remove(struct ata_host_set *host_set); 693extern void ata_host_init(struct ata_host *, struct device *,
694 unsigned long, const struct ata_port_operations *);
695extern void ata_host_remove(struct ata_host *host);
688extern int ata_scsi_detect(struct scsi_host_template *sht); 696extern int ata_scsi_detect(struct scsi_host_template *sht);
689extern int ata_scsi_ioctl(struct scsi_device *dev, int cmd, void __user *arg); 697extern int ata_scsi_ioctl(struct scsi_device *dev, int cmd, void __user *arg);
690extern int ata_scsi_queuecmd(struct scsi_cmnd *cmd, void (*done)(struct scsi_cmnd *)); 698extern int ata_scsi_queuecmd(struct scsi_cmnd *cmd, void (*done)(struct scsi_cmnd *));
691extern int ata_scsi_release(struct Scsi_Host *host); 699extern int ata_scsi_release(struct Scsi_Host *host);
700extern void ata_sas_port_destroy(struct ata_port *);
701extern struct ata_port *ata_sas_port_alloc(struct ata_host *,
702 struct ata_port_info *, struct Scsi_Host *);
703extern int ata_sas_port_init(struct ata_port *);
704extern int ata_sas_port_start(struct ata_port *ap);
705extern void ata_sas_port_stop(struct ata_port *ap);
706extern int ata_sas_slave_configure(struct scsi_device *, struct ata_port *);
707extern int ata_sas_queuecmd(struct scsi_cmnd *cmd, void (*done)(struct scsi_cmnd *),
708 struct ata_port *ap);
692extern unsigned int ata_host_intr(struct ata_port *ap, struct ata_queued_cmd *qc); 709extern unsigned int ata_host_intr(struct ata_port *ap, struct ata_queued_cmd *qc);
693extern int sata_scr_valid(struct ata_port *ap); 710extern int sata_scr_valid(struct ata_port *ap);
694extern int sata_scr_read(struct ata_port *ap, int reg, u32 *val); 711extern int sata_scr_read(struct ata_port *ap, int reg, u32 *val);
@@ -697,10 +714,9 @@ extern int sata_scr_write_flush(struct ata_port *ap, int reg, u32 val);
697extern int ata_port_online(struct ata_port *ap); 714extern int ata_port_online(struct ata_port *ap);
698extern int ata_port_offline(struct ata_port *ap); 715extern int ata_port_offline(struct ata_port *ap);
699extern int ata_scsi_device_resume(struct scsi_device *); 716extern int ata_scsi_device_resume(struct scsi_device *);
700extern int ata_scsi_device_suspend(struct scsi_device *, pm_message_t state); 717extern int ata_scsi_device_suspend(struct scsi_device *, pm_message_t mesg);
701extern int ata_host_set_suspend(struct ata_host_set *host_set, 718extern int ata_host_suspend(struct ata_host *host, pm_message_t mesg);
702 pm_message_t mesg); 719extern void ata_host_resume(struct ata_host *host);
703extern void ata_host_set_resume(struct ata_host_set *host_set);
704extern int ata_ratelimit(void); 720extern int ata_ratelimit(void);
705extern unsigned int ata_busy_sleep(struct ata_port *ap, 721extern unsigned int ata_busy_sleep(struct ata_port *ap,
706 unsigned long timeout_pat, 722 unsigned long timeout_pat,
@@ -725,7 +741,7 @@ extern u8 ata_altstatus(struct ata_port *ap);
725extern void ata_exec_command(struct ata_port *ap, const struct ata_taskfile *tf); 741extern void ata_exec_command(struct ata_port *ap, const struct ata_taskfile *tf);
726extern int ata_port_start (struct ata_port *ap); 742extern int ata_port_start (struct ata_port *ap);
727extern void ata_port_stop (struct ata_port *ap); 743extern void ata_port_stop (struct ata_port *ap);
728extern void ata_host_stop (struct ata_host_set *host_set); 744extern void ata_host_stop (struct ata_host *host);
729extern irqreturn_t ata_interrupt (int irq, void *dev_instance, struct pt_regs *regs); 745extern irqreturn_t ata_interrupt (int irq, void *dev_instance, struct pt_regs *regs);
730extern void ata_mmio_data_xfer(struct ata_device *adev, unsigned char *buf, 746extern void ata_mmio_data_xfer(struct ata_device *adev, unsigned char *buf,
731 unsigned int buflen, int write_data); 747 unsigned int buflen, int write_data);
@@ -811,7 +827,7 @@ struct pci_bits {
811 unsigned long val; 827 unsigned long val;
812}; 828};
813 829
814extern void ata_pci_host_stop (struct ata_host_set *host_set); 830extern void ata_pci_host_stop (struct ata_host *host);
815extern struct ata_probe_ent * 831extern struct ata_probe_ent *
816ata_pci_init_native_mode(struct pci_dev *pdev, struct ata_port_info **port, int portmask); 832ata_pci_init_native_mode(struct pci_dev *pdev, struct ata_port_info **port, int portmask);
817extern int pci_test_config_bits(struct pci_dev *pdev, const struct pci_bits *bits); 833extern int pci_test_config_bits(struct pci_dev *pdev, const struct pci_bits *bits);