diff options
author | Joel Sherrill <joel@rtems.org> | 2016-11-15 10:37:59 -0600 |
---|---|---|
committer | Joel Sherrill <joel@rtems.org> | 2017-01-11 12:13:21 -0600 |
commit | 48a7fa31f918a6fc88719b3c9393a9ba2829f42a (patch) | |
tree | 10bf638de133099fcabe5fe713ca98a546a27ab2 /doc/bsp_howto/ata.t | |
parent | Remove obsolete __RTEMS_HAVE_SYS_CPUSET_H__ (diff) | |
download | rtems-48a7fa31f918a6fc88719b3c9393a9ba2829f42a.tar.bz2 |
Remove texinfo format documentation. Replaced by Sphinx formatted documentation.
closes #2812.
Diffstat (limited to '')
-rw-r--r-- | doc/bsp_howto/ata.t | 196 |
1 files changed, 0 insertions, 196 deletions
diff --git a/doc/bsp_howto/ata.t b/doc/bsp_howto/ata.t deleted file mode 100644 index 38b36b9c44..0000000000 --- a/doc/bsp_howto/ata.t +++ /dev/null @@ -1,196 +0,0 @@ -@c -@c COPYRIGHT (c) 1988-2002. -@c On-Line Applications Research Corporation (OAR). -@c All rights reserved. - -@chapter ATA Driver - -@section Terms - -ATA device - physical device attached to an IDE controller - -@section Introduction - -ATA driver provides generic interface to an ATA device. ATA driver is -hardware independent implementation of ATA standard defined in working draft -"AT Attachment Interface with Extensions (ATA-2)" X3T10/0948D revision 4c, -March 18, 1996. ATA Driver based on IDE Controller Driver and may be used for -computer systems with single IDE controller and with multiple as well. Although -current implementation has several restrictions detailed below ATA driver -architecture allows easily extend the driver. Current restrictions are: - -@itemize @bullet -@item Only mandatory (see draft p.29) and two optional (READ/WRITE MULTIPLE) -commands are implemented -@item Only PIO mode is supported but both poll and interrupt driven -@end itemize - -The reference implementation for ATA driver can be found in -@code{cpukit/libblock/src/ata.c}. - -@section Initialization - -The @code{ata_initialize} routine is responsible for ATA driver -initialization. The main goal of the initialization is to detect and -register in the system all ATA devices attached to IDE controllers -successfully initialized by the IDE Controller driver. - -In the implementation of the driver, the following actions are performed: - -@example -@group -rtems_device_driver ata_initialize( - rtems_device_major_number major, - rtems_device_minor_number minor, - void *arg -) -@{ - initialize internal ATA driver data structure - - for each IDE controller successfully initialized by the IDE Controller - driver - if the controller is interrupt driven - set up interrupt handler - - obtain information about ATA devices attached to the controller - with help of EXECUTE DEVICE DIAGNOSTIC command - - for each ATA device detected on the controller - obtain device parameters with help of DEVICE IDENTIFY command - - register new ATA device as new block device in the system -@} -@end group -@end example - -Special processing of ATA commands is required because of absence of -multitasking environment during the driver initialization. - -Detected ATA devices are registered in the system as physical block devices -(see libblock library description). Device names are formed based on IDE -controller minor number device is attached to and device number on the -controller (0 - Master, 1 - Slave). In current implementation 64 minor -numbers are reserved for each ATA device which allows to support up to 63 -logical partitions per device. - -@example -@group -controller minor device number device name ata device minor - 0 0 hda 0 - 0 1 hdb 64 - 1 0 hdc 128 - 1 1 hdd 172 - ... ... ... -@end group -@end example - -@section ATA Driver Architecture - -@subsection ATA Driver Main Internal Data Structures - -ATA driver works with ATA requests. ATA request is described by the -following structure: - -@example -@group -/* ATA request */ -typedef struct ata_req_s @{ - Chain_Node link; /* link in requests chain */ - char type; /* request type */ - ata_registers_t regs; /* ATA command */ - uint32_t cnt; /* Number of sectors to be exchanged */ - uint32_t cbuf; /* number of current buffer from breq in use */ - uint32_t 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; -@end group -@end example - -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: - -@example -@group -/* - * This structure describes controller state, devices configuration on the - * controller and chain of ATA requests to the controller. - */ -typedef struct ata_ide_ctrl_s @{ - bool present; /* controller state */ - ata_dev_t device[2]; /* ata devices description */ - Chain_Control reqs; /* requests chain */ -@} ata_ide_ctrl_t; -@end group -@end example - -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): - -@example -@group -/* - * 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; -@end group -@end example - -Driver uses array of the structures indexed by the ATA devices minor -number. - -ATA driver defines the following internal events: - -@example -@group -/* 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; -@end group -@end example - -@subsection Brief ATA Driver Core Overview - -All ATA driver functionality is available via ATA driver ioctl. Current -implementation supports only two ioctls: BLKIO_REQUEST and -ATAIO_SET_MULTIPLE_MODE. Each ATA driver ioctl() call generates an -ATA request which is appended to the appropriate controller queue depending -on ATA device the request belongs to. If appended request is single request in -the controller's queue then ATA driver event is generated. - -ATA driver task which manages queue of ATA driver events is core of ATA -driver. In current driver version queue of ATA driver events implemented -as RTEMS message queue. Each message contains event type, IDE controller -minor number on which event happened and error if an error occurred. Events -may be generated either by ATA driver ioctl call or by ATA driver task itself. -Each time ATA driver task receives an event it gets controller minor number -from event, takes first ATA request from controller queue and processes it -depending on request and event types. An ATA request processing may also -includes sending of several events. If ATA request processing is finished -the ATA request is removed from the controller queue. Note, that in current -implementation maximum one event per controller may be queued at any moment -of the time. - -(This part seems not very clear, hope I rewrite it soon) - - - |