📄 ide_ctrl_io.h
字号:
/* * ide_ctrl_io.h * * LibChip library IDE controller header file - IO operations defined for * IDE controllers. * * Copyright (C) 2002 OKTET Ltd., St.-Petersburg, Russia * Author: Eugeny S. Mints <Eugeny.Mints@oktet.ru> * * The license and distribution terms for this file may be * found in the file LICENSE in this distribution or at * http://www.rtems.com/license/LICENSE. * * $Id: ide_ctrl_io.h,v 1.1.2.1 2003/09/04 18:46:04 joel Exp $ */#ifndef __IDE_CTRL_IO_H__#define __IDE_CTRL_IO_H__#ifdef __cplusplusextern "C" {#endif#include <rtems/blkdev.h>/* Command Block Registers */#define IDE_REGISTER_DATA 0#define IDE_REGISTER_ERROR 1#define IDE_REGISTER_FEATURES IDE_REGISTER_ERROR#define IDE_REGISTER_SECTOR_COUNT 2#define IDE_REGISTER_SECTOR_NUMBER 3#define IDE_REGISTER_LBA0 IDE_REGISTER_SECTOR_NUMBER #define IDE_REGISTER_CYLINDER_LOW 4#define IDE_REGISTER_LBA1 IDE_REGISTER_CYLINDER_LOW#define IDE_REGISTER_CYLINDER_HIGH 5#define IDE_REGISTER_LBA2 IDE_REGISTER_CYLINDER_HIGH#define IDE_REGISTER_DEVICE_HEAD 6#define IDE_REGISTER_LBA3 IDE_REGISTER_DEVICE_HEAD#define IDE_REGISTER_STATUS 7#define IDE_REGISTER_COMMAND IDE_REGISTER_STATUS/* Control Block Registers */#define IDE_REGISTER_ALTERNATE_STATUS 6#define IDE_REGISTER_DEVICE_CONTROL IDE_REGISTER_ALTERNATE_STATUS/* offsets used to access registers */ #define IDE_REGISTER_DEVICE_CONTROL_OFFSET 8#define IDE_REGISTER_ALTERNATE_STATUS_OFFSET IDE_REGISTER_DEVICE_CONTROL_OFFSET#define IDE_REGISTER_DATA_BYTE 9#define IDE_REGISTER_DATA_WORD 10/* * Registers bits */#define IDE_REGISTER_STATUS_BSY 0x80 /* Busy bit */#define IDE_REGISTER_STATUS_DRDY 0x40 /* Device ready */#define IDE_REGISTER_STATUS_DF 0x20 /* Device fault */#define IDE_REGISTER_STATUS_DSC 0x10 /* Device seek complete-- */ /* obsolete */#define IDE_REGISTER_STATUS_DRQ 0x08 /* Data request */#define IDE_REGISTER_STATUS_CORR 0x04 /* Corrected data-- */ /* vendor specific--obsolete */#define IDE_REGISTER_STATUS_IDX 0x02 /* Index-- */ /* vendor specific--obsolete */#define IDE_REGISTER_STATUS_ERR 0x01 /* Error */#define IDE_REGISTER_DEVICE_CONTROL_SRST 0x04 /* Host software reset bit */#define IDE_REGISTER_DEVICE_CONTROL_nIEN 0x02 /* Negated interrupt enable */#define IDE_REGISTER_DEVICE_HEAD_L 0x40 /* LBA mode bit */#define IDE_REGISTER_DEVICE_HEAD_DEV 0x10 /* Device0/Device1 bit */#define IDE_REGISTER_DEVICE_HEAD_DEV_POS 4 /* Dev0/Dev1 bit position */#define IDE_REGISTER_DEVICE_HEAD_HS 0x0f /* Head/LBA24_27 bits */#define IDE_REGISTER_LBA3_L 0x40#define IDE_REGISTER_LBA3_DEV 0x10#define IDE_REGISTER_LBA3_LBA 0x0f#define IDE_REGISTER_ERROR_ICRC 0x80 /* Interface CRC error on */ /* UDMA data transfer */#define IDE_REGISTER_ERROR_UNC 0x40 /* Uncorrectable data error */#define IDE_REGISTER_ERROR_WP 0x40 /* Write protect */#define IDE_REGISTER_ERROR_MC 0x20 /* Media changed */#define IDE_REGISTER_ERROR_IDNF 0x10 /* Sector ID not found */#define IDE_REGISTER_ERROR_MCR 0x08 /* Media change requested */#define IDE_REGISTER_ERROR_ABRT 0x04 /* Aborted command */#define IDE_REGISTER_ERROR_NM 0x02 /* No media */#define IDE_REGISTER_ERROR_AMNF 0x01 /* Address mark not found */ /* --obsolette in ATA-4 */#define IDE_REGISTER_ERROR_MED 0x01 /* Media error is detected *//* * ide_controller_read_data_block -- * Read data block via controller's data register * * PARAMETERS: * minor - minor number of controller * block_size - number of bytes to read * bufs - set of buffers to store data * cbuf - number of current buffer from the set * pos - position inside current buffer 'cbuf' * * RETURNS: * NONE */voidide_controller_read_data_block(rtems_device_minor_number minor, unsigned16 block_size, blkdev_sg_buffer *bufs, rtems_unsigned32 *cbuf, rtems_unsigned32 *pos);/* * ide_controller_write_data_block -- * Write data block via controller's data register * * PARAMETERS: * minor - minor number of controller * block_size - number of bytes to write * bufs - set of buffers which store data * cbuf - number of current buffer from the set * pos - position inside current buffer 'cbuf' * * RETURNS: * NONE */voidide_controller_write_data_block(rtems_device_minor_number minor, unsigned16 block_size, blkdev_sg_buffer *bufs, rtems_unsigned32 *cbuf, rtems_unsigned32 *pos);/* * ide_controller_read_register -- * Read controller's register * * PARAMETERS: * minor - minor number of controller * reg - register to read * value - placeholder for result * * RETURNS * NONE */voidide_controller_read_register(rtems_device_minor_number minor, int reg, unsigned16 *value);/* * ide_controller_write_register -- * Write controller's register * * PARAMETERS: * minor - minor number of controller * reg - register to write * value - value to write * * RETURNS: * NONE */voidide_controller_write_register(rtems_device_minor_number minor, int reg, unsigned16 value);/* * ide_controller_config_io_speed -- * Set controller's speed of IO operations * * PARAMETERS: * minor - minor number of controller * modes_avaible - speeds available * * RETURNS: * RTEMS_SUCCESSFUL on success, or error code if * error occured */rtems_status_code ide_controller_config_io_speed(int minor, unsigned8 modes_avaible);#ifdef __cplusplus}#endif#endif /* __IDE_CTRL_IO_H__ */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -