⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ide_controller.c

📁 RTEMS (Real-Time Executive for Multiprocessor Systems) is a free open source real-time operating sys
💻 C
字号:
/* * ide_controller.c *  * This is generic rtems driver for IDE controllers. * * Copyright (C) 2001 OKTET Ltd., St.-Petersburg, Russia * Authors: Alexandra Kossovsky <sasha@oktet.ru> *          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_controller.c,v 1.1.2.2 2003/09/04 18:46:04 joel Exp $ * */#include <chain.h>#include <assert.h>#include <rtems/blkdev.h>#include <libchip/ide_ctrl_cfg.h>#include <libchip/ide_ctrl_io.h>/* * ide_controller_initialize -- *     Initializes all configured IDE controllers. Controllers configuration  *     table is provided by BSP * * PARAMETERS: *     major     - device major number *     minor_arg - device minor number *     args      - arguments * * RETURNS: *     RTEMS_SUCCESSFUL on success, or error code if *     error occured */rtems_device_driver ide_controller_initialize(rtems_device_major_number  major,                          rtems_device_minor_number  minor_arg,                          void                      *args){    unsigned long       minor;    rtems_status_code   status;    /* FIXME: may be it should be done on compilation phase */    if (IDE_Controller_Count > IDE_CTRL_MAX_MINOR_NUMBER)        rtems_fatal_error_occurred(RTEMS_TOO_MANY);            for (minor=0; minor < IDE_Controller_Count; minor++)    {        IDE_Controller_Table[minor].status = IDE_CTRL_NON_INITIALIZED;                if ((IDE_Controller_Table[minor].probe != NULL &&              IDE_Controller_Table[minor].probe(minor)) ||            IDE_Controller_Table[minor].fns->ctrl_probe(minor))        {            status = rtems_io_register_name(IDE_Controller_Table[minor].name,                                             major, minor);            if (status != RTEMS_SUCCESSFUL)                 rtems_fatal_error_occurred(status);            IDE_Controller_Table[minor].fns->ctrl_initialize(minor);                        IDE_Controller_Table[minor].status = IDE_CTRL_INITIALIZED;        }    }    return RTEMS_SUCCESSFUL;}/* * 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_Table[minor].fns->ctrl_read_block(minor, block_size, bufs,                                                     cbuf, 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_Table[minor].fns->ctrl_write_block(minor, block_size, bufs,                                                      cbuf, 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_Table[minor].fns->ctrl_reg_read(minor, reg, 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_Table[minor].fns->ctrl_reg_write(minor, reg, 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){    return IDE_Controller_Table[minor].fns->ctrl_config_io_speed(               minor,                modes_avaible);}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -