BSP and Device Driver Development Guide
ATA driver works with ATA requests. ATA request is described by the following structure:
/* ATA request */ typedef struct ata_req_s { Chain_Node link; /* link in requests chain */ char type; /* request type */ ata_registers_t regs; /* ATA command */ rtems_unsigned32 cnt; /* Number of sectors to be exchanged */ rtems_unsigned32 cbuf; /* number of current buffer from breq in use */ rtems_unsigned32 pos; /* current position in 'cbuf' */ blkdev_request *breq; /* blkdev_request which corresponds to the * ata request */ rtems_id sema; /* semaphore which is used if synchronous * processing of the ata request is required */ rtems_status_code status; /* status of ata request processing */ int error; /* error code */ } ata_req_t;
ATA driver supports separate ATA requests queues for each IDE controller (one queue per controller). The following structure contains information about controller's queue and devices attached to the controller:
/* * This structure describes controller state, devices configuration on the * controller and chain of ATA requests to the controller. */ typedef struct ata_ide_ctrl_s { rtems_boolean present; /* controller state */ ata_dev_t device[2]; /* ata devices description */ Chain_Control reqs; /* requests chain */ } ata_ide_ctrl_t;
Driver uses array of the structures indexed by the controllers minor number.
The following structure allows to map an ATA device to the pair (IDE controller minor number device is attached to, device number on the controller):
/* * Mapping of rtems ATA devices to the following pairs: * (IDE controller number served the device, device number on the controller) */ typedef struct ata_ide_dev_s { int ctrl_minor;/* minor number of IDE controller serves rtems ATA device */ int device; /* device number on IDE controller (0 or 1) */ } ata_ide_dev_t;
Driver uses array of the structures indexed by the ATA devices minor number.
ATA driver defines the following internal events:
/* ATA driver events */ typedef enum ata_msg_type_s { ATA_MSG_GEN_EVT = 1, /* general event */ ATA_MSG_SUCCESS_EVT, /* success event */ ATA_MSG_ERROR_EVT, /* error event */ ATA_MSG_PROCESS_NEXT_EVT /* process next ata request event */ } ata_msg_type_t;
BSP and Device Driver Development Guide
Copyright © 1988-2007OAR Corporation