/* * Input/Output Manager * * * 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$ */ #include #include #include #include #include /*PAGE * * _IO_Initialize_all_drivers * * This routine initializes all device drivers * * Input Paramters: NONE * * Output Parameters: NONE */ void _IO_Initialize_all_drivers( void ) { rtems_device_major_number major; for ( major=0 ; major < _IO_Number_of_drivers ; major ++ ) (void) rtems_io_initialize( major, 0, NULL); } /*PAGE * * rtems_io_register_name * * Associate a name with a driver * * Input Paramters: * * Output Parameters: */ rtems_status_code rtems_io_register_name( char *device_name, rtems_device_major_number major, rtems_device_minor_number minor ) { rtems_driver_name_t *np; unsigned32 level; unsigned32 index; /* find an empty slot */ for( index=0, np = _IO_Driver_name_table ; index < _IO_Number_of_devices ; index++, np++ ) { _ISR_Disable(level); if (np->device_name == 0) { np->device_name = device_name; np->device_name_length = strlen(device_name); np->major = major; np->minor = minor; _ISR_Enable(level); return RTEMS_SUCCESSFUL; } _ISR_Enable(level); } return RTEMS_TOO_MANY; } /*PAGE * * rtems_io_lookup_name * * Find what driver "owns" this name * * Input Paramters: * * Output Parameters: */ rtems_status_code rtems_io_lookup_name( const char *pathname, rtems_driver_name_t **rnp ) { rtems_driver_name_t *np; unsigned32 index; for( index=0, np = _IO_Driver_name_table ; index < _IO_Number_of_devices ; index++, np++ ) if (np->device_name) if (strncmp(np->device_name, pathname, np->device_name_length) == 0) { *rnp = np; return RTEMS_SUCCESSFUL; } *rnp = 0; return RTEMS_UNSATISFIED; } /*PAGE * * rtems_io_initialize * * This routine is the initialization directive of the IO manager. * * Input Paramters: * major - device driver number * minor - device number * argument - pointer to argument(s) * * Output Parameters: * returns - return code */ rtems_status_code rtems_io_initialize( rtems_device_major_number major, rtems_device_minor_number minor, void *argument ) { rtems_device_driver_entry callout; if ( major >= _IO_Number_of_drivers ) return RTEMS_INVALID_NUMBER; callout = _IO_Driver_address_table[major].initialization; return callout ? callout(major, minor, argument) : RTEMS_SUCCESSFUL; } /*PAGE * * rtems_io_open * * This routine is the open directive of the IO manager. * * Input Paramters: * major - device driver number * minor - device number * argument - pointer to argument(s) * * Output Parameters: * returns - return code */ rtems_status_code rtems_io_open( rtems_device_major_number major, rtems_device_minor_number minor, void *argument ) { rtems_device_driver_entry callout; if ( major >= _IO_Number_of_drivers ) return RTEMS_INVALID_NUMBER; callout = _IO_Driver_address_table[major].open; return callout ? callout(major, minor, argument) : RTEMS_SUCCESSFUL; } /*PAGE * * rtems_io_close * * This routine is the close directive of the IO manager. * * Input Paramters: * major - device driver number * minor - device number * argument - pointer to argument(s) * * Output Parameters: * returns - return code */ rtems_status_code rtems_io_close( rtems_device_major_number major, rtems_device_minor_number minor, void *argument ) { rtems_device_driver_entry callout; if ( major >= _IO_Number_of_drivers ) return RTEMS_INVALID_NUMBER; callout = _IO_Driver_address_table[major].close; return callout ? callout(major, minor, argument) : RTEMS_SUCCESSFUL; } /*PAGE * * rtems_io_read * * This routine is the read directive of the IO manager. * * Input Paramters: * major - device driver number * minor - device number * argument - pointer to argument(s) * * Output Parameters: * returns - return code */ rtems_status_code rtems_io_read( rtems_device_major_number major, rtems_device_minor_number minor, void *argument ) { rtems_device_driver_entry callout; if ( major >= _IO_Number_of_drivers ) return RTEMS_INVALID_NUMBER; callout = _IO_Driver_address_table[major].read; return callout ? callout(major, minor, argument) : RTEMS_SUCCESSFUL; } /*PAGE * * rtems_io_write * * This routine is the write directive of the IO manager. * * Input Paramters: * major - device driver number * minor - device number * argument - pointer to argument(s) * * Output Parameters: * returns - return code */ rtems_status_code rtems_io_write( rtems_device_major_number major, rtems_device_minor_number minor, void *argument ) { rtems_device_driver_entry callout; if ( major >= _IO_Number_of_drivers ) return RTEMS_INVALID_NUMBER; callout = _IO_Driver_address_table[major].write; return callout ? callout(major, minor, argument) : RTEMS_SUCCESSFUL; } /*PAGE * * rtems_io_control * * This routine is the control directive of the IO manager. * * Input Paramters: * major - device driver number * minor - device number * argument - pointer to argument(s) * * Output Parameters: * returns - return code */ rtems_status_code rtems_io_control( rtems_device_major_number major, rtems_device_minor_number minor, void *argument ) { rtems_device_driver_entry callout; if ( major >= _IO_Number_of_drivers ) return RTEMS_INVALID_NUMBER; callout = _IO_Driver_address_table[major].control; return callout ? callout(major, minor, argument) : RTEMS_SUCCESSFUL; }