source: rtems/bsps/include/libchip/ide_ctrl_io.h @ 2afb22b

5
Last change on this file since 2afb22b was 2afb22b, checked in by Chris Johns <chrisj@…>, on 12/23/17 at 07:18:56

Remove make preinstall

A speciality of the RTEMS build system was the make preinstall step. It
copied header files from arbitrary locations into the build tree. The
header files were included via the -Bsome/build/tree/path GCC command
line option.

This has at least seven problems:

  • The make preinstall step itself needs time and disk space.
  • Errors in header files show up in the build tree copy. This makes it hard for editors to open the right file to fix the error.
  • There is no clear relationship between source and build tree header files. This makes an audit of the build process difficult.
  • The visibility of all header files in the build tree makes it difficult to enforce API barriers. For example it is discouraged to use BSP-specifics in the cpukit.
  • An introduction of a new build system is difficult.
  • Include paths specified by the -B option are system headers. This may suppress warnings.
  • The parallel build had sporadic failures on some hosts.

This patch removes the make preinstall step. All installed header
files are moved to dedicated include directories in the source tree.
Let @RTEMS_CPU@ be the target architecture, e.g. arm, powerpc, sparc,
etc. Let @RTEMS_BSP_FAMILIY@ be a BSP family base directory, e.g.
erc32, imx, qoriq, etc.

The new cpukit include directories are:

  • cpukit/include
  • cpukit/score/cpu/@RTEMS_CPU@/include
  • cpukit/libnetworking

The new BSP include directories are:

  • bsps/include
  • bsps/@RTEMS_CPU@/include
  • bsps/@RTEMS_CPU@/@RTEMS_BSP_FAMILIY@/include

There are build tree include directories for generated files.

The include directory order favours the most general header file, e.g.
it is not possible to override general header files via the include path
order.

The "bootstrap -p" option was removed. The new "bootstrap -H" option
should be used to regenerate the "headers.am" files.

Update #3254.

  • 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.