home *** CD-ROM | disk | FTP | other *** search
/ ARM Club 3 / TheARMClub_PDCD3.iso / hensa / programming / oslib / oslib_1 / OSLib / Computer / h / devicefs < prev    next >
Encoding:
Text File  |  1995-07-24  |  21.2 KB  |  696 lines

  1. #ifndef devicefs_H
  2. #define devicefs_H
  3.  
  4. /* C header file for DeviceFS
  5.  * written by DefMod (Jul 24 1995) on Mon Jul 24 11:28:52 1995
  6.  * Jonathan Coxhead, Acorn Computers Ltd
  7.  */
  8.  
  9. #ifndef types_H
  10. #include "types.h"
  11. #endif
  12.  
  13. #ifndef os_H
  14. #include "os.h"
  15. #endif
  16.  
  17. #ifndef buffer_H
  18. #include "buffer.h"
  19. #endif
  20.  
  21. /**********************************
  22.  * SWI names and SWI reason codes *
  23.  **********************************/
  24. #undef  DeviceFS_Register
  25. #define DeviceFS_Register                       0x42740
  26. #undef  XDeviceFS_Register
  27. #define XDeviceFS_Register                      0x62740
  28. #undef  DeviceFS_Deregister
  29. #define DeviceFS_Deregister                     0x42741
  30. #undef  XDeviceFS_Deregister
  31. #define XDeviceFS_Deregister                    0x62741
  32. #undef  DeviceFS_RegisterObjects
  33. #define DeviceFS_RegisterObjects                0x42742
  34. #undef  XDeviceFS_RegisterObjects
  35. #define XDeviceFS_RegisterObjects               0x62742
  36. #undef  DeviceFS_DeregisterObjects
  37. #define DeviceFS_DeregisterObjects              0x42743
  38. #undef  XDeviceFS_DeregisterObjects
  39. #define XDeviceFS_DeregisterObjects             0x62743
  40. #undef  DeviceFS_CallDevice
  41. #define DeviceFS_CallDevice                     0x42744
  42. #undef  XDeviceFS_CallDevice
  43. #define XDeviceFS_CallDevice                    0x62744
  44. #undef  DeviceFSCallDevice_Initialise
  45. #define DeviceFSCallDevice_Initialise           0x0
  46. #undef  DeviceFSCallDevice_Terminate
  47. #define DeviceFSCallDevice_Terminate            0x1
  48. #undef  DeviceFSCallDevice_TxWakeUp
  49. #define DeviceFSCallDevice_TxWakeUp             0x2
  50. #undef  DeviceFSCallDevice_RxWakeUp
  51. #define DeviceFSCallDevice_RxWakeUp             0x3
  52. #undef  DeviceFSCallDevice_RxSleep
  53. #define DeviceFSCallDevice_RxSleep              0x4
  54. #undef  DeviceFSCallDevice_EnumDir
  55. #define DeviceFSCallDevice_EnumDir              0x5
  56. #undef  DeviceFSCallDevice_TxCreateBuffer
  57. #define DeviceFSCallDevice_TxCreateBuffer       0x6
  58. #undef  DeviceFSCallDevice_RxCreateBuffer
  59. #define DeviceFSCallDevice_RxCreateBuffer       0x7
  60. #undef  DeviceFSCallDevice_Halt
  61. #define DeviceFSCallDevice_Halt                 0x8
  62. #undef  DeviceFSCallDevice_Resume
  63. #define DeviceFSCallDevice_Resume               0x9
  64. #undef  DeviceFSCallDevice_EndOfData
  65. #define DeviceFSCallDevice_EndOfData            0xA
  66. #undef  DeviceFSCallDevice_StreamCreated
  67. #define DeviceFSCallDevice_StreamCreated        0xB
  68. #undef  DeviceFS_Threshold
  69. #define DeviceFS_Threshold                      0x42745
  70. #undef  XDeviceFS_Threshold
  71. #define XDeviceFS_Threshold                     0x62745
  72. #undef  DeviceFS_ReceivedChar
  73. #define DeviceFS_ReceivedChar                   0x42746
  74. #undef  XDeviceFS_ReceivedChar
  75. #define XDeviceFS_ReceivedChar                  0x62746
  76. #undef  DeviceFS_TransmitChar
  77. #define DeviceFS_TransmitChar                   0x42747
  78. #undef  XDeviceFS_TransmitChar
  79. #define XDeviceFS_TransmitChar                  0x62747
  80. #undef  Service_DeviceFSStarting
  81. #define Service_DeviceFSStarting                0x70
  82. #undef  Service_DeviceFSDying
  83. #define Service_DeviceFSDying                   0x71
  84. #undef  Service_DeviceDead
  85. #define Service_DeviceDead                      0x79
  86. #undef  Service_DeviceFSCloseRequest
  87. #define Service_DeviceFSCloseRequest            0x81
  88. #undef  UpCall_StreamCreated
  89. #define UpCall_StreamCreated                    0xA
  90. #undef  UpCall_StreamClosed
  91. #define UpCall_StreamClosed                     0xB
  92. #undef  Event_DeviceOverrun
  93. #define Event_DeviceOverrun                     0x16
  94.  
  95. /************************************
  96.  * Structure and union declarations *
  97.  ************************************/
  98. typedef struct devicefs_d_                      *devicefs_d;
  99. typedef struct devicefs_s_                      *devicefs_s;
  100.       /*DeviceFS stream handle*/
  101. typedef struct devicefs_h_                      *devicefs_h;
  102.       /*Driver stream handle*/
  103. typedef struct devicefs_device                  devicefs_device;
  104. typedef struct devicefs_device_list             devicefs_device_list;
  105.  
  106. /********************
  107.  * Type definitions *
  108.  ********************/
  109. typedef bits devicefs_flags;
  110.  
  111. struct devicefs_device
  112.    {  int name_offset;
  113.       devicefs_flags flags;
  114.       bits rx_flags;
  115.       int rx_buffer_size;
  116.       bits tx_flags;
  117.       int tx_buffer_size;
  118.       int reserved;
  119.    };
  120.  
  121. struct devicefs_device_list
  122.    {  devicefs_device d [UNKNOWN];
  123.    };
  124.  
  125. #define devicefs_DEVICE_LIST(N) \
  126.    struct \
  127.       {  devicefs_device d [N]; \
  128.       }
  129.  
  130. #define devicefs_SIZEOF_DEVICE_LIST(N) \
  131.    ((N)*sizeof ((devicefs_device_list *) NULL)->d)
  132.  
  133. typedef bits devicefs_register_flags;
  134.  
  135. typedef bits devicefs_initialise_flags;
  136.  
  137. /************************
  138.  * Constant definitions *
  139.  ************************/
  140. #define devicefs_DEVICE_BUFFERED                ((devicefs_flags) 0x1u)
  141. #define devicefs_DEVICE_USES_PATH_VAR           ((devicefs_flags) 0x2u)
  142. #define devicefs_REGISTER_BLOCK_DEVICE          ((devicefs_register_flags) 0x1u)
  143. #define devicefs_REGISTER_FULL_DUPLEX           ((devicefs_register_flags) 0x2u)
  144. #define devicefs_OPEN_FOR_RX                    ((devicefs_initialise_flags) 0x0u)
  145. #define devicefs_OPEN_FOR_TX                    ((devicefs_initialise_flags) 0x1u)
  146.  
  147. /*************************
  148.  * Function declarations *
  149.  *************************/
  150.  
  151. #ifdef __cplusplus
  152.    extern "C" {
  153. #endif
  154.  
  155. /* ------------------------------------------------------------------------
  156.  * Function:      devicefs_register()
  157.  *
  158.  * Description:   Registers a device driver and its associated devices with
  159.  *                DeviceFS
  160.  *
  161.  * Input:         flags - value of R0 on entry
  162.  *                devices - value of R1 on entry
  163.  *                driver - value of R2 on entry
  164.  *                handle - value of R3 on entry
  165.  *                workspace - value of R4 on entry
  166.  *                validation - value of R5 on entry
  167.  *                rx_limit - value of R6 on entry
  168.  *                tx_limit - value of R7 on entry
  169.  *
  170.  * Output:        d - value of R0 on exit (X version only)
  171.  *
  172.  * Returns:       R0 (non-X version only)
  173.  *
  174.  * Other notes:   Calls SWI 0x42740.
  175.  */
  176.  
  177. extern os_error *xdevicefs_register (devicefs_register_flags flags,
  178.       devicefs_device_list const *devices,
  179.       void const *driver,
  180.       int handle,
  181.       void *workspace,
  182.       char const *validation,
  183.       int rx_limit,
  184.       int tx_limit,
  185.       devicefs_d *d);
  186. extern devicefs_d devicefs_register (devicefs_register_flags flags,
  187.       devicefs_device_list const *devices,
  188.       void const *driver,
  189.       int handle,
  190.       void *workspace,
  191.       char const *validation,
  192.       int rx_limit,
  193.       int tx_limit);
  194.  
  195. /* ------------------------------------------------------------------------
  196.  * Function:      devicefs_deregister()
  197.  *
  198.  * Description:   Deregisters a device driver and all its devices from
  199.  *                DeviceFS
  200.  *
  201.  * Input:         d - value of R0 on entry
  202.  *
  203.  * Other notes:   Calls SWI 0x42741.
  204.  */
  205.  
  206. extern os_error *xdevicefs_deregister (devicefs_d d);
  207. __swi (0x42741) void devicefs_deregister (devicefs_d d);
  208.  
  209. /* ------------------------------------------------------------------------
  210.  * Function:      devicefs_register_objects()
  211.  *
  212.  * Description:   Registers a list of additional devices with a device
  213.  *                driver
  214.  *
  215.  * Input:         d - value of R0 on entry
  216.  *                devices - value of R1 on entry
  217.  *
  218.  * Other notes:   Calls SWI 0x42742.
  219.  */
  220.  
  221. extern os_error *xdevicefs_register_objects (devicefs_d d,
  222.       devicefs_device_list const *devices);
  223. __swi (0x42742) void devicefs_register_objects (devicefs_d d,
  224.       devicefs_device_list const *devices);
  225.  
  226. /* ------------------------------------------------------------------------
  227.  * Function:      devicefs_deregister_objects()
  228.  *
  229.  * Description:   Deregisters a device related to a particular device
  230.  *                driver
  231.  *
  232.  * Input:         d - value of R0 on entry
  233.  *                device_name - value of R1 on entry
  234.  *
  235.  * Other notes:   Calls SWI 0x42743.
  236.  */
  237.  
  238. extern os_error *xdevicefs_deregister_objects (devicefs_d d,
  239.       char const *device_name);
  240. __swi (0x42743) void devicefs_deregister_objects (devicefs_d d,
  241.       char const *device_name);
  242.  
  243. /* ------------------------------------------------------------------------
  244.  * Function:      devicefscalldevice_initialise()
  245.  *
  246.  * Description:   Initialises a device
  247.  *
  248.  * Input:         d - value of R1 on entry
  249.  *                s - value of R2 on entry
  250.  *                flags - value of R3 on entry
  251.  *                decoded_special - value of R6 on entry
  252.  *
  253.  * Output:        h - value of R2 on exit (X version only)
  254.  *
  255.  * Returns:       R2 (non-X version only)
  256.  *
  257.  * Other notes:   Calls SWI 0x42744 with R0 = 0x0.
  258.  */
  259.  
  260. extern os_error *xdevicefscalldevice_initialise (devicefs_d d,
  261.       devicefs_s s,
  262.       devicefs_initialise_flags flags,
  263.       byte const *decoded_special,
  264.       devicefs_h *h);
  265. extern devicefs_h devicefscalldevice_initialise (devicefs_d d,
  266.       devicefs_s s,
  267.       devicefs_initialise_flags flags,
  268.       byte const *decoded_special);
  269.  
  270. /* ------------------------------------------------------------------------
  271.  * Function:      devicefscalldevice_terminate()
  272.  *
  273.  * Description:   Finalises a device
  274.  *
  275.  * Input:         d - value of R1 on entry
  276.  *                h - value of R2 on entry
  277.  *
  278.  * Other notes:   Calls SWI 0x42744 with R0 = 0x1.
  279.  */
  280.  
  281. extern os_error *xdevicefscalldevice_terminate (devicefs_d d,
  282.       devicefs_h h);
  283. extern void devicefscalldevice_terminate (devicefs_d d,
  284.       devicefs_h h);
  285.  
  286. /* ------------------------------------------------------------------------
  287.  * Function:      devicefscalldevice_tx_wake_up()
  288.  *
  289.  * Description:   Wakes a device up for transmission
  290.  *
  291.  * Input:         d - value of R1 on entry
  292.  *                h - value of R2 on entry
  293.  *
  294.  * Output:        woken_up - value of R0 on exit (X version only)
  295.  *
  296.  * Returns:       R0 (non-X version only)
  297.  *
  298.  * Other notes:   Calls SWI 0x42744 with R0 = 0x2.
  299.  */
  300.  
  301. extern os_error *xdevicefscalldevice_tx_wake_up (devicefs_d d,
  302.       devicefs_h h,
  303.       bool *woken_up);
  304. extern bool devicefscalldevice_tx_wake_up (devicefs_d d,
  305.       devicefs_h h);
  306.  
  307. /* ------------------------------------------------------------------------
  308.  * Function:      devicefscalldevice_rx_wake_up()
  309.  *
  310.  * Description:   Wakes a device up for reception
  311.  *
  312.  * Input:         d - value of R1 on entry
  313.  *                h - value of R2 on entry
  314.  *
  315.  * Other notes:   Calls SWI 0x42744 with R0 = 0x3.
  316.  */
  317.  
  318. extern os_error *xdevicefscalldevice_rx_wake_up (devicefs_d d,
  319.       devicefs_h h);
  320. extern void devicefscalldevice_rx_wake_up (devicefs_d d,
  321.       devicefs_h h);
  322.  
  323. /* ------------------------------------------------------------------------
  324.  * Function:      devicefscalldevice_rx_sleep()
  325.  *
  326.  * Description:   Puts a device to sleep from reception
  327.  *
  328.  * Input:         d - value of R1 on entry
  329.  *                h - value of R2 on entry
  330.  *
  331.  * Other notes:   Calls SWI 0x42744 with R0 = 0x4.
  332.  */
  333.  
  334. extern os_error *xdevicefscalldevice_rx_sleep (devicefs_d d,
  335.       devicefs_h h);
  336. extern void devicefscalldevice_rx_sleep (devicefs_d d,
  337.       devicefs_h h);
  338.  
  339. /* ------------------------------------------------------------------------
  340.  * Function:      devicefscalldevice_enum_dir()
  341.  *
  342.  * Description:   Informs a device that a DeviceFS directory is being
  343.  *                enumerated
  344.  *
  345.  * Input:         d - value of R1 on entry
  346.  *                file_name - value of R2 on entry
  347.  *
  348.  * Other notes:   Calls SWI 0x42744 with R0 = 0x5.
  349.  */
  350.  
  351. extern os_error *xdevicefscalldevice_enum_dir (devicefs_d d,
  352.       char const *file_name);
  353. extern void devicefscalldevice_enum_dir (devicefs_d d,
  354.       char const *file_name);
  355.  
  356. /* ------------------------------------------------------------------------
  357.  * Function:      devicefscalldevice_tx_create_buffer()
  358.  *
  359.  * Description:   Informs a device that a buffer is being created for
  360.  *                transmission
  361.  *
  362.  * Input:         d - value of R1 on entry
  363.  *                h - value of R2 on entry
  364.  *                flags - value of R3 on entry
  365.  *                size - value of R4 on entry
  366.  *                b - value of R5 on entry
  367.  *                threshold - value of R6 on entry
  368.  *
  369.  * Output:        flags_out - value of R3 on exit
  370.  *                size_out - value of R4 on exit
  371.  *                b_out - value of R5 on exit (X version only)
  372.  *                threshold_out - value of R6 on exit
  373.  *
  374.  * Returns:       R5 (non-X version only)
  375.  *
  376.  * Other notes:   Calls SWI 0x42744 with R0 = 0x6.
  377.  */
  378.  
  379. extern os_error *xdevicefscalldevice_tx_create_buffer (devicefs_d d,
  380.       devicefs_h h,
  381.       buffer_flags flags,
  382.       int size,
  383.       buffer_b b,
  384.       int threshold,
  385.       buffer_flags *flags_out,
  386.       int *size_out,
  387.       buffer_b *b_out,
  388.       int *threshold_out);
  389. extern buffer_b devicefscalldevice_tx_create_buffer (devicefs_d d,
  390.       devicefs_h h,
  391.       buffer_flags flags,
  392.       int size,
  393.       buffer_b b,
  394.       int threshold,
  395.       buffer_flags *flags_out,
  396.       int *size_out,
  397.       int *threshold_out);
  398.  
  399. /* ------------------------------------------------------------------------
  400.  * Function:      devicefscalldevice_rx_create_buffer()
  401.  *
  402.  * Description:   Informs a device that a buffer is being created for
  403.  *                reception
  404.  *
  405.  * Input:         d - value of R1 on entry
  406.  *                h - value of R2 on entry
  407.  *                flags - value of R3 on entry
  408.  *                size - value of R4 on entry
  409.  *                b - value of R5 on entry
  410.  *                threshold - value of R6 on entry
  411.  *
  412.  * Output:        flags_out - value of R3 on exit
  413.  *                size_out - value of R4 on exit
  414.  *                b_out - value of R5 on exit (X version only)
  415.  *                threshold_out - value of R6 on exit
  416.  *
  417.  * Returns:       R5 (non-X version only)
  418.  *
  419.  * Other notes:   Calls SWI 0x42744 with R0 = 0x7.
  420.  */
  421.  
  422. extern os_error *xdevicefscalldevice_rx_create_buffer (devicefs_d d,
  423.       devicefs_h h,
  424.       buffer_flags flags,
  425.       int size,
  426.       buffer_b b,
  427.       int threshold,
  428.       buffer_flags *flags_out,
  429.       int *size_out,
  430.       buffer_b *b_out,
  431.       int *threshold_out);
  432. extern buffer_b devicefscalldevice_rx_create_buffer (devicefs_d d,
  433.       devicefs_h h,
  434.       buffer_flags flags,
  435.       int size,
  436.       buffer_b b,
  437.       int threshold,
  438.       buffer_flags *flags_out,
  439.       int *size_out,
  440.       int *threshold_out);
  441.  
  442. /* ------------------------------------------------------------------------
  443.  * Function:      devicefscalldevice_halt()
  444.  *
  445.  * Description:   Halts a device
  446.  *
  447.  * Input:         d - value of R1 on entry
  448.  *                h - value of R2 on entry
  449.  *
  450.  * Other notes:   Calls SWI 0x42744 with R0 = 0x8.
  451.  */
  452.  
  453. extern os_error *xdevicefscalldevice_halt (devicefs_d d,
  454.       devicefs_h h);
  455. extern void devicefscalldevice_halt (devicefs_d d,
  456.       devicefs_h h);
  457.  
  458. /* ------------------------------------------------------------------------
  459.  * Function:      devicefscalldevice_resume()
  460.  *
  461.  * Description:   Resumes a device
  462.  *
  463.  * Input:         d - value of R1 on entry
  464.  *                h - value of R2 on entry
  465.  *
  466.  * Other notes:   Calls SWI 0x42744 with R0 = 0x9.
  467.  */
  468.  
  469. extern os_error *xdevicefscalldevice_resume (devicefs_d d,
  470.       devicefs_h h);
  471. extern void devicefscalldevice_resume (devicefs_d d,
  472.       devicefs_h h);
  473.  
  474. /* ------------------------------------------------------------------------
  475.  * Function:      devicefscalldevice_end_of_data()
  476.  *
  477.  * Description:   Returns the end-of-data status of a device
  478.  *
  479.  * Input:         d - value of R1 on entry
  480.  *                h - value of R2 on entry
  481.  *
  482.  * Output:        end_of_data - value of R3 on exit (X version only)
  483.  *
  484.  * Returns:       R3 (non-X version only)
  485.  *
  486.  * Other notes:   Calls SWI 0x42744 with R0 = 0xA, R3 = 0xFFFFFFFF.
  487.  */
  488.  
  489. extern os_error *xdevicefscalldevice_end_of_data (devicefs_d d,
  490.       devicefs_h h,
  491.       bool *end_of_data);
  492. extern bool devicefscalldevice_end_of_data (devicefs_d d,
  493.       devicefs_h h);
  494.  
  495. /* ------------------------------------------------------------------------
  496.  * Function:      devicefscalldevice_stream_created()
  497.  *
  498.  * Description:   Informs a device that a stream has been created
  499.  *
  500.  * Input:         d - value of R1 on entry
  501.  *                h - value of R2 on entry
  502.  *                b - value of R3 on entry
  503.  *
  504.  * Other notes:   Calls SWI 0x42744 with R0 = 0xB.
  505.  */
  506.  
  507. extern os_error *xdevicefscalldevice_stream_created (devicefs_d d,
  508.       devicefs_h h,
  509.       buffer_b b);
  510. extern void devicefscalldevice_stream_created (devicefs_d d,
  511.       devicefs_h h,
  512.       buffer_b b);
  513.  
  514. /* ------------------------------------------------------------------------
  515.  * Function:      devicefs_threshold()
  516.  *
  517.  * Description:   Informs DeviceFS of the threshold value to use on
  518.  *                buffered devices
  519.  *
  520.  * Input:         s - value of R1 on entry
  521.  *                threshold - value of R2 on entry
  522.  *
  523.  * Other notes:   Calls SWI 0x42745.
  524.  */
  525.  
  526. extern os_error *xdevicefs_threshold (devicefs_s s,
  527.       int threshold);
  528. extern void devicefs_threshold (devicefs_s s,
  529.       int threshold);
  530.  
  531. /* ------------------------------------------------------------------------
  532.  * Function:      devicefs_received_char()
  533.  *
  534.  * Description:   Informs DeviceFS that a device has recieved a character
  535.  *
  536.  * Input:         b - value of R0 on entry
  537.  *                s - value of R1 on entry
  538.  *
  539.  * Output:        psr - processor status register on exit (X version only)
  540.  *
  541.  * Returns:       psr (non-X version only)
  542.  *
  543.  * Other notes:   Calls SWI 0x42746.
  544.  */
  545.  
  546. extern os_error *xdevicefs_received_char (byte b,
  547.       devicefs_s s,
  548.       bits *psr);
  549. extern bits devicefs_received_char (byte b,
  550.       devicefs_s s);
  551.  
  552. /* ------------------------------------------------------------------------
  553.  * Function:      devicefs_transmit_char()
  554.  *
  555.  * Description:   Informs DeviceFS that a device driver wants to transmit a
  556.  *                character
  557.  *
  558.  * Input:         s - value of R1 on entry
  559.  *
  560.  * Output:        b - value of R0 on exit
  561.  *                psr - processor status register on exit (X version only)
  562.  *
  563.  * Returns:       psr (non-X version only)
  564.  *
  565.  * Other notes:   Calls SWI 0x42747.
  566.  */
  567.  
  568. extern os_error *xdevicefs_transmit_char (devicefs_s s,
  569.       byte *b,
  570.       bits *psr);
  571. extern bits devicefs_transmit_char (devicefs_s s,
  572.       byte *b);
  573.  
  574. /* ------------------------------------------------------------------------
  575.  * Function:      service_device_fs_starting()
  576.  *
  577.  * Description:   DeviceFS is starting
  578.  *
  579.  * Other notes:   Calls SWI 0x30 with R1 = 0x70.
  580.  */
  581.  
  582. extern os_error *xservice_device_fs_starting (void);
  583. extern void service_device_fs_starting (void);
  584.  
  585. /* ------------------------------------------------------------------------
  586.  * Function:      service_device_fs_dying()
  587.  *
  588.  * Description:   DeviceFS is dying
  589.  *
  590.  * Other notes:   Calls SWI 0x30 with R0 = 0x0, R1 = 0x71.
  591.  */
  592.  
  593. extern os_error *xservice_device_fs_dying (void);
  594. extern void service_device_fs_dying (void);
  595.  
  596. /* ------------------------------------------------------------------------
  597.  * Function:      service_device_dead()
  598.  *
  599.  * Description:   Device has been killed by DeviceFS
  600.  *
  601.  * Input:         d - value of R2 on entry
  602.  *                device_name - value of R3 on entry
  603.  *
  604.  * Other notes:   Calls SWI 0x30 with R0 = 0x0, R1 = 0x79.
  605.  */
  606.  
  607. extern os_error *xservice_device_dead (devicefs_d d,
  608.       char const *device_name);
  609. extern void service_device_dead (devicefs_d d,
  610.       char const *device_name);
  611.  
  612. /* ------------------------------------------------------------------------
  613.  * Function:      service_device_fs_close_request()
  614.  *
  615.  * Description:   Opening a device which already has the maximum number of
  616.  *                streams open
  617.  *
  618.  * Input:         file - value of R2 on entry
  619.  *
  620.  * Output:        unclaimed - value of R1 on exit (X version only)
  621.  *
  622.  * Returns:       R1 (non-X version only)
  623.  *
  624.  * Other notes:   Calls SWI 0x30 with R1 = 0x81.
  625.  */
  626.  
  627. extern os_error *xservice_device_fs_close_request (os_f file,
  628.       bool *unclaimed);
  629. extern bool service_device_fs_close_request (os_f file);
  630.  
  631. /* ------------------------------------------------------------------------
  632.  * Function:      upcall_stream_created()
  633.  *
  634.  * Description:   Stream created
  635.  *
  636.  * Input:         d - value of R1 on entry
  637.  *                tx_stream - value of R2 on entry
  638.  *                file - value of R3 on entry
  639.  *                s - value of R4 on entry
  640.  *
  641.  * Other notes:   Calls SWI 0x33 with R0 = 0xA.
  642.  */
  643.  
  644. extern os_error *xupcall_stream_created (devicefs_d d,
  645.       bool tx_stream,
  646.       os_f file,
  647.       devicefs_s s);
  648. extern void upcall_stream_created (devicefs_d d,
  649.       bool tx_stream,
  650.       os_f file,
  651.       devicefs_s s);
  652.  
  653. /* ------------------------------------------------------------------------
  654.  * Function:      upcall_stream_closed()
  655.  *
  656.  * Description:   Stream closed
  657.  *
  658.  * Input:         d - value of R1 on entry
  659.  *                tx_stream - value of R2 on entry
  660.  *                file - value of R3 on entry
  661.  *                s - value of R4 on entry
  662.  *
  663.  * Other notes:   Calls SWI 0x33 with R0 = 0xB.
  664.  */
  665.  
  666. extern os_error *xupcall_stream_closed (devicefs_d d,
  667.       bool tx_stream,
  668.       os_f file,
  669.       devicefs_s s);
  670. extern void upcall_stream_closed (devicefs_d d,
  671.       bool tx_stream,
  672.       os_f file,
  673.       devicefs_s s);
  674.  
  675. /* ------------------------------------------------------------------------
  676.  * Function:      event_device_overrun()
  677.  *
  678.  * Description:   Device overrun event
  679.  *
  680.  * Input:         d - value of R1 on entry
  681.  *                file - value of R2 on entry
  682.  *
  683.  * Other notes:   Calls SWI 0x22 with R0 = 0x16, R3 = 0x0.
  684.  */
  685.  
  686. extern os_error *xevent_device_overrun (devicefs_d d,
  687.       os_f file);
  688. extern void event_device_overrun (devicefs_d d,
  689.       os_f file);
  690.  
  691. #ifdef __cplusplus
  692.    }
  693. #endif
  694.  
  695. #endif
  696.