1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25#ifndef __LIBATA_H__
26#define __LIBATA_H__
27
28#define DRV_NAME "libata"
29#define DRV_VERSION "0.81"
30
31struct ata_scsi_args {
32 struct ata_port *ap;
33 struct ata_device *dev;
34 Scsi_Cmnd *cmd;
35 void (*done)(Scsi_Cmnd *);
36};
37
38
39
40extern unsigned int ata_dev_id_string(struct ata_device *dev, unsigned char *s,
41 unsigned int ofs, unsigned int len);
42extern struct ata_queued_cmd *ata_qc_new_init(struct ata_port *ap,
43 struct ata_device *dev);
44extern int ata_qc_issue(struct ata_queued_cmd *qc);
45extern void ata_dev_select(struct ata_port *ap, unsigned int device,
46 unsigned int wait, unsigned int can_sleep);
47extern void ata_tf_to_host_nolock(struct ata_port *ap, struct ata_taskfile *tf);
48extern void ata_thread_wake(struct ata_port *ap, unsigned int thr_state);
49
50
51
52extern void ata_to_sense_error(struct ata_queued_cmd *qc);
53extern void ata_scsi_rw_queue(struct ata_port *ap, struct ata_device *dev,
54 Scsi_Cmnd *cmd, void (*done)(Scsi_Cmnd *),
55 unsigned int cmd_size);
56extern int ata_scsi_error(struct Scsi_Host *host);
57extern unsigned int ata_scsiop_inq_std(struct ata_scsi_args *args, u8 *rbuf,
58 unsigned int buflen);
59
60extern unsigned int ata_scsiop_inq_00(struct ata_scsi_args *args, u8 *rbuf,
61 unsigned int buflen);
62
63extern unsigned int ata_scsiop_inq_80(struct ata_scsi_args *args, u8 *rbuf,
64 unsigned int buflen);
65extern unsigned int ata_scsiop_inq_83(struct ata_scsi_args *args, u8 *rbuf,
66 unsigned int buflen);
67extern unsigned int ata_scsiop_noop(struct ata_scsi_args *args, u8 *rbuf,
68 unsigned int buflen);
69extern unsigned int ata_scsiop_sync_cache(struct ata_scsi_args *args, u8 *rbuf,
70 unsigned int buflen);
71extern unsigned int ata_scsiop_mode_sense(struct ata_scsi_args *args, u8 *rbuf,
72 unsigned int buflen);
73extern unsigned int ata_scsiop_read_cap(struct ata_scsi_args *args, u8 *rbuf,
74 unsigned int buflen);
75extern unsigned int ata_scsiop_report_luns(struct ata_scsi_args *args, u8 *rbuf,
76 unsigned int buflen);
77extern void ata_scsi_badcmd(Scsi_Cmnd *cmd,
78 void (*done)(Scsi_Cmnd *),
79 u8 asc, u8 ascq);
80extern void ata_scsi_rbuf_fill(struct ata_scsi_args *args,
81 unsigned int (*actor) (struct ata_scsi_args *args,
82 u8 *rbuf, unsigned int buflen));
83
84static inline void ata_bad_scsiop(Scsi_Cmnd *cmd, void (*done)(Scsi_Cmnd *))
85{
86 ata_scsi_badcmd(cmd, done, 0x20, 0x00);
87}
88
89static inline void ata_bad_cdb(Scsi_Cmnd *cmd, void (*done)(Scsi_Cmnd *))
90{
91 ata_scsi_badcmd(cmd, done, 0x24, 0x00);
92}
93
94#endif
95