Changeset 28ed0d95 in mainline for uspace/srv/bd


Ignore:
Timestamp:
2015-06-27T19:50:12Z (10 years ago)
Author:
Jiri Svoboda <jiri@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
78d50bd
Parents:
22fb7ab
Message:

VBD client API, liblabel API, pass partition creation/deletion through to VBD.

Location:
uspace/srv/bd/vbd
Files:
2 added
3 edited

Legend:

Unmodified
Added
Removed
  • uspace/srv/bd/vbd/Makefile

    r22fb7ab r28ed0d95  
    2828
    2929USPACE_PREFIX = ../../..
     30
     31LIBS = \
     32        $(LIBLABEL_PREFIX)/liblabel.a \
     33        $(LIBBLOCK_PREFIX)/libblock.a
     34
     35EXTRA_CFLAGS = \
     36        -I$(LIBLABEL_PREFIX)/include
     37
    3038BINARY = vbd
    3139
    3240SOURCES = \
     41        disk.c \
    3342        vbd.c
    3443
  • uspace/srv/bd/vbd/types/vbd.h

    r22fb7ab r28ed0d95  
    3535 */
    3636
    37 #ifndef TYPES_VBD_H_
    38 #define TYPES_VBD_H_
     37#ifndef TYPES_VBDS_H_
     38#define TYPES_VBDS_H_
    3939
     40#include <adt/list.h>
     41#include <label.h>
     42#include <loc.h>
    4043#include <types/label.h>
    4144
    4245/** Disk info */
    4346typedef struct {
     47        /** Label */
     48        label_t *label;
    4449        /** Label type */
    4550        label_type_t ltype;
    46 } vbd_disk_info_t;
     51} vbds_disk_info_t;
     52
     53/** Partition */
     54typedef struct {
     55        /** Disk this partition belongs to */
     56        struct vbds_disk *disk;
     57        /** Link to vbds_disk_t.parts */
     58        link_t ldisk;
     59        /** Label partition */
     60        label_part_t *lpart;
     61} vbds_part_t;
     62
     63/** Disk */
     64typedef struct vbds_disk {
     65        /** Link to vbds_disks */
     66        link_t ldisks;
     67        /** Service ID */
     68        service_id_t svc_id;
     69        /** Label */
     70        label_t *label;
     71        /** Partitions */
     72        list_t parts; /* of vbds_part_t */
     73} vbds_disk_t;
     74
     75typedef struct {
     76} vbds_part_info_t;
     77
     78typedef sysarg_t vbds_part_id_t;
    4779
    4880#endif
  • uspace/srv/bd/vbd/vbd.c

    r22fb7ab r28ed0d95  
    4444#include <task.h>
    4545
     46#include "disk.h"
    4647#include "types/vbd.h"
    4748
    4849#define NAME  "vbd"
    4950
    50 static void vbd_client_conn(ipc_callid_t, ipc_call_t *, void *);
    51 
    52 static int vbd_init(void)
    53 {
    54         int rc;
    55         log_msg(LOG_DEFAULT, LVL_NOTE, "vbd_init()");
    56 
    57         async_set_client_connection(vbd_client_conn);
     51static void vbds_client_conn(ipc_callid_t, ipc_call_t *, void *);
     52
     53static int vbds_init(void)
     54{
     55        int rc;
     56        log_msg(LOG_DEFAULT, LVL_NOTE, "vbds_init()");
     57
     58        vbds_disks_init();
     59
     60        async_set_client_connection(vbds_client_conn);
    5861
    5962        rc = loc_server_register(NAME);
     
    7376}
    7477
    75 static int vbd_disk_add(service_id_t sid)
    76 {
    77         log_msg(LOG_DEFAULT, LVL_NOTE, "vbd_disk_add(%zu)", sid);
    78         return EOK;
    79 }
    80 
    81 static int vbd_disk_remove(service_id_t sid)
    82 {
    83         log_msg(LOG_DEFAULT, LVL_NOTE, "vbd_disk_remove(%zu)", sid);
    84         return EOK;
    85 }
    86 
    87 static int vbd_disk_info(service_id_t sid, vbd_disk_info_t *info)
    88 {
    89         log_msg(LOG_DEFAULT, LVL_NOTE, "vbd_disk_info(%zu)", sid);
    90         info->ltype = lt_mbr;
    91         return EOK;
    92 }
    93 
    94 static int vbd_label_create(service_id_t sid, label_type_t ltype)
    95 {
    96         log_msg(LOG_DEFAULT, LVL_NOTE, "vbd_label_create(%zu, %d)", sid,
    97             ltype);
    98         return EOK;
    99 }
    100 
    101 static int vbd_label_delete(service_id_t sid, label_type_t ltype)
    102 {
    103         log_msg(LOG_DEFAULT, LVL_NOTE, "vbd_label_delete(%zu, %d)", sid,
    104             ltype);
    105         return EOK;
    106 }
    107 
    108 static void vbd_disk_add_srv(ipc_callid_t iid, ipc_call_t *icall)
    109 {
    110         service_id_t disk_sid;
    111         int rc;
    112 
    113         log_msg(LOG_DEFAULT, LVL_NOTE, "vbd_disk_add_srv()");
    114 
    115         disk_sid = IPC_GET_ARG1(*icall);
    116         rc = vbd_disk_add(disk_sid);
    117         async_answer_0(iid, (sysarg_t) rc);
    118 }
    119 
    120 static void vbd_disk_remove_srv(ipc_callid_t iid, ipc_call_t *icall)
    121 {
    122         service_id_t disk_sid;
    123         int rc;
    124 
    125         log_msg(LOG_DEFAULT, LVL_NOTE, "vbd_disk_remove_srv()");
    126 
    127         disk_sid = IPC_GET_ARG1(*icall);
    128         rc = vbd_disk_remove(disk_sid);
    129         async_answer_0(iid, (sysarg_t) rc);
    130 }
    131 
    132 static void vbd_disk_info_srv(ipc_callid_t iid, ipc_call_t *icall)
    133 {
    134         service_id_t disk_sid;
    135         vbd_disk_info_t dinfo;
    136         int rc;
    137 
    138         log_msg(LOG_DEFAULT, LVL_NOTE, "vbd_disk_info_srv()");
    139 
    140         disk_sid = IPC_GET_ARG1(*icall);
    141         rc = vbd_disk_info(disk_sid, &dinfo);
     78
     79static void vbds_disk_add_srv(ipc_callid_t iid, ipc_call_t *icall)
     80{
     81        service_id_t disk_sid;
     82        int rc;
     83
     84        log_msg(LOG_DEFAULT, LVL_NOTE, "vbds_disk_add_srv()");
     85
     86        disk_sid = IPC_GET_ARG1(*icall);
     87        rc = vbds_disk_add(disk_sid);
     88        async_answer_0(iid, (sysarg_t) rc);
     89}
     90
     91static void vbds_disk_remove_srv(ipc_callid_t iid, ipc_call_t *icall)
     92{
     93        service_id_t disk_sid;
     94        int rc;
     95
     96        log_msg(LOG_DEFAULT, LVL_NOTE, "vbds_disk_remove_srv()");
     97
     98        disk_sid = IPC_GET_ARG1(*icall);
     99        rc = vbds_disk_remove(disk_sid);
     100        async_answer_0(iid, (sysarg_t) rc);
     101}
     102
     103static void vbds_disk_info_srv(ipc_callid_t iid, ipc_call_t *icall)
     104{
     105        service_id_t disk_sid;
     106        vbds_disk_info_t dinfo;
     107        int rc;
     108
     109        log_msg(LOG_DEFAULT, LVL_NOTE, "vbds_disk_info_srv()");
     110
     111        disk_sid = IPC_GET_ARG1(*icall);
     112        rc = vbds_disk_info(disk_sid, &dinfo);
    142113        async_answer_1(iid, (sysarg_t)rc, (sysarg_t)dinfo.ltype);
    143114}
    144115
    145 static void vbd_label_create_srv(ipc_callid_t iid, ipc_call_t *icall)
     116static void vbds_label_create_srv(ipc_callid_t iid, ipc_call_t *icall)
    146117{
    147118        service_id_t disk_sid;
     
    149120        int rc;
    150121
    151         log_msg(LOG_DEFAULT, LVL_NOTE, "vbd_label_create_srv()");
     122        log_msg(LOG_DEFAULT, LVL_NOTE, "vbds_label_create_srv()");
    152123
    153124        disk_sid = IPC_GET_ARG1(*icall);
    154125        ltype = IPC_GET_ARG2(*icall);
    155         rc = vbd_label_create(disk_sid, ltype);
    156         async_answer_0(iid, (sysarg_t) rc);
    157 }
    158 
    159 static void vbd_label_delete_srv(ipc_callid_t iid, ipc_call_t *icall)
    160 {
    161         service_id_t disk_sid;
    162         label_type_t ltype;
    163         int rc;
    164 
    165         log_msg(LOG_DEFAULT, LVL_NOTE, "vbd_label_delete_srv()");
    166 
    167         disk_sid = IPC_GET_ARG1(*icall);
    168         ltype = IPC_GET_ARG2(*icall);
    169         rc = vbd_label_delete(disk_sid, ltype);
    170         async_answer_0(iid, (sysarg_t) rc);
    171 }
    172 
    173 static void vbd_client_conn(ipc_callid_t iid, ipc_call_t *icall, void *arg)
    174 {
    175         log_msg(LOG_DEFAULT, LVL_NOTE, "vbd_client_conn()");
     126        rc = vbds_label_create(disk_sid, ltype);
     127        async_answer_0(iid, (sysarg_t) rc);
     128}
     129
     130static void vbds_label_delete_srv(ipc_callid_t iid, ipc_call_t *icall)
     131{
     132        service_id_t disk_sid;
     133        int rc;
     134
     135        log_msg(LOG_DEFAULT, LVL_NOTE, "vbds_label_delete_srv()");
     136
     137        disk_sid = IPC_GET_ARG1(*icall);
     138        rc = vbds_label_delete(disk_sid);
     139        async_answer_0(iid, (sysarg_t) rc);
     140}
     141
     142static void vbds_label_get_parts_srv(ipc_callid_t iid, ipc_call_t *icall)
     143{
     144//      service_id_t disk_sid;
     145//      int rc;
     146
     147        log_msg(LOG_DEFAULT, LVL_NOTE, "vbds_label_get_parts_srv()");
     148
     149//      disk_sid = IPC_GET_ARG1(*icall);
     150//      rc = vbds_label_delete(disk_sid);
     151//      async_answer_0(iid, (sysarg_t) rc);
     152        async_answer_0(iid, ENOTSUP);
     153}
     154
     155static void vbds_part_get_info_srv(ipc_callid_t iid, ipc_call_t *icall)
     156{
     157        vbds_part_id_t part;
     158        vbds_part_info_t pinfo;
     159        int rc;
     160
     161        log_msg(LOG_DEFAULT, LVL_NOTE, "vbds_part_get_info_srv()");
     162
     163        part = IPC_GET_ARG1(*icall);
     164        rc = vbds_part_get_info(part, &pinfo);
     165        async_answer_0(iid, (sysarg_t)rc);
     166}
     167
     168static void vbds_part_create_srv(ipc_callid_t iid, ipc_call_t *icall)
     169{
     170        service_id_t disk_sid;
     171        vbds_part_id_t part;
     172        int rc;
     173
     174        log_msg(LOG_DEFAULT, LVL_NOTE, "vbds_part_create_srv()");
     175
     176        disk_sid = IPC_GET_ARG1(*icall);
     177        rc = vbds_part_create(disk_sid, &part);
     178        async_answer_1(iid, (sysarg_t)rc, (sysarg_t)part);
     179}
     180
     181static void vbds_part_delete_srv(ipc_callid_t iid, ipc_call_t *icall)
     182{
     183        vbds_part_id_t part;
     184        int rc;
     185
     186        log_msg(LOG_DEFAULT, LVL_NOTE, "vbds_part_delete_srv()");
     187
     188        part = IPC_GET_ARG1(*icall);
     189        rc = vbds_part_delete(part);
     190        async_answer_0(iid, (sysarg_t) rc);
     191}
     192
     193static void vbds_client_conn(ipc_callid_t iid, ipc_call_t *icall, void *arg)
     194{
     195        log_msg(LOG_DEFAULT, LVL_NOTE, "vbds_client_conn()");
    176196
    177197        /* Accept the connection */
     
    191211                switch (method) {
    192212                case VBD_DISK_ADD:
    193                         vbd_disk_add_srv(callid, &call);
     213                        vbds_disk_add_srv(callid, &call);
    194214                        break;
    195215                case VBD_DISK_REMOVE:
    196                         vbd_disk_remove_srv(callid, &call);
     216                        vbds_disk_remove_srv(callid, &call);
    197217                        break;
    198218                case VBD_DISK_INFO:
    199                         vbd_disk_info_srv(callid, &call);
     219                        vbds_disk_info_srv(callid, &call);
    200220                        break;
    201221                case VBD_LABEL_CREATE:
    202                         vbd_label_create_srv(callid, &call);
     222                        vbds_label_create_srv(callid, &call);
    203223                        break;
    204224                case VBD_LABEL_DELETE:
    205                         vbd_label_delete_srv(callid, &call);
     225                        vbds_label_delete_srv(callid, &call);
     226                        break;
     227                case VBD_LABEL_GET_PARTS:
     228                        vbds_label_get_parts_srv(callid, &call);
     229                        break;
     230                case VBD_PART_GET_INFO:
     231                        vbds_part_get_info_srv(callid, &call);
     232                        break;
     233                case VBD_PART_CREATE:
     234                        vbds_part_create_srv(callid, &call);
     235                        break;
     236                case VBD_PART_DELETE:
     237                        vbds_part_delete_srv(callid, &call);
    206238                        break;
    207239                default:
     
    222254        }
    223255
    224         rc = vbd_init();
     256        rc = vbds_init();
    225257        if (rc != EOK)
    226258                return 1;
Note: See TracChangeset for help on using the changeset viewer.