Changeset 8fab3f6 in mainline


Ignore:
Timestamp:
2019-08-17T13:50:05Z (5 years ago)
Author:
Matthieu Riolo <matthieu.riolo@…>
Children:
31ef7c1
Parents:
504d103
git-author:
Michal Koutný <xm.koutny+hos@…> (2015-12-04 17:21:21)
git-committer:
Matthieu Riolo <matthieu.riolo@…> (2019-08-17 13:50:05)
Message:

sysctl: Add start operation

Location:
uspace
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • uspace/app/sysctl/main.c

    r504d103 r8fab3f6  
    9797}
    9898
     99static int start(int argc, char *argv[])
     100{
     101        unit_handle_t handle;
     102        char *unit_name = argv[1];
     103
     104        int rc = sysman_unit_handle(unit_name, &handle);
     105        if (rc != EOK) {
     106                printf("Cannot obtain handle for unit '%s' (%s).\n",
     107                    unit_name, str_error(rc));
     108                return rc;
     109        }
     110
     111        rc = sysman_unit_start(handle, IPC_FLAG_BLOCKING);
     112        if (rc != EOK) {
     113                printf("Error when starting unit '%s' error (%s).\n",
     114                    unit_name, str_error(rc));
     115                return rc;
     116        }
     117
     118        return 0;
     119}
     120
    99121static int stop(int argc, char *argv[])
    100122{
     
    111133        rc = sysman_unit_stop(handle, IPC_FLAG_BLOCKING);
    112134        if (rc != EOK) {
    113                 printf("Error when stopping unit '%s' handle (%s).\n",
     135                printf("Error when stopping unit '%s' error (%s).\n",
    114136                    unit_name, str_error(rc));
    115137                return rc;
     
    121143command_t commands[] = {
    122144        { "list-units", 0, &list_units },
     145        { "start",      1, &start },
    123146        { "stop",       1, &stop },
    124147        { 0 }
     
    127150static void print_syntax(void)
    128151{
    129         printf("syntax:\n");
    130         printf("\t%s\n", NAME);
    131         // TODO update as functionality grows
     152        printf("%s commands:\n", NAME);
     153        for (command_t *it = commands; it->name != NULL; ++it) {
     154                printf("\t%s", it->name);
     155                for (int i = 0; i < it->args; ++i) {
     156                        printf(" <arg%i>", i + 1);
     157                }
     158                printf("\n");
     159        }
    132160}
    133161
  • uspace/lib/c/include/ipc/sysman.h

    r504d103 r8fab3f6  
    4646        SYSMAN_CTL_UNIT_HANDLE,
    4747        SYSMAN_CTL_UNIT_START_BY_NAME,
     48        SYSMAN_CTL_UNIT_START,
    4849        SYSMAN_CTL_UNIT_STOP,
    4950        SYSMAN_CTL_GET_UNITS,
  • uspace/lib/sysman/include/sysman/ctl.h

    r504d103 r8fab3f6  
    3636
    3737int sysman_unit_start_by_name(const char *, int);
     38int sysman_unit_start(unit_handle_t, int);
    3839int sysman_unit_stop(unit_handle_t, int);
    3940
  • uspace/lib/sysman/src/ctl.c

    r504d103 r8fab3f6  
    7878
    7979        async_wait_for(req, &rc);
     80        return rc;
     81}
     82
     83int sysman_unit_start(unit_handle_t handle, int flags)
     84{
     85        async_exch_t *exch = sysman_exchange_begin(SYSMAN_PORT_CTL);
     86
     87        int rc = async_req_2_0(exch, SYSMAN_CTL_UNIT_START, handle, flags);
     88        sysman_exchange_end(exch);
     89       
    8090        return rc;
    8191}
  • uspace/srv/sysman/connection_ctl.c

    r504d103 r8fab3f6  
    138138}
    139139
    140 static void sysman_unit_stop(ipc_callid_t iid, ipc_call_t *icall)
     140static void sysman_unit_operation(ipc_callid_t iid, ipc_call_t *icall,
     141    unit_state_t state)
    141142{
    142143        sysarg_t retval;
     
    144145        unit_handle_t handle = IPC_GET_ARG1(*icall);
    145146        int flags = IPC_GET_ARG2(*icall);
    146         sysman_log(LVL_DEBUG2, "%s(%i, %x)", __func__, handle, flags);
     147        sysman_log(LVL_DEBUG2, "%s(%i, %x, %i)", __func__, handle, flags, state);
    147148
    148149        unit_t *unit = repo_find_unit_by_handle(handle);
     
    153154
    154155        if (!(flags & IPC_FLAG_BLOCKING)) {
    155                 retval = sysman_run_job(unit, STATE_STOPPED, NULL, NULL);
     156                retval = sysman_run_job(unit, state, NULL, NULL);
    156157                goto answer;
    157158        }
     
    162163                goto answer;
    163164        }
    164         retval = sysman_run_job(unit, STATE_STOPPED, &answer_callback,
     165        retval = sysman_run_job(unit, state, &answer_callback,
    165166            iid_ptr);
    166167        if (retval != EOK) {
     
    173174answer:
    174175        async_answer_0(iid, retval);
     176}
     177
     178static void sysman_unit_start(ipc_callid_t iid, ipc_call_t *icall)
     179{
     180        sysman_unit_operation(iid, icall, STATE_STARTED);
     181}
     182
     183static void sysman_unit_stop(ipc_callid_t iid, ipc_call_t *icall)
     184{
     185        sysman_unit_operation(iid, icall, STATE_STOPPED);
    175186}
    176187
     
    289300                        sysman_unit_start_by_name(callid, &call);
    290301                        break;
     302                case SYSMAN_CTL_UNIT_START:
     303                        sysman_unit_start(callid, &call);
     304                        break;
    291305                case SYSMAN_CTL_UNIT_STOP:
    292306                        sysman_unit_stop(callid, &call);
Note: See TracChangeset for help on using the changeset viewer.