summaryrefslogtreecommitdiff
path: root/sys/dev/ata/ata-disk.h
diff options
context:
space:
mode:
Diffstat (limited to 'sys/dev/ata/ata-disk.h')
-rw-r--r--sys/dev/ata/ata-disk.h61
1 files changed, 34 insertions, 27 deletions
diff --git a/sys/dev/ata/ata-disk.h b/sys/dev/ata/ata-disk.h
index 4a184d9a495b..13ea2f927b01 100644
--- a/sys/dev/ata/ata-disk.h
+++ b/sys/dev/ata/ata-disk.h
@@ -28,51 +28,58 @@
* $FreeBSD$
*/
+/* structure describing an ATA disk request */
+struct ad_request {
+ struct ad_softc *device; /* ptr to parent device */
+ u_int32_t blockaddr; /* block number */
+ u_int32_t bytecount; /* bytes to transfer */
+ u_int32_t donecount; /* bytes transferred */
+ u_int32_t currentsize; /* size of current transfer */
+ struct callout_handle timeout_handle; /* handle for untimeout */
+ int retries; /* retry count */
+ int flags;
+#define ADR_F_READ 0x0001
+#define ADR_F_ERROR 0x0002
+#define ADR_F_DMA_USED 0x0004
+#define ADR_F_QUEUED 0x0008
+#define ADR_F_FORCE_PIO 0x0010
+
+ caddr_t data; /* pointer to data buf */
+ struct bio *bp; /* associated bio ptr */
+ u_int8_t tag; /* tag ID of this request */
+ int serv; /* request had service */
+ struct ata_dmaentry *dmatab; /* DMA transfer table */
+ TAILQ_ENTRY(ad_request) chain; /* list management */
+};
+
/* structure describing an ATA disk */
struct ad_softc {
struct ata_softc *controller; /* ptr to parent ctrl */
- int32_t unit; /* ATA_MASTER or ATA_SLAVE */
- int32_t lun; /* logical unit number */
+ int unit; /* ATA_MASTER or ATA_SLAVE */
+ int lun; /* logical unit number */
u_int32_t total_secs; /* total # of sectors (LBA) */
u_int8_t heads;
u_int8_t sectors;
u_int32_t transfersize; /* size of each transfer */
- u_int32_t num_tags; /* number of tags supported */
- u_int32_t flags; /* drive flags */
+ int num_tags; /* number of tags supported */
+ int flags; /* drive flags */
#define AD_F_LABELLING 0x0001
#define AD_F_LBA_ENABLED 0x0002
#define AD_F_32B_ENABLED 0x0004
#define AD_F_TAG_ENABLED 0x0008
+ struct ad_request *tags[32]; /* tag array of requests */
+ int outstanding; /* tags not serviced yet */
struct bio_queue_head queue; /* head of request queue */
struct devstat stats; /* devstat entry */
struct disk disk; /* disklabel/slice stuff */
dev_t dev1, dev2; /* device place holder */
};
-struct ad_request {
- struct ad_softc *device; /* ptr to parent device */
- u_int32_t blockaddr; /* block number */
- u_int32_t bytecount; /* bytes to transfer */
- u_int32_t donecount; /* bytes transferred */
- u_int32_t currentsize; /* size of current transfer */
- struct callout_handle timeout_handle; /* handle for untimeout */
- int32_t retries; /* retry count */
- int32_t flags;
-#define ADR_F_READ 0x0001
-#define ADR_F_ERROR 0x0002
-#define ADR_F_DMA_USED 0x0004
-#define ADR_F_FORCE_PIO 0x0008
-
- int8_t *data; /* pointer to data buf */
- struct bio *bp; /* associated bio ptr */
- u_int8_t tag; /* tag ID of this request */
- TAILQ_ENTRY(ad_request) chain; /* list management */
-};
-
-void ad_attach(struct ata_softc *, int32_t);
+void ad_attach(struct ata_softc *, int);
void ad_detach(struct ad_softc *);
void ad_start(struct ad_softc *);
-void ad_transfer(struct ad_request *);
-int32_t ad_interrupt(struct ad_request *);
+int ad_transfer(struct ad_request *);
+int ad_interrupt(struct ad_request *);
+int ad_service(struct ad_softc *, int);
void ad_reinit(struct ad_softc *);