Changeset ea5f46d in mainline for contrib/arch/uspace/srv/vfs


Ignore:
Timestamp:
2009-09-15T16:07:26Z (16 years ago)
Author:
Martin Decky <martin@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
2a70672
Parents:
1993f9a
Message:

hierarchical composition of components
(tmpfs, fat, devfs are logical subcomponents of vfs, kbd and fb are subcomponents of console, rd is subcomponent of bd)

Location:
contrib/arch/uspace/srv/vfs
Files:
1 added
1 deleted
2 edited

Legend:

Unmodified
Added
Removed
  • contrib/arch/uspace/srv/vfs/vfs.adl

    r1993f9a rea5f46d  
    1 interface vfs {
     1interface vfs extends service {
    22                /* Establish connection */
    33                ipcarg_t ipc_m_connect_me_to(void);
     
    5151                ipcarg_t ipc_m_phone_hungup(void);
    5252        protocol:
    53                 [virtual_fs.bp]
     53                [vfs.bp]
    5454};
    5555
    56 frame vfs {
     56interface fs extends service {
     57                /* Establish connection */
     58                ipcarg_t ipc_m_connect_me_to(void);
     59               
     60                /* Notify filesystem that it was mounted */
     61                ipcarg_t mounted(in ipcarg_t dev_handle, in_copy string opts);
     62               
     63                /* Mount filesystem */
     64                ipcarg_t mount(in ipcarg_t device, in ipcarg_t flags, in_copy string point, in_copy string opts, ...);
     65               
     66                /* Open file by node */
     67                ipcarg_t open_node(in ipcarg_t lflag, in ipcarg_t oflag, in ipcarg_t mode, ...);
     68               
     69                /* Lookup file */
     70                ipcarg_t lookup(in ipcarg_t lflag, in ipcarg_t oflag, in ipcarg_t mode, ...);
     71               
     72                /* Read data from file */
     73                ipcarg_t read(in ipcarg_t dev_handle, in ipcarg_t fs_index, in ipcarg_t offset, out_copy stream data);
     74               
     75                /* Write data to file */
     76                ipcarg_t write(in ipcarg_t dev_handle, in ipcarg_t fs_index, in ipcarg_t offset, out_copy stream data);
     77               
     78                /* Truncate file */
     79                ipcarg_t truncate(in ipcarg_t dev_handle, in ipcarg_t fs_index, in ipcarg_t size);
     80               
     81                /* Get directory entry metadata */
     82                ipcarg_t stat(in ipcarg_t dev_handle, in ipcarg_t fs_index, out_copy stream stat);
     83               
     84                /* Flush file buffers */
     85                ipcarg_t sync(in ipcarg_t dev_handle, in ipcarg_t fs_index);
     86               
     87                /* Notify on file close */
     88                ipcarg_t close(in ipcarg_t dev_handle, in ipcarg_t fs_index);
     89               
     90                /* Close connection */
     91                ipcarg_t ipc_m_phone_hungup(void);
     92};
     93
     94frame vfs_manager {
    5795        provides:
    5896                vfs vfs;
    5997        requires:
    6098                [/uspace/lib/libc/requires%]
    61                 naming_service ns;
     99                fs fs;
     100                ns ns;
    62101        protocol:
    63102                [/uspace/lib/libc/protocol] +
    64                 [vfs.bp]
     103                [vfs_server.bp]
    65104};
     105
     106architecture vfs {
     107        inst vfs_manager vfs;
     108        inst tmpfs tmpfs;
     109        inst fat fat;
     110        inst devfs devfs;
     111       
     112        bind vfs:fs to tmpfs:fs;
     113        bind vfs:fs to fat:fs;
     114        bind vfs:fs to devfs:fs;
     115       
     116        bind tmpfs:vfs to vfs:vfs;
     117        bind fat:vfs to vfs:vfs;
     118        bind devfs:vfs to vfs:vfs;
     119       
     120        delegate vfs to vfs:vfs;
     121       
     122        [/uspace/lib/libc/subsume%vfs]
     123        [/uspace/lib/libc/subsume%tmpfs]
     124        [/uspace/lib/libc/subsume%fat]
     125        [/uspace/lib/libc/subsume%devfs]
     126       
     127        subsume vfs:ns to ns;
     128        subsume tmpfs:ns to ns;
     129        subsume fat:ns to ns;
     130        subsume devfs:ns to ns;
     131       
     132        subsume tmpfs:bd to bd;
     133        subsume fat:bd to bd;
     134       
     135        subsume devfs:devmap_client to devmap_client;
     136        subsume devfs:device to device;
     137};
  • contrib/arch/uspace/srv/vfs/vfs.bp

    r1993f9a rea5f46d  
    1 !ns.ipc_m_connect_to_me
     1?ipc_m_connect_me_to ;
     2(
     3        ?register {
     4                ?ipc_m_data_write /* fs name */ ;
     5                tentative {
     6                        /* callback connection */
     7                        ?ipc_m_connect_to_me ;
     8                        ?ipc_m_share_in
     9                }
     10        } +
     11       
     12        ?mount {
     13                ?ipc_m_data_write /* mount point */ ;
     14                tentative {
     15                        ?ipc_m_data_write /* mount options */ ;
     16                        tentative {
     17                                ?ipc_m_data_write /* fs name */ ;
     18                                tentative {
     19                                        ?ipc_m_ping ;
     20                                        tentative {
     21                                                (
     22                                                        /* root fs */
     23                                                        !fs.mounted ;
     24                                                        !fs.ipc_m_data_write /* mount options */
     25                                                ) +
     26                                                (
     27                                                        /* non-root fs */
     28                                                        tentative {
     29                                                                [fnc.vfs_lookup_internal] ;
     30                                                                tentative {
     31                                                                        [fnc.vfs_grab_phone] ;
     32                                                                        [fnc.vfs_grab_phone] ;
     33                                                                        !fs.mount ;
     34                                                                        !fs.ipc_m_connection_clone ;
     35                                                                        [fnc.vfs_release_phone] ;
     36                                                                        tentative {
     37                                                                                !fs.vfs_m_data_write /* mount options */
     38                                                                        }
     39                                                                        [fnc.vfs_release_phone] ;
     40                                                                }
     41                                                        }
     42                                                )
     43                                        }
     44                                }
     45                        }
     46                }
     47        } +
     48       
     49        ?open {
     50                tentative {
     51                        ?ipc_m_data_write /* path */ ;
     52                        tentative {
     53                                [fnc.vfs_lookup_internal] ;
     54                                tentative {
     55                                        [fnc.vfs_grab_phone] ;
     56                                        !fs.truncate ;
     57                                        [fnc.vfs_release_phone]
     58                                }
     59                        }
     60                }
     61        } +
     62       
     63        ?open_node {
     64                [fnc.vfs_open_node_internal] ;
     65                tentative {
     66                        [fnc.vfs_grab_phone] ;
     67                        !fs.truncate ;
     68                        [fnc.vfs_release_phone]
     69                }
     70        } +
     71       
     72        ?close {
     73                tentative {
     74                        [fnc.vfs_grab_phone] ;
     75                        !fs.close ;
     76                        [fnc.vfs_release_phone]
     77                }
     78        } +
     79       
     80        ?read {
     81                tentative {
     82                        ?ipc_m_data_read {
     83                                [fnc.vfs_grab_phone] ;
     84                                !fs.read ;
     85                                !fs.ipc_m_data_read /* forward payload */ ;
     86                                [fnc.vfs_release_phone]
     87                        }
     88                }
     89        } +
     90       
     91        ?write {
     92                tentative {
     93                        ?ipc_m_data_write {
     94                                [fnc.vfs_grab_phone] ;
     95                                !fs.write ;
     96                                !fs.ipc_m_data_write /* forward payload */ ;
     97                                [fnc.vfs_release_phone]
     98                        }
     99                }
     100        } +
     101       
     102        ?truncate {
     103                tentative {
     104                        [fnc.vfs_grab_phone] ;
     105                        !fs.truncate ;
     106                        [fnc.vfs_release_phone]
     107                }
     108        } +
     109       
     110        ?fstat {
     111                tentative {
     112                        ?ipc_m_data_read /* struct stat */ {
     113                                [fnc.vfs_grab_phone] ;
     114                                !fs.stat ;
     115                                !fs.ipc_m_data_read /* forward struct stat */ ;
     116                                [fnc.vfs_release_phone]
     117                        }
     118                }
     119        } +
     120       
     121        ?stat {
     122                ?ipc_m_data_write /* path */ ;
     123                tentative {
     124                        ?ipc_m_data_read /* struct stat */ {
     125                                [fnc.vfs_lookup_internal] ;
     126                                tentative {
     127                                        !fs.stat ;
     128                                        !fs.ipc_m_data_read /* forward struct stat */
     129                                }
     130                        }
     131                }
     132        } +
     133       
     134        ?mkdir {
     135                ?ipc_m_data_write /* path */ ;
     136                tentative {
     137                        [fnc.vfs_lookup_internal]
     138                }
     139        } +
     140       
     141        ?unlink {
     142                ?ipc_m_data_write /* path */ ;
     143                tentative {
     144                        [fnc.vfs_lookup_internal]
     145                }
     146        } +
     147       
     148        ?rename {
     149                ?ipc_m_data_write /* old path */ ;
     150                tentative {
     151                        ?ipc_m_data_write /* new path */ ;
     152                        tentative {
     153                                [fnc.vfs_lookup_internal] /* lookup old path */ ;
     154                                tentative {
     155                                        [fnc.vfs_lookup_internal] /* lookup parent of new path */ ;
     156                                        tentative {
     157                                                [fnc.vfs_lookup_internal] /* destroy old link for the new path */ ;
     158                                                tentative {
     159                                                        [fnc.vfs_lookup_internal] /* create new link for the new path */ ;
     160                                                        tentative {
     161                                                                [fnc.vfs_lookup_internal] /* destroy link for the old path */
     162                                                        }
     163                                                }
     164                                        }
     165                                }
     166                        }
     167                }
     168        } +
     169       
     170        ?sync {
     171                tentative {
     172                        !fs.sync
     173                }
     174        } +
     175       
     176        ?seek
     177       
     178)* ;
     179?ipc_m_phne_hungup
Note: See TracChangeset for help on using the changeset viewer.