Annotation of OSKit-Mach/oskit/ds_stream.c, revision 1.1

1.1     ! root        1: /* device server routines for oskit stream devices.
        !             2: 
        !             3:    This is a very simple version really not fit for general use at all.  It
        !             4:    blocks the thread making sending the device RPC *request* until the read
        !             5:    or write completes.  This is only fit for kernel debugging when the
        !             6:    "real" minimal console code is not available.  (I ain't written it yet!)
        !             7: */
        !             8: 
        !             9: #include "ds_oskit.h"
        !            10: 
        !            11: 
        !            12: /* In keeping with Mach's old chario behavior, we just ignore RECNUM.  */
        !            13: 
        !            14: io_return_t
        !            15: ds_stream_write_inband (device_t dev, ipc_port_t reply_port,
        !            16:                        mach_msg_type_name_t reply_port_type, dev_mode_t mode,
        !            17:                        recnum_t recnum, io_buf_ptr_t data, unsigned int count,
        !            18:                        int *bytes_written)
        !            19: {
        !            20:   oskit_error_t rc;
        !            21: 
        !            22:   *bytes_written = count;      /* oskit console is buggy */
        !            23:   rc = oskit_stream_write (dev->com.stream.io, data, count, bytes_written);
        !            24: 
        !            25:   return oskit_to_mach_error (rc);
        !            26: }
        !            27: 
        !            28: io_return_t
        !            29: ds_stream_read_inband (device_t dev, ipc_port_t reply_port,
        !            30:                       mach_msg_type_name_t reply_port_type, dev_mode_t mode,
        !            31:                       recnum_t recnum, int count, char *data,
        !            32:                       unsigned *bytes_read)
        !            33: {
        !            34:   oskit_error_t rc;
        !            35: 
        !            36:   if (count == 0)
        !            37:     {
        !            38:       *bytes_read = 0;
        !            39:       return D_SUCCESS;
        !            40:     }
        !            41: 
        !            42:   /* XXX bad blocking behavior: user thread doing read_request_inband blocks
        !            43:    */
        !            44: 
        !            45:   rc = oskit_stream_read (dev->com.stream.io, data, count, bytes_read);
        !            46:   return oskit_to_mach_error (rc);
        !            47: }
        !            48: 
        !            49: const struct device_ops stream_device_ops =
        !            50: {
        !            51:   write_inband: ds_stream_write_inband, read_inband: ds_stream_read_inband
        !            52: };

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.