Changeset 1626cd4 in mainline for uspace/srv/bd/vbd/vbd.c


Ignore:
Timestamp:
2015-07-02T19:01:37Z (9 years ago)
Author:
Jiri Svoboda <jiri@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
6a0d4ce2
Parents:
3faa03d
Message:

Propagate label and partition block ranges and other info up through the stack.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • uspace/srv/bd/vbd/vbd.c

    r3faa03d r1626cd4  
    4040#include <ipc/vbd.h>
    4141#include <loc.h>
     42#include <macros.h>
    4243#include <stdio.h>
    4344#include <stdlib.h>
     
    112113        disk_sid = IPC_GET_ARG1(*icall);
    113114        rc = vbds_disk_info(disk_sid, &dinfo);
    114         async_answer_1(iid, (sysarg_t)rc, (sysarg_t)dinfo.ltype);
     115        if (rc != EOK) {
     116                log_msg(LOG_DEFAULT, LVL_NOTE, "vbd_disk_info() call failed");
     117                async_answer_0(iid, rc);
     118                return;
     119        }
     120
     121        log_msg(LOG_DEFAULT, LVL_NOTE, "vbd_disk_info() data_read_receive");
     122        ipc_callid_t callid;
     123        size_t size;
     124        if (!async_data_read_receive(&callid, &size)) {
     125                log_msg(LOG_DEFAULT, LVL_NOTE, "vbd_disk_info() failed");
     126                async_answer_0(callid, EREFUSED);
     127                async_answer_0(iid, EREFUSED);
     128                return;
     129        }
     130
     131        log_msg(LOG_DEFAULT, LVL_NOTE, "vbd_disk_info() check size");
     132        if (size != sizeof(vbds_disk_info_t)) {
     133                log_msg(LOG_DEFAULT, LVL_NOTE, "vbd_disk_info() wrong size");
     134                async_answer_0(callid, EINVAL);
     135                async_answer_0(iid, EINVAL);
     136                return;
     137        }
     138
     139        log_msg(LOG_DEFAULT, LVL_NOTE, "vbd_disk_info() data_read_finalize");
     140        rc = async_data_read_finalize(callid, &dinfo,
     141            min(size, sizeof(dinfo)));
     142        if (rc != EOK) {
     143                async_answer_0(callid, rc);
     144                async_answer_0(iid, rc);
     145                return;
     146        }
     147
     148        log_msg(LOG_DEFAULT, LVL_NOTE, "vbd_disk_info() reply EOK");
     149        async_answer_0(iid, EOK);
    115150}
    116151
     
    143178static void vbds_label_get_parts_srv(ipc_callid_t iid, ipc_call_t *icall)
    144179{
    145 //      service_id_t disk_sid;
    146 //      int rc;
     180        ipc_callid_t callid;
     181        size_t size;
     182        size_t act_size;
     183        service_id_t sid;
     184        int rc;
    147185
    148186        log_msg(LOG_DEFAULT, LVL_NOTE, "vbds_label_get_parts_srv()");
    149187
    150 //      disk_sid = IPC_GET_ARG1(*icall);
    151 //      rc = vbds_label_delete(disk_sid);
    152 //      async_answer_0(iid, (sysarg_t) rc);
    153         async_answer_0(iid, ENOTSUP);
    154 }
     188        if (!async_data_read_receive(&callid, &size)) {
     189                async_answer_0(callid, EREFUSED);
     190                async_answer_0(iid, EREFUSED);
     191                return;
     192        }
     193
     194        sid = IPC_GET_ARG1(*icall);
     195
     196        category_id_t *id_buf = (category_id_t *) malloc(size);
     197        if (id_buf == NULL) {
     198                async_answer_0(callid, ENOMEM);
     199                async_answer_0(iid, ENOMEM);
     200                return;
     201        }
     202
     203        rc = vbds_get_parts(sid, id_buf, size, &act_size);
     204        if (rc != EOK) {
     205                async_answer_0(callid, rc);
     206                async_answer_0(iid, rc);
     207                return;
     208        }
     209
     210        sysarg_t retval = async_data_read_finalize(callid, id_buf, size);
     211        free(id_buf);
     212
     213        async_answer_1(iid, retval, act_size);
     214}
     215
    155216
    156217static void vbds_part_get_info_srv(ipc_callid_t iid, ipc_call_t *icall)
     
    164225        part = IPC_GET_ARG1(*icall);
    165226        rc = vbds_part_get_info(part, &pinfo);
    166         async_answer_0(iid, (sysarg_t)rc);
     227        async_answer_5(iid, (sysarg_t)rc, pinfo.index,
     228            LOWER32(pinfo.block0), UPPER32(pinfo.block0),
     229            LOWER32(pinfo.nblocks), UPPER32(pinfo.nblocks));
    167230}
    168231
Note: See TracChangeset for help on using the changeset viewer.