summaryrefslogblamecommitdiffstats
path: root/cpukit/sapi/include/rtems/io.h
blob: 43c52cd35daf948bf33b30680fcf466b269f195b (plain) (tree)




























































































































































































                                                                             
                                       

                                   

                                         









                         
/*  io.h
 *
 *  This include file contains all the constants and structures associated
 *  with the Input/Output Manager.  This manager provides a well defined
 *  mechanism for accessing device drivers and a structured methodology for
 *  organizing device drivers.
 *
 *  Directives provided are:
 *
 *     + initialize a device driver
 *     + open a device driver
 *     + close a device driver
 *     + read from a device driver
 *     + write to a device driver
 *     + special device services
 *
 *  COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
 *  On-Line Applications Research Corporation (OAR).
 *  All rights assigned to U.S. Government, 1994.
 *
 *  This material may be reproduced by or for the U.S. Government pursuant
 *  to the copyright license under the clause at DFARS 252.227-7013.  This
 *  notice must appear in all copies of this file and its derivatives.
 *
 *  $Id$
 */

#ifndef __RTEMS_IO_h
#define __RTEMS_IO_h

#ifdef __cplusplus
extern "C" {
#endif

#include <rtems/config.h>

/*
 *  The following type defines the set of IO operations which are
 *  recognized by _IO_Handler and can be supported by a RTEMS
 *  device driver.
 */

typedef enum {
  IO_INITIALIZE_OPERATION = 0,
  IO_OPEN_OPERATION       = 1,
  IO_CLOSE_OPERATION      = 2,
  IO_READ_OPERATION       = 3,
  IO_WRITE_OPERATION      = 4,
  IO_CONTROL_OPERATION    = 5
}  IO_operations;

/*
 *  The following declare the data required to manage the Device Driver
 *  Address Table.
 */

EXTERN unsigned32                          _IO_Number_of_drivers;
EXTERN rtems_driver_address_table *_IO_Driver_address_table;

/*
 *  _IO_Manager_initialization
 *
 *  DESCRIPTION:
 *
 *  This routine performs the initialization necessary for this manager.
 */

STATIC INLINE void _IO_Manager_initialization(
  rtems_driver_address_table *driver_table,
  unsigned32                          number_of_drivers
);

/*
 *  rtems_io_initialize
 *
 *  DESCRIPTION:
 *
 *  This routine implements the rtems_io_initialize directive.  It is invoked
 *  to initialize a device driver or an individual device.
 */

rtems_status_code rtems_io_initialize(
  rtems_device_major_number  major,
  rtems_device_minor_number  minor,
  void             *argument,
  unsigned32       *return_value
);

/*
 *  rtems_io_open
 *
 *  DESCRIPTION:
 *
 *  This routine implements the rtems_io_open directive.  It is invoked
 *  to open a device.
 */

rtems_status_code rtems_io_open(
  rtems_device_major_number  major,
  rtems_device_minor_number  minor,
  void             *argument,
  unsigned32       *return_value
);

/*
 *  rtems_io_close
 *
 *  DESCRIPTION:
 *
 *  This routine implements the rtems_io_close directive.  It is invoked
 *  to close a device.
 */

rtems_status_code rtems_io_close(
  rtems_device_major_number  major,
  rtems_device_minor_number  minor,
  void             *argument,
  unsigned32       *return_value
);

/*
 *  rtems_io_read
 *
 *  DESCRIPTION:
 *
 *  This routine implements the rtems_io_read directive.  It is invoked
 *  to read from a device.
 */

rtems_status_code rtems_io_read(
  rtems_device_major_number  major,
  rtems_device_minor_number  minor,
  void             *argument,
  unsigned32       *return_value
);

/*
 *  rtems_io_write
 *
 *  DESCRIPTION:
 *
 *  This routine implements the rtems_io_write directive.  It is invoked
 *  to write to a device.
 */

rtems_status_code rtems_io_write(
  rtems_device_major_number  major,
  rtems_device_minor_number  minor,
  void             *argument,
  unsigned32       *return_value
);

/*
 *  rtems_io_control
 *
 *  DESCRIPTION:
 *
 *  This routine implements the rtems_io_control directive.  It is invoked
 *  to perform a device specific operation on a device.
 */

rtems_status_code rtems_io_control(
  rtems_device_major_number  major,
  rtems_device_minor_number  minor,
  void             *argument,
  unsigned32       *return_value
);

/*
 *  _IO_Initialize_all_drivers
 *
 *  DESCRIPTION:
 *
 *  This routine initializes all of the device drivers configured
 *  in the Device Driver Address Table.
 */

void _IO_Initialize_all_drivers( void );

/*
 *  _IO_Handler_routine
 *
 *  DESCRIPTION:
 *
 *  This routine provides the common foundation for all of the IO
 *  Manager's directives.
 */

rtems_status_code _IO_Handler_routine(
  IO_operations              operation,
  rtems_device_major_number  major,
  rtems_device_minor_number  minor,
  void                      *argument,
  unsigned32                *return_value
);

#include <rtems/io.inl>

#ifdef __cplusplus
}
#endif

#endif
/* end of include file */