source: mainline/uspace/srv/bd/ata_bd/ata_bd.h@ 5b3cf90

lfn serial ticket/834-toolchain-update topic/msim-upgrade topic/simplify-dev-export
Last change on this file since 5b3cf90 was 12956e57, checked in by Jiri Svoboda <jirik.svoboda@…>, 16 years ago

Use fibril synchronization in bd drivers. Use per-disk locks.

  • Property mode set to 100644
File size: 3.5 KB
RevLine 
[4f5caea]1/*
2 * Copyright (c) 2009 Jiri Svoboda
3 * All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
7 * are met:
8 *
9 * - Redistributions of source code must retain the above copyright
10 * notice, this list of conditions and the following disclaimer.
11 * - Redistributions in binary form must reproduce the above copyright
12 * notice, this list of conditions and the following disclaimer in the
13 * documentation and/or other materials provided with the distribution.
14 * - The name of the author may not be used to endorse or promote products
15 * derived from this software without specific prior written permission.
16 *
17 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
18 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
19 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
20 * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
21 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
22 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
23 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
24 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
26 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27 */
28
29/** @addtogroup bd
30 * @{
31 */
32/** @file
33 */
34
35#ifndef __ATA_BD_H__
36#define __ATA_BD_H__
37
38#include <sys/types.h>
[12956e57]39#include <fibril_sync.h>
[4f5caea]40
41enum {
42 CTL_READ_START = 0,
43 CTL_WRITE_START = 1,
44};
45
46enum {
47 STATUS_FAILURE = 0
48};
49
50enum {
51 MAX_DISKS = 2
52};
53
[a624cbfd]54/** ATA Command Register Block. */
[4f5caea]55typedef union {
[a624cbfd]56 /* Read/Write */
[4f5caea]57 struct {
[a624cbfd]58 uint16_t data_port;
[4f5caea]59 uint8_t sector_count;
60 uint8_t sector_number;
61 uint8_t cylinder_low;
62 uint8_t cylinder_high;
63 uint8_t drive_head;
[a624cbfd]64 uint8_t pad_rw0;
65 };
66
67 /* Read Only */
68 struct {
69 uint8_t pad_ro0;
70 uint8_t error;
71 uint8_t pad_ro1[5];
[4f5caea]72 uint8_t status;
73 };
74
[a624cbfd]75 /* Write Only */
[4f5caea]76 struct {
[a624cbfd]77 uint8_t pad_wo0;
78 uint8_t features;
79 uint8_t pad_wo1[5];
[4f5caea]80 uint8_t command;
81 };
82} ata_cmd_t;
83
84typedef union {
85 /* Read */
86 struct {
87 uint8_t pad0[6];
88 uint8_t alt_status;
89 uint8_t drive_address;
90 };
91
92 /* Write */
93 struct {
94 uint8_t pad1[6];
95 uint8_t device_control;
96 uint8_t pad2;
97 };
98} ata_ctl_t;
99
100enum devctl_bits {
101 DCR_SRST = 0x04, /**< Software Reset */
102 DCR_nIEN = 0x02 /**< Interrupt Enable (negated) */
103};
104
105enum status_bits {
106 SR_BSY = 0x80, /**< Busy */
107 SR_DRDY = 0x40, /**< Drive Ready */
108 SR_DWF = 0x20, /**< Drive Write Fault */
109 SR_DSC = 0x10, /**< Drive Seek Complete */
110 SR_DRQ = 0x08, /**< Data Request */
111 SR_CORR = 0x04, /**< Corrected Data */
112 SR_IDX = 0x02, /**< Index */
113 SR_ERR = 0x01 /**< Error */
114};
115
116enum drive_head_bits {
117 DHR_DRV = 0x10
118};
119
120enum error_bits {
121 ER_BBK = 0x80, /**< Bad Block Detected */
122 ER_UNC = 0x40, /**< Uncorrectable Data Error */
123 ER_MC = 0x20, /**< Media Changed */
124 ER_IDNF = 0x10, /**< ID Not Found */
125 ER_MCR = 0x08, /**< Media Change Request */
126 ER_ABRT = 0x04, /**< Aborted Command */
127 ER_TK0NF = 0x02, /**< Track 0 Not Found */
128 ER_AMNF = 0x01 /**< Address Mark Not Found */
129};
130
[5481d1bb]131enum ata_command {
132 CMD_IDENTIFY_DRIVE = 0xEC,
133 CMD_READ_SECTORS = 0x20,
134 CMD_WRITE_SECTORS = 0x30
135};
136
[4f5caea]137typedef struct {
138 bool present;
139 unsigned heads;
140 unsigned cylinders;
141 unsigned sectors;
142 uint64_t blocks;
[12956e57]143
144 fibril_mutex_t lock;
145 dev_handle_t dev_handle;
[4f5caea]146} disk_t;
147
148#endif
149
150/** @}
151 */
Note: See TracBrowser for help on using the repository browser.