/trunk/kernel/generic/include/ipc/ipc.h |
---|
118,7 → 118,7 |
* |
* The protocol for negotiating is: |
* - sys_connect_to_me - sends a message IPC_M_CONNECT_TO_ME |
* - sys_wait_for_call - upon receipt tries to allocate new phone |
* - recipient - upon receipt tries to allocate new phone |
* - if it fails, responds with ELIMIT |
* - passes call to userspace. If userspace |
* responds with error, phone is deallocated and |
126,7 → 126,6 |
* the call is accepted and the response is sent back. |
* - the allocated phoneid is passed to userspace |
* (on the receiving side) as ARG5 of the call. |
* - the caller obtains taskid of the called thread |
*/ |
#define IPC_M_CONNECT_TO_ME 1 |
/** Protocol for CONNECT - ME - TO |
141,10 → 140,9 |
* - arg1/2/3 are user specified, arg5 contains |
* address of the phone that should be connected |
* (TODO: it leaks to userspace) |
* recipient - if ipc_answer == 0, then accept connection |
* - recipient - if ipc_answer == 0, then accept connection |
* - otherwise connection refused |
* - recepient may forward message. Forwarding |
* system message |
* - recepient may forward message. |
* |
*/ |
#define IPC_M_CONNECT_ME_TO 2 |
/trunk/kernel/generic/src/ipc/sysipc.c |
---|
184,7 → 184,7 |
} else { |
/* The connection was accepted */ |
phone_connect(phoneid, &answer->sender->answerbox); |
/* Set 'phone hash' as arg3 of response */ |
/* Set 'phone hash' as arg5 of response */ |
IPC_SET_ARG5(answer->data, |
(unative_t) &TASK->phones[phoneid]); |
} |
269,7 → 269,7 |
newphid = phone_alloc(); |
if (newphid < 0) |
return ELIMIT; |
/* Set arg3 for server */ |
/* Set arg5 for server */ |
IPC_SET_ARG5(call->data, (unative_t) &TASK->phones[newphid]); |
call->flags |= IPC_CALL_CONN_ME_TO; |
call->priv = newphid; |
/trunk/uspace/srv/fs/fat/fat.h |
---|
135,9 → 135,19 |
extern uint8_t *plb_ro; |
extern void fat_lookup(ipc_callid_t, ipc_call_t *); |
/* |
* The following interfaces are rather fs-neutral and might be later moved to a |
* dedicated library (e.g. libfs). We just wait until the interfaces stabilize |
* and until there is more than one fs implementation. |
*/ |
extern int block_read(int, unsigned long, void *); |
extern int block_write(int, unsigned long, void *); |
extern void fat_lookup(ipc_callid_t, ipc_call_t *); |
extern void node_add_mp(int, unsigned long); |
extern void node_del_mp(int, unsigned long); |
extern bool node_is_mp(int, unsigned long); |
#endif |
/trunk/uspace/srv/fs/fat/fat_ops.c |
---|
36,10 → 36,28 |
*/ |
#include "fat.h" |
#include "../../vfs/vfs.h" |
#include <ipc/ipc.h> |
#include <async.h> |
#include <errno.h> |
#define PLB_GET_CHAR(i) (plb_ro[(i) % PLB_SIZE]) |
#define FAT_NAME_LEN 8 |
#define FAT_EXT_LEN 3 |
#define FAT_PAD ' ' |
#define FAT_DENTRY_UNUSED 0x00 |
#define FAT_DENTRY_E5_ESC 0x05 |
#define FAT_DENTRY_DOT 0x2e |
#define FAT_DENTRY_ERASED 0xe5 |
static int match_path_component(fat_dentry_t *dentry, unsigned index, |
size_t len) |
{ |
} |
void fat_lookup(ipc_callid_t rid, ipc_call_t *request) |
{ |
int first = IPC_GET_ARG1(*request); |