1#ifndef _IDE_H
2#define _IDE_H
3
4
5
6
7
8
9#include <linux/config.h>
10#include <linux/init.h>
11#include <linux/ioport.h>
12#include <linux/hdreg.h>
13#include <linux/hdsmart.h>
14#include <linux/blkdev.h>
15#include <linux/proc_fs.h>
16#include <linux/interrupt.h>
17#include <linux/bitops.h>
18#include <linux/bio.h>
19#include <linux/device.h>
20#include <linux/pci.h>
21#include <asm/byteorder.h>
22#include <asm/system.h>
23#include <asm/io.h>
24#include <asm/semaphore.h>
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42#define INITIAL_MULT_COUNT 0
43
44#ifndef SUPPORT_SLOW_DATA_PORTS
45#define SUPPORT_SLOW_DATA_PORTS 1
46#endif
47#ifndef SUPPORT_VLB_SYNC
48#define SUPPORT_VLB_SYNC 1
49#endif
50#ifndef OK_TO_RESET_CONTROLLER
51#define OK_TO_RESET_CONTROLLER 1
52#endif
53
54#ifndef DISABLE_IRQ_NOSYNC
55#define DISABLE_IRQ_NOSYNC 0
56#endif
57
58
59
60
61
62
63#define IDE_NO_IRQ (-1)
64
65
66
67
68
69typedef unsigned char byte;
70
71
72
73
74#define ERROR_MAX 8
75#define ERROR_RESET 3
76#define ERROR_RECAL 1
77
78
79
80
81#define IDE_TUNE_NOAUTO 2
82#define IDE_TUNE_AUTO 1
83#define IDE_TUNE_DEFAULT 0
84
85
86
87
88
89#define DMA_PIO_RETRY 1
90
91#define HWIF(drive) ((ide_hwif_t *)((drive)->hwif))
92#define HWGROUP(drive) ((ide_hwgroup_t *)(HWIF(drive)->hwgroup))
93
94
95
96
97#define IDE_NR_PORTS (10)
98
99#define IDE_DATA_OFFSET (0)
100#define IDE_ERROR_OFFSET (1)
101#define IDE_NSECTOR_OFFSET (2)
102#define IDE_SECTOR_OFFSET (3)
103#define IDE_LCYL_OFFSET (4)
104#define IDE_HCYL_OFFSET (5)
105#define IDE_SELECT_OFFSET (6)
106#define IDE_STATUS_OFFSET (7)
107#define IDE_CONTROL_OFFSET (8)
108#define IDE_IRQ_OFFSET (9)
109
110#define IDE_FEATURE_OFFSET IDE_ERROR_OFFSET
111#define IDE_COMMAND_OFFSET IDE_STATUS_OFFSET
112
113#define IDE_CONTROL_OFFSET_HOB (7)
114
115#define IDE_DATA_REG (HWIF(drive)->io_ports[IDE_DATA_OFFSET])
116#define IDE_ERROR_REG (HWIF(drive)->io_ports[IDE_ERROR_OFFSET])
117#define IDE_NSECTOR_REG (HWIF(drive)->io_ports[IDE_NSECTOR_OFFSET])
118#define IDE_SECTOR_REG (HWIF(drive)->io_ports[IDE_SECTOR_OFFSET])
119#define IDE_LCYL_REG (HWIF(drive)->io_ports[IDE_LCYL_OFFSET])
120#define IDE_HCYL_REG (HWIF(drive)->io_ports[IDE_HCYL_OFFSET])
121#define IDE_SELECT_REG (HWIF(drive)->io_ports[IDE_SELECT_OFFSET])
122#define IDE_STATUS_REG (HWIF(drive)->io_ports[IDE_STATUS_OFFSET])
123#define IDE_CONTROL_REG (HWIF(drive)->io_ports[IDE_CONTROL_OFFSET])
124#define IDE_IRQ_REG (HWIF(drive)->io_ports[IDE_IRQ_OFFSET])
125
126#define IDE_FEATURE_REG IDE_ERROR_REG
127#define IDE_COMMAND_REG IDE_STATUS_REG
128#define IDE_ALTSTATUS_REG IDE_CONTROL_REG
129#define IDE_IREASON_REG IDE_NSECTOR_REG
130#define IDE_BCOUNTL_REG IDE_LCYL_REG
131#define IDE_BCOUNTH_REG IDE_HCYL_REG
132
133#define OK_STAT(stat,good,bad) (((stat)&((good)|(bad)))==(good))
134#define BAD_R_STAT (BUSY_STAT | ERR_STAT)
135#define BAD_W_STAT (BAD_R_STAT | WRERR_STAT)
136#define BAD_STAT (BAD_R_STAT | DRQ_STAT)
137#define DRIVE_READY (READY_STAT | SEEK_STAT)
138#define DATA_READY (DRQ_STAT)
139
140#define BAD_CRC (ABRT_ERR | ICRC_ERR)
141
142#define SATA_NR_PORTS (3)
143
144#define SATA_STATUS_OFFSET (0)
145#define SATA_STATUS_REG (HWIF(drive)->sata_scr[SATA_STATUS_OFFSET])
146#define SATA_ERROR_OFFSET (1)
147#define SATA_ERROR_REG (HWIF(drive)->sata_scr[SATA_ERROR_OFFSET])
148#define SATA_CONTROL_OFFSET (2)
149#define SATA_CONTROL_REG (HWIF(drive)->sata_scr[SATA_CONTROL_OFFSET])
150
151#define SATA_MISC_OFFSET (0)
152#define SATA_MISC_REG (HWIF(drive)->sata_misc[SATA_MISC_OFFSET])
153#define SATA_PHY_OFFSET (1)
154#define SATA_PHY_REG (HWIF(drive)->sata_misc[SATA_PHY_OFFSET])
155#define SATA_IEN_OFFSET (2)
156#define SATA_IEN_REG (HWIF(drive)->sata_misc[SATA_IEN_OFFSET])
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174#define PRD_BYTES 8
175#define PRD_ENTRIES 256
176
177
178
179
180#define PARTN_BITS 6
181#define MAX_DRIVES 2
182#define SECTOR_SIZE 512
183#define SECTOR_WORDS (SECTOR_SIZE / 4)
184#define IDE_LARGE_SEEK(b1,b2,t) (((b1) > (b2) + (t)) || ((b2) > (b1) + (t)))
185
186
187
188
189#define WAIT_DRQ (HZ/10)
190#define WAIT_READY (5*HZ)
191#define WAIT_PIDENTIFY (10*HZ)
192#define WAIT_WORSTCASE (30*HZ)
193#define WAIT_CMD (10*HZ)
194#define WAIT_MIN_SLEEP (2*HZ/100)
195
196#define HOST(hwif,chipset) \
197{ \
198 return ((hwif)->chipset == chipset) ? 1 : 0; \
199}
200
201
202
203
204struct hwif_s;
205typedef int (ide_ack_intr_t)(struct hwif_s *);
206
207#ifndef NO_DMA
208#define NO_DMA 255
209#endif
210
211
212
213
214
215typedef enum { ide_unknown, ide_generic, ide_pci,
216 ide_cmd640, ide_dtc2278, ide_ali14xx,
217 ide_qd65xx, ide_umc8672, ide_ht6560b,
218 ide_rz1000, ide_trm290,
219 ide_cmd646, ide_cy82c693, ide_4drives,
220 ide_pmac, ide_etrax100, ide_acorn,
221 ide_forced
222} hwif_chipset_t;
223
224
225
226
227typedef struct hw_regs_s {
228 unsigned long io_ports[IDE_NR_PORTS];
229 int irq;
230 int dma;
231 ide_ack_intr_t *ack_intr;
232 hwif_chipset_t chipset;
233} hw_regs_t;
234
235
236
237
238int ide_register_hw(hw_regs_t *hw, struct hwif_s **hwifp);
239int ide_register_hw_with_fixup(hw_regs_t *, struct hwif_s **, void (*)(struct hwif_s *));
240
241
242
243
244void ide_setup_ports( hw_regs_t *hw,
245 unsigned long base,
246 int *offsets,
247 unsigned long ctrl,
248 unsigned long intr,
249 ide_ack_intr_t *ack_intr,
250#if 0
251 ide_io_ops_t *iops,
252#endif
253 int irq);
254
255static inline void ide_std_init_ports(hw_regs_t *hw,
256 unsigned long io_addr,
257 unsigned long ctl_addr)
258{
259 unsigned int i;
260
261 for (i = IDE_DATA_OFFSET; i <= IDE_STATUS_OFFSET; i++)
262 hw->io_ports[i] = io_addr++;
263
264 hw->io_ports[IDE_CONTROL_OFFSET] = ctl_addr;
265}
266
267#include <asm/ide.h>
268
269
270#ifndef IDE_ARCH_OBSOLETE_DEFAULTS
271# define ide_default_io_base(index) (0)
272# define ide_default_irq(base) (0)
273# define ide_init_default_irq(base) (0)
274#endif
275
276
277
278
279
280#ifdef IDE_ARCH_OBSOLETE_INIT
281static inline void ide_init_hwif_ports(hw_regs_t *hw,
282 unsigned long io_addr,
283 unsigned long ctl_addr,
284 int *irq)
285{
286 if (!ctl_addr)
287 ide_std_init_ports(hw, io_addr, ide_default_io_ctl(io_addr));
288 else
289 ide_std_init_ports(hw, io_addr, ctl_addr);
290
291 if (irq)
292 *irq = 0;
293
294 hw->io_ports[IDE_IRQ_OFFSET] = 0;
295
296#ifdef CONFIG_PPC32
297 if (ppc_ide_md.ide_init_hwif)
298 ppc_ide_md.ide_init_hwif(hw, io_addr, ctl_addr, irq);
299#endif
300}
301#else
302static inline void ide_init_hwif_ports(hw_regs_t *hw,
303 unsigned long io_addr,
304 unsigned long ctl_addr,
305 int *irq)
306{
307 if (io_addr || ctl_addr)
308 printk(KERN_WARNING "%s: must not be called\n", __FUNCTION__);
309}
310#endif
311
312
313#ifndef IDE_ARCH_ACK_INTR
314# define ide_ack_intr(hwif) (1)
315#endif
316
317
318#ifndef IDE_ARCH_LOCK
319# define ide_release_lock() do {} while (0)
320# define ide_get_lock(hdlr, data) do {} while (0)
321#endif
322
323
324
325
326
327#define ide_scsi 0x21
328#define ide_disk 0x20
329#define ide_optical 0x7
330#define ide_cdrom 0x5
331#define ide_tape 0x1
332#define ide_floppy 0x0
333
334
335
336
337
338
339
340
341
342
343
344typedef union {
345 unsigned all : 8;
346 struct {
347#if defined(__LITTLE_ENDIAN_BITFIELD)
348 unsigned set_geometry : 1;
349 unsigned recalibrate : 1;
350 unsigned set_multmode : 1;
351 unsigned set_tune : 1;
352 unsigned serviced : 1;
353 unsigned reserved : 3;
354#elif defined(__BIG_ENDIAN_BITFIELD)
355 unsigned reserved : 3;
356 unsigned serviced : 1;
357 unsigned set_tune : 1;
358 unsigned set_multmode : 1;
359 unsigned recalibrate : 1;
360 unsigned set_geometry : 1;
361#else
362#error "Please fix <asm/byteorder.h>"
363#endif
364 } b;
365} special_t;
366
367
368
369
370
371
372
373typedef union {
374 unsigned all :16;
375 struct {
376#if defined(__LITTLE_ENDIAN_BITFIELD)
377 unsigned low :8;
378 unsigned high :8;
379#elif defined(__BIG_ENDIAN_BITFIELD)
380 unsigned high :8;
381 unsigned low :8;
382#else
383#error "Please fix <asm/byteorder.h>"
384#endif
385 } b;
386} ata_nsector_t, ata_data_t, atapi_bcount_t, ata_index_t;
387
388
389
390
391
392
393
394
395
396
397
398
399
400typedef union {
401 unsigned all :8;
402 struct {
403#if defined(__LITTLE_ENDIAN_BITFIELD)
404 unsigned mark :1;
405 unsigned tzero :1;
406 unsigned abrt :1;
407 unsigned mcr :1;
408 unsigned id :1;
409 unsigned mce :1;
410 unsigned ecc :1;
411 unsigned bdd :1;
412#elif defined(__BIG_ENDIAN_BITFIELD)
413 unsigned bdd :1;
414 unsigned ecc :1;
415 unsigned mce :1;
416 unsigned id :1;
417 unsigned mcr :1;
418 unsigned abrt :1;
419 unsigned tzero :1;
420 unsigned mark :1;
421#else
422#error "Please fix <asm/byteorder.h>"
423#endif
424 } b;
425} ata_error_t;
426
427
428
429
430
431
432
433
434
435
436typedef union {
437 unsigned all : 8;
438 struct {
439#if defined(__LITTLE_ENDIAN_BITFIELD)
440 unsigned head : 4;
441 unsigned unit : 1;
442 unsigned bit5 : 1;
443 unsigned lba : 1;
444 unsigned bit7 : 1;
445#elif defined(__BIG_ENDIAN_BITFIELD)
446 unsigned bit7 : 1;
447 unsigned lba : 1;
448 unsigned bit5 : 1;
449 unsigned unit : 1;
450 unsigned head : 4;
451#else
452#error "Please fix <asm/byteorder.h>"
453#endif
454 } b;
455} select_t, ata_select_t;
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474typedef union {
475 unsigned all :8;
476 struct {
477#if defined(__LITTLE_ENDIAN_BITFIELD)
478 unsigned check :1;
479 unsigned idx :1;
480 unsigned corr :1;
481 unsigned drq :1;
482 unsigned dsc :1;
483 unsigned df :1;
484 unsigned drdy :1;
485 unsigned bsy :1;
486#elif defined(__BIG_ENDIAN_BITFIELD)
487 unsigned bsy :1;
488 unsigned drdy :1;
489 unsigned df :1;
490 unsigned dsc :1;
491 unsigned drq :1;
492 unsigned corr :1;
493 unsigned idx :1;
494 unsigned check :1;
495#else
496#error "Please fix <asm/byteorder.h>"
497#endif
498 } b;
499} ata_status_t, atapi_status_t;
500
501
502
503
504
505
506
507
508
509
510
511typedef union {
512 unsigned all : 8;
513 struct {
514#if defined(__LITTLE_ENDIAN_BITFIELD)
515 unsigned bit0 : 1;
516 unsigned nIEN : 1;
517 unsigned SRST : 1;
518 unsigned bit3 : 1;
519 unsigned reserved456 : 3;
520 unsigned HOB : 1;
521#elif defined(__BIG_ENDIAN_BITFIELD)
522 unsigned HOB : 1;
523 unsigned reserved456 : 3;
524 unsigned bit3 : 1;
525 unsigned SRST : 1;
526 unsigned nIEN : 1;
527 unsigned bit0 : 1;
528#else
529#error "Please fix <asm/byteorder.h>"
530#endif
531 } b;
532} ata_control_t;
533
534
535
536
537
538
539
540
541
542typedef union {
543 unsigned all :8;
544 struct {
545#if defined(__LITTLE_ENDIAN_BITFIELD)
546 unsigned dma :1;
547 unsigned reserved321 :3;
548 unsigned reserved654 :3;
549 unsigned reserved7 :1;
550#elif defined(__BIG_ENDIAN_BITFIELD)
551 unsigned reserved7 :1;
552 unsigned reserved654 :3;
553 unsigned reserved321 :3;
554 unsigned dma :1;
555#else
556#error "Please fix <asm/byteorder.h>"
557#endif
558 } b;
559} atapi_feature_t;
560
561
562
563
564
565
566
567
568typedef union {
569 unsigned all :8;
570 struct {
571#if defined(__LITTLE_ENDIAN_BITFIELD)
572 unsigned cod :1;
573 unsigned io :1;
574 unsigned reserved :6;
575#elif defined(__BIG_ENDIAN_BITFIELD)
576 unsigned reserved :6;
577 unsigned io :1;
578 unsigned cod :1;
579#else
580#error "Please fix <asm/byteorder.h>"
581#endif
582 } b;
583} atapi_ireason_t;
584
585
586
587
588
589
590
591
592
593
594typedef union {
595 unsigned all :8;
596 struct {
597#if defined(__LITTLE_ENDIAN_BITFIELD)
598 unsigned ili :1;
599 unsigned eom :1;
600 unsigned abrt :1;
601 unsigned mcr :1;
602 unsigned sense_key :4;
603#elif defined(__BIG_ENDIAN_BITFIELD)
604 unsigned sense_key :4;
605 unsigned mcr :1;
606 unsigned abrt :1;
607 unsigned eom :1;
608 unsigned ili :1;
609#else
610#error "Please fix <asm/byteorder.h>"
611#endif
612 } b;
613} atapi_error_t;
614
615
616
617
618
619
620
621
622
623
624
625typedef union {
626 unsigned all :8;
627 struct {
628#if defined(__LITTLE_ENDIAN_BITFIELD)
629 unsigned sam_lun :3;
630 unsigned reserved3 :1;
631 unsigned drv :1;
632 unsigned one5 :1;
633 unsigned reserved6 :1;
634 unsigned one7 :1;
635#elif defined(__BIG_ENDIAN_BITFIELD)
636 unsigned one7 :1;
637 unsigned reserved6 :1;
638 unsigned one5 :1;
639 unsigned drv :1;
640 unsigned reserved3 :1;
641 unsigned sam_lun :3;
642#else
643#error "Please fix <asm/byteorder.h>"
644#endif
645 } b;
646} atapi_select_t;
647
648
649
650
651typedef enum {
652 ide_stopped,
653 ide_started,
654} ide_startstop_t;
655
656struct ide_driver_s;
657struct ide_settings_s;
658
659typedef struct ide_drive_s {
660 char name[4];
661 char driver_req[10];
662
663 request_queue_t *queue;
664
665 struct request *rq;
666 struct ide_drive_s *next;
667 struct ide_driver_s *driver;
668 void *driver_data;
669 struct hd_driveid *id;
670 struct proc_dir_entry *proc;
671 struct ide_settings_s *settings;
672 char devfs_name[64];
673
674 struct hwif_s *hwif;
675
676 unsigned long sleep;
677 unsigned long service_start;
678 unsigned long service_time;
679 unsigned long timeout;
680
681 special_t special;
682 select_t select;
683
684 u8 keep_settings;
685 u8 autodma;
686 u8 using_dma;
687 u8 retry_pio;
688 u8 state;
689 u8 waiting_for_dma;
690 u8 unmask;
691 u8 bswap;
692 u8 dsc_overlap;
693 u8 nice1;
694
695 unsigned present : 1;
696 unsigned dead : 1;
697 unsigned id_read : 1;
698 unsigned noprobe : 1;
699 unsigned removable : 1;
700 unsigned attach : 1;
701 unsigned is_flash : 1;
702 unsigned forced_geom : 1;
703 unsigned no_unmask : 1;
704 unsigned no_io_32bit : 1;
705 unsigned atapi_overlap : 1;
706 unsigned nice0 : 1;
707 unsigned nice2 : 1;
708 unsigned doorlocking : 1;
709 unsigned autotune : 2;
710 unsigned remap_0_to_1 : 1;
711 unsigned blocked : 1;
712 unsigned vdma : 1;
713 unsigned addressing;
714
715
716
717
718
719 unsigned scsi : 1;
720 unsigned sleeping : 1;
721
722 u8 quirk_list;
723 u8 init_speed;
724 u8 pio_speed;
725 u8 current_speed;
726 u8 dn;
727 u8 wcache;
728 u8 acoustic;
729 u8 media;
730 u8 ctl;
731 u8 ready_stat;
732 u8 mult_count;
733 u8 mult_req;
734 u8 tune_req;
735 u8 io_32bit;
736 u8 bad_wstat;
737 u8 nowerr;
738 u8 sect0;
739 u8 head;
740 u8 sect;
741 u8 bios_head;
742 u8 bios_sect;
743 u8 doing_barrier;
744
745 unsigned int bios_cyl;
746 unsigned int cyl;
747 unsigned int drive_data;
748 unsigned int usage;
749 unsigned int failures;
750 unsigned int max_failures;
751
752 u64 capacity64;
753
754 int lun;
755 int crc_count;
756 struct list_head list;
757 struct device gendev;
758 struct semaphore gendev_rel_sem;
759 struct gendisk *disk;
760} ide_drive_t;
761
762#define IDE_CHIPSET_PCI_MASK \
763 ((1<<ide_pci)|(1<<ide_cmd646)|(1<<ide_ali14xx))
764#define IDE_CHIPSET_IS_PCI(c) ((IDE_CHIPSET_PCI_MASK >> (c)) & 1)
765
766struct ide_pci_device_s;
767
768typedef struct hwif_s {
769 struct hwif_s *next;
770 struct hwif_s *mate;
771 struct hwgroup_s *hwgroup;
772 struct proc_dir_entry *proc;
773
774 char name[6];
775
776
777 unsigned long io_ports[IDE_NR_PORTS];
778 unsigned long sata_scr[SATA_NR_PORTS];
779 unsigned long sata_misc[SATA_NR_PORTS];
780
781 hw_regs_t hw;
782 ide_drive_t drives[MAX_DRIVES];
783
784 u8 major;
785 u8 index;
786 u8 channel;
787 u8 straight8;
788 u8 bus_state;
789
790 u8 atapi_dma;
791 u8 ultra_mask;
792 u8 mwdma_mask;
793 u8 swdma_mask;
794
795 hwif_chipset_t chipset;
796
797 struct pci_dev *pci_dev;
798 struct ide_pci_device_s *cds;
799
800 void (*rw_disk)(ide_drive_t *, struct request *);
801
802#if 0
803 ide_hwif_ops_t *hwifops;
804#else
805
806 void (*tuneproc)(ide_drive_t *, u8);
807
808 int (*speedproc)(ide_drive_t *, u8);
809
810 void (*selectproc)(ide_drive_t *);
811
812 int (*reset_poll)(ide_drive_t *);
813
814 void (*pre_reset)(ide_drive_t *);
815
816 void (*resetproc)(ide_drive_t *);
817
818 void (*intrproc)(ide_drive_t *);
819
820 void (*maskproc)(ide_drive_t *, int);
821
822 int (*quirkproc)(ide_drive_t *);
823
824 int (*busproc)(ide_drive_t *, int);
825
826
827
828
829#endif
830
831 void (*ata_input_data)(ide_drive_t *, void *, u32);
832 void (*ata_output_data)(ide_drive_t *, void *, u32);
833
834 void (*atapi_input_bytes)(ide_drive_t *, void *, u32);
835 void (*atapi_output_bytes)(ide_drive_t *, void *, u32);
836
837 int (*dma_setup)(ide_drive_t *);
838 void (*dma_exec_cmd)(ide_drive_t *, u8);
839 void (*dma_start)(ide_drive_t *);
840 int (*ide_dma_end)(ide_drive_t *drive);
841 int (*ide_dma_check)(ide_drive_t *drive);
842 int (*ide_dma_on)(ide_drive_t *drive);
843 int (*ide_dma_off_quietly)(ide_drive_t *drive);
844 int (*ide_dma_test_irq)(ide_drive_t *drive);
845 int (*ide_dma_host_on)(ide_drive_t *drive);
846 int (*ide_dma_host_off)(ide_drive_t *drive);
847 int (*ide_dma_lostirq)(ide_drive_t *drive);
848 int (*ide_dma_timeout)(ide_drive_t *drive);
849
850 void (*OUTB)(u8 addr, unsigned long port);
851 void (*OUTBSYNC)(ide_drive_t *drive, u8 addr, unsigned long port);
852 void (*OUTW)(u16 addr, unsigned long port);
853 void (*OUTL)(u32 addr, unsigned long port);
854 void (*OUTSW)(unsigned long port, void *addr, u32 count);
855 void (*OUTSL)(unsigned long port, void *addr, u32 count);
856
857 u8 (*INB)(unsigned long port);
858 u16 (*INW)(unsigned long port);
859 u32 (*INL)(unsigned long port);
860 void (*INSW)(unsigned long port, void *addr, u32 count);
861 void (*INSL)(unsigned long port, void *addr, u32 count);
862
863
864 unsigned int *dmatable_cpu;
865
866 dma_addr_t dmatable_dma;
867
868 struct scatterlist *sg_table;
869 int sg_max_nents;
870 int sg_nents;
871 int sg_dma_direction;
872
873
874 int data_phase;
875
876 unsigned int nsect;
877 unsigned int nleft;
878 unsigned int cursg;
879 unsigned int cursg_ofs;
880
881 int mmio;
882 int rqsize;
883 int irq;
884
885 unsigned long dma_master;
886 unsigned long dma_base;
887 unsigned long dma_command;
888 unsigned long dma_vendor1;
889 unsigned long dma_status;
890 unsigned long dma_vendor3;
891 unsigned long dma_prdtable;
892 unsigned long dma_base2;
893
894 unsigned dma_extra;
895 unsigned long config_data;
896 unsigned long select_data;
897
898 unsigned noprobe : 1;
899 unsigned present : 1;
900 unsigned hold : 1;
901 unsigned serialized : 1;
902 unsigned sharing_irq: 1;
903 unsigned reset : 1;
904 unsigned autodma : 1;
905 unsigned udma_four : 1;
906 unsigned no_lba48 : 1;
907 unsigned no_lba48_dma : 1;
908 unsigned no_dsc : 1;
909 unsigned auto_poll : 1;
910 unsigned sg_mapped : 1;
911
912 struct device gendev;
913 struct semaphore gendev_rel_sem;
914
915 void *hwif_data;
916
917 unsigned dma;
918
919 void (*led_act)(void *data, int rw);
920} ide_hwif_t;
921
922
923
924
925typedef ide_startstop_t (ide_pre_handler_t)(ide_drive_t *, struct request *);
926typedef ide_startstop_t (ide_handler_t)(ide_drive_t *);
927typedef int (ide_expiry_t)(ide_drive_t *);
928
929typedef struct hwgroup_s {
930
931 ide_startstop_t (*handler)(ide_drive_t *);
932
933 ide_startstop_t (*handler_save)(ide_drive_t *);
934
935 volatile int busy;
936
937 unsigned int sleeping : 1;
938
939 unsigned int polling : 1;
940
941 ide_drive_t *drive;
942
943 ide_hwif_t *hwif;
944
945
946 struct pci_dev *pci_dev;
947
948 struct ide_pci_device_s *cds;
949
950
951 struct request *rq;
952
953 struct timer_list timer;
954
955 struct request wrq;
956
957 unsigned long poll_timeout;
958
959 int (*expiry)(ide_drive_t *);
960
961 int pio_clock;
962
963 unsigned char cmd_buf[4];
964} ide_hwgroup_t;
965
966
967
968
969
970
971
972#define TYPE_INT 0
973#define TYPE_INTA 1
974#define TYPE_BYTE 2
975#define TYPE_SHORT 3
976
977#define SETTING_READ (1 << 0)
978#define SETTING_WRITE (1 << 1)
979#define SETTING_RW (SETTING_READ | SETTING_WRITE)
980
981typedef int (ide_procset_t)(ide_drive_t *, int);
982typedef struct ide_settings_s {
983 char *name;
984 int rw;
985 int read_ioctl;
986 int write_ioctl;
987 int data_type;
988 int min;
989 int max;
990 int mul_factor;
991 int div_factor;
992 void *data;
993 ide_procset_t *set;
994 int auto_remove;
995 struct ide_settings_s *next;
996} ide_settings_t;
997
998extern struct semaphore ide_setting_sem;
999extern int ide_add_setting(ide_drive_t *drive, const char *name, int rw, int read_ioctl, int write_ioctl, int data_type, int min, int max, int mul_factor, int div_factor, void *data, ide_procset_t *set);
1000extern ide_settings_t *ide_find_setting_by_name(ide_drive_t *drive, char *name);
1001extern int ide_read_setting(ide_drive_t *t, ide_settings_t *setting);
1002extern int ide_write_setting(ide_drive_t *drive, ide_settings_t *setting, int val);
1003extern void ide_add_generic_settings(ide_drive_t *drive);
1004
1005
1006
1007
1008typedef struct {
1009 const char *name;
1010 mode_t mode;
1011 read_proc_t *read_proc;
1012 write_proc_t *write_proc;
1013} ide_proc_entry_t;
1014
1015#ifdef CONFIG_PROC_FS
1016extern struct proc_dir_entry *proc_ide_root;
1017
1018extern void proc_ide_create(void);
1019extern void proc_ide_destroy(void);
1020extern void create_proc_ide_interfaces(void);
1021void destroy_proc_ide_interface(ide_hwif_t *);
1022extern void ide_add_proc_entries(struct proc_dir_entry *, ide_proc_entry_t *, void *);
1023extern void ide_remove_proc_entries(struct proc_dir_entry *, ide_proc_entry_t *);
1024read_proc_t proc_ide_read_capacity;
1025read_proc_t proc_ide_read_geometry;
1026
1027#ifdef CONFIG_BLK_DEV_IDEPCI
1028void ide_pci_create_host_proc(const char *, get_info_t *);
1029#endif
1030
1031
1032
1033
1034#define PROC_IDE_READ_RETURN(page,start,off,count,eof,len) \
1035{ \
1036 len -= off; \
1037 if (len < count) { \
1038 *eof = 1; \
1039 if (len <= 0) \
1040 return 0; \
1041 } else \
1042 len = count; \
1043 *start = page + off; \
1044 return len; \
1045}
1046#else
1047static inline void create_proc_ide_interfaces(void) { ; }
1048static inline void destroy_proc_ide_interface(ide_hwif_t *hwif) { ; }
1049#define PROC_IDE_READ_RETURN(page,start,off,count,eof,len) return 0;
1050#endif
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079enum {
1080 ide_pm_state_completed = -1,
1081 ide_pm_state_start_suspend = 0,
1082 ide_pm_state_start_resume = 1000,
1083};
1084
1085
1086
1087
1088typedef struct ide_driver_s {
1089 struct module *owner;
1090 const char *name;
1091 const char *version;
1092 u8 media;
1093 unsigned busy : 1;
1094 unsigned supports_dsc_overlap : 1;
1095 int (*cleanup)(ide_drive_t *);
1096 ide_startstop_t (*do_request)(ide_drive_t *, struct request *, sector_t);
1097 int (*end_request)(ide_drive_t *, int, int);
1098 ide_startstop_t (*error)(ide_drive_t *, struct request *rq, u8, u8);
1099 ide_startstop_t (*abort)(ide_drive_t *, struct request *rq);
1100 int (*ioctl)(ide_drive_t *, struct inode *, struct file *, unsigned int, unsigned long);
1101 void (*pre_reset)(ide_drive_t *);
1102 sector_t (*capacity)(ide_drive_t *);
1103 ide_startstop_t (*special)(ide_drive_t *);
1104 ide_proc_entry_t *proc;
1105 int (*attach)(ide_drive_t *);
1106 void (*ata_prebuilder)(ide_drive_t *);
1107 void (*atapi_prebuilder)(ide_drive_t *);
1108 ide_startstop_t (*start_power_step)(ide_drive_t *, struct request *);
1109 void (*complete_power_step)(ide_drive_t *, struct request *, u8, u8);
1110 struct device_driver gen_driver;
1111 struct list_head drives;
1112 struct list_head drivers;
1113} ide_driver_t;
1114
1115#define DRIVER(drive) ((drive)->driver)
1116
1117extern int generic_ide_ioctl(struct file *, struct block_device *, unsigned, unsigned long);
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127#ifndef _IDE_C
1128extern ide_hwif_t ide_hwifs[];
1129#endif
1130extern int noautodma;
1131
1132extern int ide_end_request (ide_drive_t *drive, int uptodate, int nrsecs);
1133
1134
1135
1136
1137
1138extern void ide_set_handler (ide_drive_t *drive, ide_handler_t *handler, unsigned int timeout, ide_expiry_t *expiry);
1139
1140
1141
1142
1143
1144
1145extern void ide_execute_command(ide_drive_t *, task_ioreg_t cmd, ide_handler_t *, unsigned int, ide_expiry_t *);
1146
1147ide_startstop_t __ide_error(ide_drive_t *, struct request *, u8, u8);
1148
1149
1150
1151
1152
1153
1154
1155ide_startstop_t ide_error (ide_drive_t *drive, const char *msg, byte stat);
1156
1157ide_startstop_t __ide_abort(ide_drive_t *, struct request *);
1158
1159
1160
1161
1162
1163
1164extern ide_startstop_t ide_abort(ide_drive_t *, const char *);
1165
1166extern void ide_fix_driveid(struct hd_driveid *);
1167
1168
1169
1170
1171
1172
1173
1174
1175extern void ide_fixstring(u8 *, const int, const int);
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186extern int ide_wait_stat(ide_startstop_t *, ide_drive_t *, u8, u8, unsigned long);
1187
1188
1189
1190
1191
1192extern ide_startstop_t ide_do_reset (ide_drive_t *);
1193
1194
1195
1196
1197extern void ide_init_drive_cmd (struct request *rq);
1198
1199
1200
1201
1202extern u64 ide_get_error_location(ide_drive_t *, char *);
1203
1204
1205
1206
1207typedef enum {
1208 ide_wait,
1209 ide_next,
1210 ide_preempt,
1211 ide_head_wait,
1212 ide_end
1213} ide_action_t;
1214
1215
1216
1217
1218
1219
1220
1221
1222
1223
1224
1225
1226
1227
1228
1229
1230
1231
1232
1233
1234
1235
1236
1237
1238
1239
1240extern int ide_do_drive_cmd(ide_drive_t *, struct request *, ide_action_t);
1241
1242
1243
1244
1245
1246
1247
1248
1249extern void ide_end_drive_cmd(ide_drive_t *, u8, u8);
1250
1251
1252
1253
1254
1255
1256
1257extern int ide_wait_cmd(ide_drive_t *, u8, u8, u8, u8, u8 *);
1258
1259typedef struct ide_task_s {
1260
1261
1262
1263
1264
1265
1266 task_ioreg_t tfRegister[8];
1267 task_ioreg_t hobRegister[8];
1268 ide_reg_valid_t tf_out_flags;
1269 ide_reg_valid_t tf_in_flags;
1270 int data_phase;
1271 int command_type;
1272 ide_pre_handler_t *prehandler;
1273 ide_handler_t *handler;
1274 struct request *rq;
1275 void *special;
1276} ide_task_t;
1277
1278extern u32 ide_read_24(ide_drive_t *);
1279
1280extern void SELECT_DRIVE(ide_drive_t *);
1281extern void SELECT_INTERRUPT(ide_drive_t *);
1282extern void SELECT_MASK(ide_drive_t *, int);
1283extern void QUIRK_LIST(ide_drive_t *);
1284
1285extern int drive_is_ready(ide_drive_t *);
1286extern int wait_for_ready(ide_drive_t *, int );
1287
1288
1289
1290
1291extern ide_startstop_t do_rw_taskfile(ide_drive_t *, ide_task_t *);
1292
1293
1294
1295
1296extern ide_startstop_t flagged_taskfile(ide_drive_t *, ide_task_t *);
1297
1298extern ide_startstop_t set_multmode_intr(ide_drive_t *);
1299extern ide_startstop_t set_geometry_intr(ide_drive_t *);
1300extern ide_startstop_t recal_intr(ide_drive_t *);
1301extern ide_startstop_t task_no_data_intr(ide_drive_t *);
1302extern ide_startstop_t task_in_intr(ide_drive_t *);
1303extern ide_startstop_t pre_task_out_intr(ide_drive_t *, struct request *);
1304
1305extern int ide_raw_taskfile(ide_drive_t *, ide_task_t *, u8 *);
1306
1307int ide_taskfile_ioctl(ide_drive_t *, unsigned int, unsigned long);
1308int ide_cmd_ioctl(ide_drive_t *, unsigned int, unsigned long);
1309int ide_task_ioctl(ide_drive_t *, unsigned int, unsigned long);
1310
1311extern int system_bus_clock(void);
1312
1313extern int ide_driveid_update(ide_drive_t *);
1314extern int ide_ata66_check(ide_drive_t *, ide_task_t *);
1315extern int ide_config_drive_speed(ide_drive_t *, u8);
1316extern u8 eighty_ninty_three (ide_drive_t *);
1317extern int set_transfer(ide_drive_t *, ide_task_t *);
1318extern int taskfile_lib_get_identify(ide_drive_t *drive, u8 *);
1319
1320extern int ide_wait_not_busy(ide_hwif_t *hwif, unsigned long timeout);
1321
1322
1323
1324
1325
1326extern void ide_stall_queue(ide_drive_t *drive, unsigned long timeout);
1327
1328extern int ide_spin_wait_hwgroup(ide_drive_t *);
1329extern void ide_timer_expiry(unsigned long);
1330extern irqreturn_t ide_intr(int irq, void *dev_id, struct pt_regs *regs);
1331extern void do_ide_request(request_queue_t *);
1332extern void ide_init_subdrivers(void);
1333
1334extern struct block_device_operations ide_fops[];
1335
1336extern int ata_attach(ide_drive_t *);
1337
1338extern int ideprobe_init(void);
1339
1340extern void ide_scan_pcibus(int scan_direction) __init;
1341extern int ide_pci_register_driver(struct pci_driver *driver);
1342extern void ide_pci_unregister_driver(struct pci_driver *driver);
1343void ide_pci_setup_ports(struct pci_dev *, struct ide_pci_device_s *, int, ata_index_t *);
1344extern void ide_setup_pci_noise (struct pci_dev *dev, struct ide_pci_device_s *d);
1345
1346extern void default_hwif_iops(ide_hwif_t *);
1347extern void default_hwif_mmiops(ide_hwif_t *);
1348extern void default_hwif_transport(ide_hwif_t *);
1349
1350int ide_register_driver(ide_driver_t *driver);
1351void ide_unregister_driver(ide_driver_t *driver);
1352int ide_register_subdriver(ide_drive_t *, ide_driver_t *);
1353int ide_unregister_subdriver (ide_drive_t *drive);
1354int ide_replace_subdriver(ide_drive_t *drive, const char *driver);
1355
1356#define ON_BOARD 1
1357#define NEVER_BOARD 0
1358
1359#ifdef CONFIG_BLK_DEV_OFFBOARD
1360# define OFF_BOARD ON_BOARD
1361#else
1362# define OFF_BOARD NEVER_BOARD
1363#endif
1364
1365#define NODMA 0
1366#define NOAUTODMA 1
1367#define AUTODMA 2
1368
1369typedef struct ide_pci_enablebit_s {
1370 u8 reg;
1371 u8 mask;
1372 u8 val;
1373} ide_pci_enablebit_t;
1374
1375enum {
1376
1377 IDEPCI_FLAG_ISA_PORTS = (1 << 0),
1378 IDEPCI_FLAG_FORCE_PDC = (1 << 1),
1379};
1380
1381typedef struct ide_pci_device_s {
1382 char *name;
1383 int (*init_setup)(struct pci_dev *, struct ide_pci_device_s *);
1384 void (*init_setup_dma)(struct pci_dev *, struct ide_pci_device_s *, ide_hwif_t *);
1385 unsigned int (*init_chipset)(struct pci_dev *, const char *);
1386 void (*init_iops)(ide_hwif_t *);
1387 void (*init_hwif)(ide_hwif_t *);
1388 void (*init_dma)(ide_hwif_t *, unsigned long);
1389 void (*fixup)(ide_hwif_t *);
1390 u8 channels;
1391 u8 autodma;
1392 ide_pci_enablebit_t enablebits[2];
1393 u8 bootable;
1394 unsigned int extra;
1395 struct ide_pci_device_s *next;
1396 u8 flags;
1397} ide_pci_device_t;
1398
1399extern int ide_setup_pci_device(struct pci_dev *, ide_pci_device_t *);
1400extern int ide_setup_pci_devices(struct pci_dev *, struct pci_dev *, ide_pci_device_t *);
1401
1402void ide_map_sg(ide_drive_t *, struct request *);
1403void ide_init_sg_cmd(ide_drive_t *, struct request *);
1404
1405#define BAD_DMA_DRIVE 0
1406#define GOOD_DMA_DRIVE 1
1407
1408#ifdef CONFIG_BLK_DEV_IDEDMA
1409int __ide_dma_bad_drive(ide_drive_t *);
1410int __ide_dma_good_drive(ide_drive_t *);
1411int ide_use_dma(ide_drive_t *);
1412int __ide_dma_off(ide_drive_t *);
1413void ide_dma_verbose(ide_drive_t *);
1414ide_startstop_t ide_dma_intr(ide_drive_t *);
1415
1416#ifdef CONFIG_BLK_DEV_IDEDMA_PCI
1417extern int ide_build_sglist(ide_drive_t *, struct request *);
1418extern int ide_build_dmatable(ide_drive_t *, struct request *);
1419extern void ide_destroy_dmatable(ide_drive_t *);
1420extern int ide_release_dma(ide_hwif_t *);
1421extern void ide_setup_dma(ide_hwif_t *, unsigned long, unsigned int);
1422
1423extern int __ide_dma_host_off(ide_drive_t *);
1424extern int __ide_dma_off_quietly(ide_drive_t *);
1425extern int __ide_dma_host_on(ide_drive_t *);
1426extern int __ide_dma_on(ide_drive_t *);
1427extern int __ide_dma_check(ide_drive_t *);
1428extern int ide_dma_setup(ide_drive_t *);
1429extern void ide_dma_start(ide_drive_t *);
1430extern int __ide_dma_end(ide_drive_t *);
1431extern int __ide_dma_lostirq(ide_drive_t *);
1432extern int __ide_dma_timeout(ide_drive_t *);
1433#endif
1434
1435#else
1436static inline int ide_use_dma(ide_drive_t *drive) { return 0; }
1437static inline int __ide_dma_off(ide_drive_t *drive) { return 0; }
1438static inline void ide_dma_verbose(ide_drive_t *drive) { ; }
1439#endif
1440
1441#ifndef CONFIG_BLK_DEV_IDEDMA_PCI
1442static inline void ide_release_dma(ide_hwif_t *drive) {;}
1443#endif
1444
1445extern int ide_hwif_request_regions(ide_hwif_t *hwif);
1446extern void ide_hwif_release_regions(ide_hwif_t* hwif);
1447extern void ide_unregister (unsigned int index);
1448
1449void ide_undecoded_slave(ide_hwif_t *);
1450
1451int probe_hwif_init_with_fixup(ide_hwif_t *, void (*)(ide_hwif_t *));
1452extern int probe_hwif_init(ide_hwif_t *);
1453
1454static inline void *ide_get_hwifdata (ide_hwif_t * hwif)
1455{
1456 return hwif->hwif_data;
1457}
1458
1459static inline void ide_set_hwifdata (ide_hwif_t * hwif, void *data)
1460{
1461 hwif->hwif_data = data;
1462}
1463
1464
1465extern u8 ide_dma_speed(ide_drive_t *drive, u8 mode);
1466extern u8 ide_rate_filter(u8 mode, u8 speed);
1467extern int ide_dma_enable(ide_drive_t *drive);
1468extern char *ide_xfer_verbose(u8 xfer_rate);
1469extern void ide_toggle_bounce(ide_drive_t *drive, int on);
1470extern int ide_set_xfer_rate(ide_drive_t *drive, u8 rate);
1471
1472u8 ide_dump_status(ide_drive_t *, const char *, u8);
1473
1474typedef struct ide_pio_timings_s {
1475 int setup_time;
1476 int active_time;
1477 int cycle_time;
1478} ide_pio_timings_t;
1479
1480typedef struct ide_pio_data_s {
1481 u8 pio_mode;
1482 u8 use_iordy;
1483 u8 overridden;
1484 u8 blacklisted;
1485 unsigned int cycle_time;
1486} ide_pio_data_t;
1487
1488extern u8 ide_get_best_pio_mode (ide_drive_t *drive, u8 mode_wanted, u8 max_mode, ide_pio_data_t *d);
1489extern const ide_pio_timings_t ide_pio_timings[6];
1490
1491
1492extern spinlock_t ide_lock;
1493extern struct semaphore ide_cfg_sem;
1494
1495
1496
1497
1498
1499
1500
1501
1502
1503
1504
1505
1506
1507#define local_irq_set(flags) do { local_save_flags((flags)); local_irq_enable(); } while (0)
1508
1509extern struct bus_type ide_bus_type;
1510
1511
1512#define ide_id_has_flush_cache(id) ((id)->cfs_enable_2 & 0x3000)
1513
1514
1515#define ide_id_has_flush_cache_ext(id) \
1516 (((id)->cfs_enable_2 & 0x2400) == 0x2400)
1517
1518#endif
1519