File indexing completed on 2025-05-11 08:23:43
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014 #ifndef __IDE_CTRL_IO_H__
0015 #define __IDE_CTRL_IO_H__
0016
0017 #ifdef __cplusplus
0018 extern "C" {
0019 #endif
0020
0021 #include <rtems/blkdev.h>
0022
0023
0024 #define IDE_REGISTER_DATA 0
0025 #define IDE_REGISTER_ERROR 1
0026 #define IDE_REGISTER_FEATURES IDE_REGISTER_ERROR
0027 #define IDE_REGISTER_SECTOR_COUNT 2
0028 #define IDE_REGISTER_SECTOR_NUMBER 3
0029 #define IDE_REGISTER_LBA0 IDE_REGISTER_SECTOR_NUMBER
0030 #define IDE_REGISTER_CYLINDER_LOW 4
0031 #define IDE_REGISTER_LBA1 IDE_REGISTER_CYLINDER_LOW
0032 #define IDE_REGISTER_CYLINDER_HIGH 5
0033 #define IDE_REGISTER_LBA2 IDE_REGISTER_CYLINDER_HIGH
0034 #define IDE_REGISTER_DEVICE_HEAD 6
0035 #define IDE_REGISTER_LBA3 IDE_REGISTER_DEVICE_HEAD
0036 #define IDE_REGISTER_STATUS 7
0037 #define IDE_REGISTER_COMMAND IDE_REGISTER_STATUS
0038
0039
0040 #define IDE_REGISTER_ALTERNATE_STATUS 6
0041 #define IDE_REGISTER_DEVICE_CONTROL IDE_REGISTER_ALTERNATE_STATUS
0042
0043
0044 #define IDE_REGISTER_DEVICE_CONTROL_OFFSET 8
0045 #define IDE_REGISTER_ALTERNATE_STATUS_OFFSET IDE_REGISTER_DEVICE_CONTROL_OFFSET
0046 #define IDE_REGISTER_DATA_BYTE 9
0047 #define IDE_REGISTER_DATA_WORD 10
0048
0049
0050
0051
0052 #define IDE_REGISTER_STATUS_BSY 0x80
0053 #define IDE_REGISTER_STATUS_DRDY 0x40
0054 #define IDE_REGISTER_STATUS_DF 0x20
0055 #define IDE_REGISTER_STATUS_DSC 0x10
0056
0057 #define IDE_REGISTER_STATUS_DRQ 0x08
0058 #define IDE_REGISTER_STATUS_CORR 0x04
0059
0060 #define IDE_REGISTER_STATUS_IDX 0x02
0061
0062 #define IDE_REGISTER_STATUS_ERR 0x01
0063
0064 #define IDE_REGISTER_DEVICE_CONTROL_SRST 0x04
0065 #define IDE_REGISTER_DEVICE_CONTROL_nIEN 0x02
0066
0067 #define IDE_REGISTER_DEVICE_HEAD_L 0x40
0068 #define IDE_REGISTER_DEVICE_HEAD_DEV 0x10
0069 #define IDE_REGISTER_DEVICE_HEAD_DEV_POS 4
0070 #define IDE_REGISTER_DEVICE_HEAD_HS 0x0f
0071 #define IDE_REGISTER_LBA3_L 0x40
0072 #define IDE_REGISTER_LBA3_DEV 0x10
0073 #define IDE_REGISTER_LBA3_LBA 0x0f
0074
0075 #define IDE_REGISTER_ERROR_ICRC (1 << 7)
0076
0077 #define IDE_REGISTER_ERROR_UNC (1 << 6)
0078 #if CCJ_COULD_NOT_FIND_THIS_ERROR
0079 #define IDE_REGISTER_ERROR_WP (1 << 6)
0080 #endif
0081 #define IDE_REGISTER_ERROR_MC (1 << 5)
0082 #define IDE_REGISTER_ERROR_IDNF (1 << 4)
0083 #define IDE_REGISTER_ERROR_MCR (1 << 3)
0084
0085 #define IDE_REGISTER_ERROR_ABRT (1 << 2)
0086 #define IDE_REGISTER_ERROR_NM (1 << 1)
0087 #define IDE_REGISTER_ERROR_AMNF (1 << 0)
0088
0089 #define IDE_REGISTER_ERROR_MED (1 << 0)
0090
0091
0092
0093
0094
0095
0096
0097
0098
0099
0100
0101
0102
0103
0104
0105 void
0106 ide_controller_read_data_block(rtems_device_minor_number minor,
0107 uint32_t block_size,
0108 rtems_blkdev_sg_buffer *bufs,
0109 uint32_t *cbuf,
0110 uint32_t *pos);
0111
0112
0113
0114
0115
0116
0117
0118
0119
0120
0121
0122
0123
0124
0125
0126 void
0127 ide_controller_write_data_block(rtems_device_minor_number minor,
0128 uint32_t block_size,
0129 rtems_blkdev_sg_buffer *bufs,
0130 uint32_t *cbuf,
0131 uint32_t *pos);
0132
0133
0134
0135
0136
0137
0138
0139
0140
0141
0142
0143
0144
0145 void
0146 ide_controller_read_register(rtems_device_minor_number minor,
0147 int reg,
0148 uint16_t *value);
0149
0150
0151
0152
0153
0154
0155
0156
0157
0158
0159
0160
0161
0162 void
0163 ide_controller_write_register(rtems_device_minor_number minor,
0164 int reg, uint16_t value);
0165
0166
0167
0168
0169
0170
0171
0172
0173
0174
0175
0176
0177
0178 rtems_status_code
0179 ide_controller_config_io_speed(int minor, uint16_t modes_available);
0180
0181 #ifdef __cplusplus
0182 }
0183 #endif
0184
0185
0186 #endif