source: rtems/c/src/libchip/ide/ide_ctrl_io.h @ 74172b7d

5
Last change on this file since 74172b7d was c499856, checked in by Chris Johns <chrisj@…>, on Mar 20, 2014 at 9:10:47 PM

Change all references of rtems.com to rtems.org.

  • Property mode set to 100644
File size: 6.6 KB
Line 
1/*
2 * ide_ctrl_io.h
3 *
4 * LibChip library IDE controller header file - IO operations defined for
5 * IDE controllers.
6 *
7 * Copyright (C) 2002 OKTET Ltd., St.-Petersburg, Russia
8 * Author: Eugeny S. Mints <Eugeny.Mints@oktet.ru>
9 *
10 * The license and distribution terms for this file may be
11 * found in the file LICENSE in this distribution or at
12 * http://www.rtems.org/license/LICENSE.
13 */
14#ifndef __IDE_CTRL_IO_H__
15#define __IDE_CTRL_IO_H__
16
17#ifdef __cplusplus
18extern "C" {
19#endif
20
21#include <rtems/blkdev.h>
22
23/* Command Block Registers */
24#define IDE_REGISTER_DATA               0
25#define IDE_REGISTER_ERROR              1
26#define IDE_REGISTER_FEATURES           IDE_REGISTER_ERROR
27#define IDE_REGISTER_SECTOR_COUNT       2
28#define IDE_REGISTER_SECTOR_NUMBER      3
29#define IDE_REGISTER_LBA0               IDE_REGISTER_SECTOR_NUMBER
30#define IDE_REGISTER_CYLINDER_LOW       4
31#define IDE_REGISTER_LBA1               IDE_REGISTER_CYLINDER_LOW
32#define IDE_REGISTER_CYLINDER_HIGH      5
33#define IDE_REGISTER_LBA2               IDE_REGISTER_CYLINDER_HIGH
34#define IDE_REGISTER_DEVICE_HEAD        6
35#define IDE_REGISTER_LBA3               IDE_REGISTER_DEVICE_HEAD
36#define IDE_REGISTER_STATUS             7
37#define IDE_REGISTER_COMMAND            IDE_REGISTER_STATUS
38
39/*  Control Block Registers */
40#define IDE_REGISTER_ALTERNATE_STATUS   6
41#define IDE_REGISTER_DEVICE_CONTROL     IDE_REGISTER_ALTERNATE_STATUS
42
43/* offsets used to access  registers */
44#define IDE_REGISTER_DEVICE_CONTROL_OFFSET   8
45#define IDE_REGISTER_ALTERNATE_STATUS_OFFSET IDE_REGISTER_DEVICE_CONTROL_OFFSET
46#define IDE_REGISTER_DATA_BYTE               9
47#define IDE_REGISTER_DATA_WORD               10
48
49/*
50 * Registers bits
51 */
52#define IDE_REGISTER_STATUS_BSY          0x80  /* Busy bit */
53#define IDE_REGISTER_STATUS_DRDY         0x40  /* Device ready */
54#define IDE_REGISTER_STATUS_DF           0x20  /* Device fault */
55#define IDE_REGISTER_STATUS_DSC          0x10  /* Device seek complete-- */
56                                               /* obsolete */
57#define IDE_REGISTER_STATUS_DRQ          0x08  /* Data request */
58#define IDE_REGISTER_STATUS_CORR         0x04  /* Corrected data-- */
59                                               /* vendor specific--obsolete */
60#define IDE_REGISTER_STATUS_IDX          0x02  /* Index-- */
61                                                /* vendor specific--obsolete */
62#define IDE_REGISTER_STATUS_ERR          0x01  /* Error */
63
64#define IDE_REGISTER_DEVICE_CONTROL_SRST 0x04  /* Host software reset bit */
65#define IDE_REGISTER_DEVICE_CONTROL_nIEN 0x02  /* Negated interrupt enable */
66
67#define IDE_REGISTER_DEVICE_HEAD_L       0x40  /* LBA mode bit */
68#define IDE_REGISTER_DEVICE_HEAD_DEV     0x10  /* Device0/Device1 bit */
69#define IDE_REGISTER_DEVICE_HEAD_DEV_POS 4     /* Dev0/Dev1 bit position */
70#define IDE_REGISTER_DEVICE_HEAD_HS      0x0f  /* Head/LBA24_27 bits */
71#define IDE_REGISTER_LBA3_L              0x40
72#define IDE_REGISTER_LBA3_DEV            0x10
73#define IDE_REGISTER_LBA3_LBA            0x0f
74
75#define IDE_REGISTER_ERROR_ICRC          (1 << 7) /* Interface CRC error on */
76                                                  /* UDMA data transfer */
77#define IDE_REGISTER_ERROR_UNC           (1 << 6) /* Uncorrectable data error */
78#if CCJ_COULD_NOT_FIND_THIS_ERROR
79#define IDE_REGISTER_ERROR_WP            (1 << 6) /* Write protect */
80#endif
81#define IDE_REGISTER_ERROR_MC            (1 << 5) /* Media changed */
82#define IDE_REGISTER_ERROR_IDNF          (1 << 4) /* Sector ID not found */
83#define IDE_REGISTER_ERROR_MCR           (1 << 3) /* Media change requested */
84                                                  /* obsolette */
85#define IDE_REGISTER_ERROR_ABRT          (1 << 2) /* Aborted command */
86#define IDE_REGISTER_ERROR_NM            (1 << 1) /* No media, End of Media. */
87#define IDE_REGISTER_ERROR_AMNF          (1 << 0) /* Address mark not found */
88                                                  /* --obsolette in ATA-4 */
89#define IDE_REGISTER_ERROR_MED           (1 << 0) /* Media error is detected */
90
91/*
92 * ide_controller_read_data_block --
93 *     Read data block via controller's data register
94 *
95 * PARAMETERS:
96 *     minor      - minor number of controller
97 *     block_size - number of bytes to read
98 *     bufs       - set of buffers to store data
99 *     cbuf       - number of current buffer from the set
100 *     pos        - position inside current buffer 'cbuf'
101 *
102 * RETURNS:
103 *     NONE
104 */
105void
106ide_controller_read_data_block(rtems_device_minor_number  minor,
107                               uint32_t                   block_size,
108                               rtems_blkdev_sg_buffer    *bufs,
109                               uint32_t                  *cbuf,
110                               uint32_t                  *pos);
111
112/*
113 * ide_controller_write_data_block --
114 *     Write data block via controller's data register
115 *
116 * PARAMETERS:
117 *     minor      - minor number of controller
118 *     block_size - number of bytes to write
119 *     bufs       - set of buffers which store data
120 *     cbuf       - number of current buffer from the set
121 *     pos        - position inside current buffer 'cbuf'
122 *
123 * RETURNS:
124 *     NONE
125 */
126void
127ide_controller_write_data_block(rtems_device_minor_number  minor,
128                                uint32_t                   block_size,
129                                rtems_blkdev_sg_buffer    *bufs,
130                                uint32_t                  *cbuf,
131                                uint32_t                  *pos);
132
133/*
134 * ide_controller_read_register --
135 *     Read controller's register
136 *
137 * PARAMETERS:
138 *     minor - minor number of controller
139 *     reg   - register to read
140 *     value - placeholder for result
141 *
142 * RETURNS
143 *     NONE
144 */
145void
146ide_controller_read_register(rtems_device_minor_number  minor,
147                             int                        reg,
148                             uint16_t                  *value);
149
150/*
151 * ide_controller_write_register --
152 *     Write controller's register
153 *
154 * PARAMETERS:
155 *     minor - minor number of controller
156 *     reg   - register to write
157 *     value - value to write
158 *
159 * RETURNS:
160 *     NONE
161 */
162void
163ide_controller_write_register(rtems_device_minor_number minor,
164                              int reg, uint16_t   value);
165
166/*
167 * ide_controller_config_io_speed --
168 *     Set controller's speed of IO operations
169 *
170 * PARAMETERS:
171 *     minor           - minor number of controller
172 *     modes_available - speeds available
173 *
174 * RETURNS:
175 *     RTEMS_SUCCESSFUL on success, or error code if
176 *     error occured
177 */
178rtems_status_code
179ide_controller_config_io_speed(int minor, uint16_t modes_available);
180
181#ifdef __cplusplus
182}
183#endif
184
185
186#endif /* __IDE_CTRL_IO_H__ */
Note: See TracBrowser for help on using the repository browser.