Changeset 3115355 in mainline


Ignore:
Timestamp:
2007-12-31T10:14:38Z (16 years ago)
Author:
Jakub Jermar <jakub@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
27d293a
Parents:
badbd888
Message:

Simplify the IPC_M_DATA_WRITE protocol. Do not pass the source address space
virtual address to the recipient. This feature was not used anyway. Now
IPC_M_DATA_WRITE and IPC_M_DATA_READ are feature-aligned.

Files:
10 edited

Legend:

Unmodified
Added
Removed
  • kernel/generic/include/ipc/ipc.h

    rbadbd888 r3115355  
    175175
    176176/** Send data to another address space over IPC.
    177  * - ARG1 - destination address space virtual address, may be overriden by the
    178  *          recipient
    179  * - ARG2 - source address space virtual address
    180  * - ARG3 - size of data to be copied, may be overriden by the recipient
     177 * - ARG1 - source address space virtual address
     178 * - ARG2 - size of data to be copied, may be overriden by the recipient
    181179 *
    182180 * on answer, the recipient must set:
    183181 *
    184182 * - ARG1 - final destination address space virtual address
    185  * - ARG3 - final size of data to be copied
     183 * - ARG2 - final size of data to be copied
    186184 */
    187185#define IPC_M_DATA_WRITE        6
  • kernel/generic/src/ipc/sysipc.c

    rbadbd888 r3115355  
    273273
    274274                        dst = IPC_GET_ARG1(answer->data);
    275                         size = IPC_GET_ARG3(answer->data);
    276                         max_size = IPC_GET_ARG3(*olddata);
     275                        size = IPC_GET_ARG2(answer->data);
     276                        max_size = IPC_GET_ARG2(*olddata);
    277277
    278278                        if (size <= max_size) {
     
    326326                break;
    327327        case IPC_M_DATA_WRITE:
    328                 src = IPC_GET_ARG2(call->data);
    329                 size = IPC_GET_ARG3(call->data);
     328                src = IPC_GET_ARG1(call->data);
     329                size = IPC_GET_ARG2(call->data);
    330330               
    331331                if ((size <= 0) || (size > DATA_XFER_LIMIT))
  • uspace/lib/libc/generic/ipc.c

    rbadbd888 r3115355  
    736736int ipc_data_write_send(int phoneid, void *src, size_t size)
    737737{
    738         return ipc_call_sync_3_0(phoneid, IPC_M_DATA_WRITE, 0, (ipcarg_t) src,
     738        return ipc_call_sync_2_0(phoneid, IPC_M_DATA_WRITE, (ipcarg_t) src,
    739739            (ipcarg_t) size);
    740740}
     
    749749 * @param callid        Storage where the hash of the IPC_M_DATA_WRITE call will
    750750 *                      be stored.
    751  * @param dst           Storage where the suggested destination address will
    752  *                      be stored. May be NULL.
    753751 * @param size          Storage where the suggested size will be stored. May be
    754752 *                      NULL
     
    756754 * @return              Non-zero on success, zero on failure.
    757755 */
    758 int ipc_data_write_receive(ipc_callid_t *callid, void **dst, size_t *size)
     756int ipc_data_write_receive(ipc_callid_t *callid, size_t *size)
    759757{
    760758        ipc_call_t data;
     
    765763        if (IPC_GET_METHOD(data) != IPC_M_DATA_WRITE)
    766764                return 0;
    767         if (dst)
    768                 *dst = (void *) IPC_GET_ARG1(data);
    769765        if (size)
    770                 *size = (size_t) IPC_GET_ARG3(data);
     766                *size = (size_t) IPC_GET_ARG2(data);
    771767        return 1;
    772768}
     
    785781int ipc_data_write_deliver(ipc_callid_t callid, void *dst, size_t size)
    786782{
    787         return ipc_answer_3(callid, EOK, (ipcarg_t) dst, 0, (ipcarg_t) size);
     783        return ipc_answer_2(callid, EOK, (ipcarg_t) dst, (ipcarg_t) size);
    788784}
    789785 
  • uspace/lib/libc/include/ipc/ipc.h

    rbadbd888 r3115355  
    267267extern int ipc_data_read_deliver(ipc_callid_t callid, void *src, size_t size);
    268268extern int ipc_data_write_send(int phoneid, void *src, size_t size);
    269 extern int ipc_data_write_receive(ipc_callid_t *callid, void **dst,
    270     size_t *size);
     269extern int ipc_data_write_receive(ipc_callid_t *callid, size_t *size);
    271270extern int ipc_data_write_deliver(ipc_callid_t callid, void *dst, size_t size);
    272271
  • uspace/srv/devmap/devmap.c

    rbadbd888 r3115355  
    203203         * Get driver name
    204204         */
    205         if (!ipc_data_write_receive(&callid, NULL, &name_size)) {
     205        if (!ipc_data_write_receive(&callid, &name_size)) {
    206206                printf("Unexpected request.\n");
    207207                free(driver);
     
    369369       
    370370        /* Get device name */
    371         if (!ipc_data_write_receive(&callid, NULL, &size)) {
     371        if (!ipc_data_write_receive(&callid, &size)) {
    372372                free(device);
    373373                printf("Cannot read device name.\n");
     
    490490         * read the name itself until the buffer is allocated).
    491491         */
    492         if (!ipc_data_write_receive(&callid, NULL, &name_size)) {
     492        if (!ipc_data_write_receive(&callid, &name_size)) {
    493493                ipc_answer_0(callid, EREFUSED);
    494494                ipc_answer_0(iid, EREFUSED);
  • uspace/srv/fs/tmpfs/tmpfs_ops.c

    rbadbd888 r3115355  
    339339        ipc_callid_t callid;
    340340        size_t len;
    341         if (!ipc_data_write_receive(&callid, NULL, &len)) {
     341        if (!ipc_data_write_receive(&callid, &len)) {
    342342                ipc_answer_0(callid, EINVAL);   
    343343                ipc_answer_0(rid, EINVAL);
  • uspace/srv/vfs/vfs_mount.c

    rbadbd888 r3115355  
    8787         * system.
    8888         */
    89         if (!ipc_data_write_receive(&callid, NULL, &size)) {
     89        if (!ipc_data_write_receive(&callid, &size)) {
    9090                ipc_answer_0(callid, EINVAL);
    9191                ipc_answer_0(rid, EINVAL);
     
    123123         * Now, we want the client to send us the mount point.
    124124         */
    125         if (!ipc_data_write_receive(&callid, NULL, &size)) {
     125        if (!ipc_data_write_receive(&callid, &size)) {
    126126                ipc_answer_0(callid, EINVAL);
    127127                ipc_answer_0(rid, EINVAL);
  • uspace/srv/vfs/vfs_open.c

    rbadbd888 r3115355  
    6262        ipc_callid_t callid;
    6363
    64         if (!ipc_data_write_receive(&callid, NULL, &size)) {
     64        if (!ipc_data_write_receive(&callid, &size)) {
    6565                ipc_answer_0(callid, EINVAL);
    6666                ipc_answer_0(rid, EINVAL);
  • uspace/srv/vfs/vfs_rdwr.c

    rbadbd888 r3115355  
    7474                res = ipc_data_read_receive(&callid, NULL);
    7575        else
    76                 res = ipc_data_write_receive(&callid, NULL, NULL);
     76                res = ipc_data_write_receive(&callid, NULL);
    7777        if (!res) {
    7878                ipc_answer_0(callid, EINVAL);
  • uspace/srv/vfs/vfs_register.c

    rbadbd888 r3115355  
    165165         * VFS info structure from the client FS.
    166166         */
    167         if (!ipc_data_write_receive(&callid, NULL, &size)) {
     167        if (!ipc_data_write_receive(&callid, &size)) {
    168168                /*
    169169                 * The client doesn't obey the same protocol as we do.
Note: See TracChangeset for help on using the changeset viewer.