source: mainline/uspace/srv/fs/fat/fat.c@ 26f2af0

lfn serial ticket/834-toolchain-update topic/msim-upgrade topic/simplify-dev-export
Last change on this file since 26f2af0 was 26f2af0, checked in by Jakub Jermar <jakub@…>, 18 years ago

VFS work.
Implement VFS_REGISTER part of the protocol in the FAT file system.

IPC work.
Rename ipc_data_send_accept() to ipc_data_receive() and ipc_data_send_answer()
to ipc_data_deliver(). Introduce ipc_data_send().

  • Property mode set to 100644
File size: 3.4 KB
RevLine 
[7bf7ef7]1/*
[df4ed85]2 * Copyright (c) 2006 Martin Decky
[c0cdcaf]3 * Copyright (c) 2007 Jakub Jermar
[7bf7ef7]4 * All rights reserved.
5 *
6 * Redistribution and use in source and binary forms, with or without
7 * modification, are permitted provided that the following conditions
8 * are met:
9 *
10 * - Redistributions of source code must retain the above copyright
11 * notice, this list of conditions and the following disclaimer.
12 * - Redistributions in binary form must reproduce the above copyright
13 * notice, this list of conditions and the following disclaimer in the
14 * documentation and/or other materials provided with the distribution.
15 * - The name of the author may not be used to endorse or promote products
16 * derived from this software without specific prior written permission.
17 *
18 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
19 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
20 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
21 * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
22 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
23 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
24 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
25 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
26 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
27 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28 */
29
30/** @addtogroup fs
31 * @{
32 */
33
34/**
[c0cdcaf]35 * @file fat.c
36 * @brief FAT file system driver for HelenOS.
[7bf7ef7]37 */
38
[c0cdcaf]39#include <ipc/ipc.h>
40#include <ipc/services.h>
[26f2af0]41#include <async.h>
[c0cdcaf]42#include <errno.h>
43#include <unistd.h>
44#include "../../vfs/vfs.h"
45
46vfs_info_t fat_vfs_info = {
47 .name = "fat",
48 .ops = {
49 [IPC_METHOD_TO_VFS_OP(VFS_REGISTER)] = VFS_OP_DEFINED,
50 [IPC_METHOD_TO_VFS_OP(VFS_MOUNT)] = VFS_OP_DEFINED,
51 [IPC_METHOD_TO_VFS_OP(VFS_UNMOUNT)] = VFS_OP_DEFINED,
52 [IPC_METHOD_TO_VFS_OP(VFS_LOOKUP)] = VFS_OP_DEFINED,
53 [IPC_METHOD_TO_VFS_OP(VFS_OPEN)] = VFS_OP_DEFINED,
54 [IPC_METHOD_TO_VFS_OP(VFS_CREATE)] = VFS_OP_DEFINED,
55 [IPC_METHOD_TO_VFS_OP(VFS_CLOSE)] = VFS_OP_DEFINED,
56 [IPC_METHOD_TO_VFS_OP(VFS_READ)] = VFS_OP_DEFINED,
57 [IPC_METHOD_TO_VFS_OP(VFS_WRITE)] = VFS_OP_NULL,
58 [IPC_METHOD_TO_VFS_OP(VFS_SEEK)] = VFS_OP_DEFAULT
59 }
60};
[7bf7ef7]61
[26f2af0]62/*
63 * This fibril processes request from the VFS server.
64 */
65void fat_connection(ipc_callid_t iid, ipc_call_t *icall)
66{
67 while (1) {
68 ipc_callid_t callid;
69 ipc_call_t call;
70
71 callid = async_get_call(&call);
72 ipc_answer_fast(callid, ENOTSUP, 0, 0);
73 }
74}
75
[7bf7ef7]76int main(int argc, char **argv)
77{
[c0cdcaf]78 ipcarg_t vfs_phone;
79
80 vfs_phone = ipc_connect_me_to(PHONE_NS, SERVICE_VFS, 0);
81 while (vfs_phone != EOK) {
82 usleep(10000);
83 vfs_phone = ipc_connect_me_to(PHONE_NS, SERVICE_VFS, 0);
84 }
85
[26f2af0]86 /*
87 * Tell VFS that we are here and want to get registered.
88 * We use the async framework because VFS will answer the request
89 * out-of-order, when it knows that the operation succeeded or failed.
90 */
91 ipc_call_t answer;
92 aid_t req = async_send_2(vfs_phone, VFS_REGISTER, 0, 0, &answer);
93
94 /*
95 * Send our VFS info structure to VFS.
96 */
97 int rc = ipc_data_send(vfs_phone, &fat_vfs_info, sizeof(fat_vfs_info));
98 if (rc != EOK) {
99 async_wait_for(req, NULL);
100 return rc;
101 }
102
103 /*
104 * Ask VFS for callback connection.
105 */
106 ipcarg_t phonehash;
107 ipc_connect_to_me(vfs_phone, 0, 0, &phonehash);
[c0cdcaf]108
[26f2af0]109 async_new_connection(phonehash, 0, NULL, fat_connection);
[7bf7ef7]110 return 0;
111}
112
113/**
114 * @}
115 */
Note: See TracBrowser for help on using the repository browser.