minix3源代码


minix 3 源代码 操作系统 os 教学
资源截图
代码片段和文件信息
/* This file contains the device dependent part of a driver for the IBM-AT
 * winchester controller.  Written by Adri Koppes.
 *
 * The file contains one entry point:
 *
 *   at_winchester_task: main entry when system is brought up
 *
 * Changes:
 *   Aug 19 2005   ata pci support supports SATA  (Ben Gras)
 *   Nov 18 2004   moved AT disk driver to user-space  (Jorrit N. Herder)
 *   Aug 20 2004   watchdogs replaced by sync alarms  (Jorrit N. Herder)
 *   Mar 23 2000   added ATAPI CDROM support  (Michael Temari)
 *   May 14 2000   d-d/i rewrite  (Kees J. Bot)
 *   Apr 13 1992   device dependent/independent split  (Kees J. Bot)
 */

#include “at_wini.h“
#include “../libpci/pci.h“

#include 
#include 
#include 

#define ATAPI_DEBUG     0 /* To debug ATAPI code. */

/* I/O Ports used by winchester disk controllers. */

/* Read and write registers */
#define REG_CMD_base0 0x1F0 /* command base register of controller 0 */
#define REG_CMD_base1 0x170 /* command base register of controller 1 */
#define REG_CTL_base0 0x3F6 /* control base register of controller 0 */
#define REG_CTL_base1 0x376 /* control base register of controller 1 */

#define REG_DATA     0 /* data register (offset from the base reg.) */
#define REG_PRECOMP     1 /* start of write precompensation */
#define REG_COUNT     2 /* sectors to transfer */
#define REG_SECTOR     3 /* sector number */
#define REG_CYL_LO     4 /* low byte of cylinder number */
#define REG_CYL_HI     5 /* high byte of cylinder number */
#define REG_LDH     6 /* lba drive and head */
#define   LDH_DEFAULT 0xA0 /* ECC enable 512 bytes per sector */
#define   LDH_LBA 0x40 /* Use LBA addressing */
#define   ldh_init(drive) (LDH_DEFAULT | ((drive) << 4))

/* Read only registers */
#define REG_STATUS     7 /* status */
#define   STATUS_BSY 0x80 /* controller busy */
#define   STATUS_RDY 0x40 /* drive ready */
#define   STATUS_WF 0x20 /* write fault */
#define   STATUS_SC 0x10 /* seek complete (obsolete) */
#define   STATUS_DRQ 0x08 /* data transfer request */
#define   STATUS_CRD 0x04 /* corrected data */
#define   STATUS_IDX 0x02 /* index pulse */
#define   STATUS_ERR 0x01 /* error */
#define   STATUS_ADMBSY        0x100 /* administratively busy (software) */
#define REG_ERROR     1 /* error code */
#define   ERROR_BB 0x80 /* bad block */
#define   ERROR_ECC 0x40 /* bad ecc bytes */
#define   ERROR_ID 0x10 /* id not found */
#define   ERROR_AC 0x04 /* aborted command */
#define   ERROR_TK 0x02 /* track zero error */
#define   ERROR_DM 0x01 /* no data address mark */

/* Write only registers */
#define REG_COMMAND     7 /* command */
#define   CMD_IDLE 0x00 /* for w_command: drive idle */
#define   CMD_RECALIBRATE 0x10 /* recalibrate drive */
#define   CMD_READ 0x20 /* read data */
#define   CMD_READ_EXT 0x24 /* read data (LBA48 addressed) */
#define   CMD_WRITE 0x30 /* write data */
#define   CMD_WRITE_EXT 0x34 /* write data (LBA48 addres

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件举报,一经查实,本站将立刻删除。

发表评论

评论列表(条)