Changeset 4c6fd56 in mainline for uspace/srv/hid


Ignore:
Timestamp:
2023-09-16T19:58:18Z (2 years ago)
Author:
Jiri Svoboda <jiri@…>
Branches:
master, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
7d7f5e3
Parents:
6a0b2cc
git-author:
Jiri Svoboda <jiri@…> (2023-09-16 19:48:07)
git-committer:
Jiri Svoboda <jiri@…> (2023-09-16 19:58:18)
Message:

loc_server_register() should be callable more than once (API only)

Now loc_server_register() returns a pointer to a loc_srv_t object,
that is then passed to loc_service_register() and
loc_service_add_to_cat().

Added loc_server_unregister() that unregisters the server
and frees the loc_srv_t object.

Updated all callers. The implementation, however, is a stub.
It is not actually possible to call loc_server_register() more
than once, yet.

Location:
uspace/srv/hid
Files:
8 edited

Legend:

Unmodified
Added
Removed
  • uspace/srv/hid/console/console.c

    r6a0b2cc r4c6fd56  
    11/*
    2  * Copyright (c) 2022 Jiri Svoboda
     2 * Copyright (c) 2023 Jiri Svoboda
    33 * Copyright (c) 2011 Martin Decky
    44 * All rights reserved.
     
    8989} console_t;
    9090
     91static loc_srv_t *console_srv;
     92
    9193/** Input server proxy */
    9294static input_t *input;
     
    902904        /* Register server */
    903905        async_set_fallback_port_handler(client_connection, NULL);
    904         rc = loc_server_register(NAME);
     906        rc = loc_server_register(NAME, &console_srv);
    905907        if (rc != EOK) {
    906908                printf("%s: Unable to register server (%s)\n", NAME,
     
    952954                        snprintf(vc, LOC_NAME_MAXLEN, "%s/vc%zu", NAMESPACE, i);
    953955
    954                         if (loc_service_register(vc, &consoles[i].dsid) != EOK) {
     956                        if (loc_service_register(console_srv, vc,
     957                            &consoles[i].dsid) != EOK) {
    955958                                printf("%s: Unable to register device %s\n", NAME, vc);
    956959                                return false;
  • uspace/srv/hid/display/main.c

    r6a0b2cc r4c6fd56  
    127127        port_id_t wm_port;
    128128        port_id_t dc_port;
     129        loc_srv_t *srv = NULL;
     130        service_id_t sid = 0;
    129131        errno_t rc;
    130132
     
    171173                goto error;
    172174
    173         rc = loc_server_register(NAME);
     175        rc = loc_server_register(NAME, &srv);
    174176        if (rc != EOK) {
    175177                log_msg(LOG_DEFAULT, LVL_ERROR, "Failed registering server: %s.", str_error(rc));
     
    178180        }
    179181
    180         service_id_t sid;
    181         rc = loc_service_register(SERVICE_NAME_DISPLAY, &sid);
     182        rc = loc_service_register(srv, SERVICE_NAME_DISPLAY, &sid);
    182183        if (rc != EOK) {
    183184                log_msg(LOG_DEFAULT, LVL_ERROR, "Failed registering service: %s.", str_error(rc));
     
    189190        return EOK;
    190191error:
     192        if (sid != 0)
     193                loc_service_unregister(srv, sid);
     194        if (srv != NULL)
     195                loc_server_unregister(srv);
    191196        // XXX destroy disp_port
    192197        // XXX destroy gc_port
  • uspace/srv/hid/input/input.c

    r6a0b2cc r4c6fd56  
    11/*
    2  * Copyright (c) 2022 Jiri Svoboda
     2 * Copyright (c) 2023 Jiri Svoboda
    33 * Copyright (c) 2006 Josef Cejka
    44 * All rights reserved.
     
    878878{
    879879        errno_t rc;
     880        loc_srv_t *srv;
    880881
    881882        if (argc < 2) {
     
    901902        async_set_fallback_port_handler(client_connection, NULL);
    902903
    903         rc = loc_server_register(NAME);
     904        rc = loc_server_register(NAME, &srv);
    904905        if (rc != EOK) {
    905906                printf("%s: Unable to register server\n", NAME);
     
    908909
    909910        service_id_t service_id;
    910         rc = loc_service_register(argv[1], &service_id);
     911        rc = loc_service_register(srv, argv[1], &service_id);
    911912        if (rc != EOK) {
    912913                printf("%s: Unable to register service %s\n", NAME, argv[1]);
  • uspace/srv/hid/isdv4_tablet/main.c

    r6a0b2cc r4c6fd56  
    11/*
     2 * Copyright (c) 2023 Jiri Svoboda
    23 * Copyright (c) 2012 Martin Sucha
    34 * All rights reserved.
     
    184185        serial_t *serial;
    185186        char *serial_port_name = NULL;
     187        loc_srv_t *srv;
    186188
    187189        int arg = 1;
     
    315317
    316318        async_set_fallback_port_handler(mouse_connection, NULL);
    317         rc = loc_server_register(NAME);
     319        rc = loc_server_register(NAME, &srv);
    318320        if (rc != EOK) {
    319321                printf("%s: Unable to register driver.\n", NAME);
     
    329331        }
    330332
    331         rc = loc_service_register(service_name, &service_id);
    332         if (rc != EOK) {
     333        rc = loc_service_register(srv, service_name, &service_id);
     334        if (rc != EOK) {
     335                loc_server_unregister(srv);
    333336                printf(NAME ": Unable to register service %s.\n", service_name);
    334337                return rc;
     
    340343                printf(NAME ": Unable to get mouse category id.\n");
    341344        } else {
    342                 rc = loc_service_add_to_cat(service_id, mouse_category);
     345                rc = loc_service_add_to_cat(srv, service_id, mouse_category);
    343346                if (rc != EOK) {
    344347                        printf(NAME ": Unable to add device to mouse category.\n");
  • uspace/srv/hid/output/output.c

    r6a0b2cc r4c6fd56  
    11/*
     2 * Copyright (c) 2023 Jiri Svoboda
    23 * Copyright (c) 2011 Martin Decky
    34 * All rights reserved.
     
    468469int main(int argc, char *argv[])
    469470{
     471        loc_srv_t *srv;
     472
    470473        if (argc < 2) {
    471474                usage(argv[0]);
     
    477480        /* Register server */
    478481        async_set_fallback_port_handler(client_connection, NULL);
    479         errno_t rc = loc_server_register(NAME);
     482        errno_t rc = loc_server_register(NAME, &srv);
    480483        if (rc != EOK) {
    481484                printf("%s: Unable to register driver\n", NAME);
     
    484487
    485488        service_id_t service_id;
    486         rc = loc_service_register(argv[1], &service_id);
     489        rc = loc_service_register(srv, argv[1], &service_id);
    487490        if (rc != EOK) {
     491                loc_server_unregister(srv);
     492
    488493                printf("%s: Unable to register service %s\n", NAME, argv[1]);
    489494                return rc;
  • uspace/srv/hid/remcons/remcons.c

    r6a0b2cc r4c6fd56  
    11/*
     2 * Copyright (c) 2023 Jiri Svoboda
    23 * Copyright (c) 2012 Vojtech Horky
    34 * All rights reserved.
     
    110111};
    111112
     113static loc_srv_t *remcons_srv;
     114
    112115static telnet_user_t *srv_to_user(con_srv_t *srv)
    113116{
     
    301304        telnet_user_add(user);
    302305
    303         errno_t rc = loc_service_register(user->service_name, &user->service_id);
     306        errno_t rc = loc_service_register(remcons_srv, user->service_name,
     307            &user->service_id);
    304308        if (rc != EOK) {
    305309                telnet_user_error(user, "Unable to register %s with loc: %s.",
     
    332336        fibril_mutex_unlock(&user->guard);
    333337
    334         rc = loc_service_unregister(user->service_id);
     338        rc = loc_service_unregister(remcons_srv, user->service_id);
    335339        if (rc != EOK) {
    336340                telnet_user_error(user,
     
    351355
    352356        async_set_fallback_port_handler(client_connection, NULL);
    353         rc = loc_server_register(NAME);
     357        rc = loc_server_register(NAME, &remcons_srv);
    354358        if (rc != EOK) {
    355359                fprintf(stderr, "%s: Unable to register server\n", NAME);
  • uspace/srv/hid/rfb/main.c

    r6a0b2cc r4c6fd56  
    11/*
    2  * Copyright (c) 2021 Jiri Svoboda
     2 * Copyright (c) 2023 Jiri Svoboda
    33 * Copyright (c) 2013 Martin Sucha
    44 * All rights reserved.
     
    443443{
    444444        rfb_t rfb;
     445        loc_srv_t *srv;
    445446
    446447        log_init(NAME);
     
    482483        async_set_fallback_port_handler(client_connection, &rfb);
    483484
    484         errno_t rc = loc_server_register(NAME);
     485        errno_t rc = loc_server_register(NAME, &srv);
    485486        if (rc != EOK) {
    486487                printf("%s: Unable to register server.\n", NAME);
     
    497498        service_id_t service_id;
    498499
    499         rc = loc_service_register(service_name, &service_id);
     500        rc = loc_service_register(srv, service_name, &service_id);
    500501        if (rc != EOK) {
    501502                printf(NAME ": Unable to register service %s.\n", service_name);
     
    512513        }
    513514
    514         rc = loc_service_add_to_cat(service_id, ddev_cid);
     515        rc = loc_service_add_to_cat(srv, service_id, ddev_cid);
    515516        if (rc != EOK) {
    516517                fprintf(stderr, NAME ": Unable to add service to display device category.\n");
  • uspace/srv/hid/s3c24xx_ts/s3c24xx_ts.c

    r6a0b2cc r4c6fd56  
    11/*
    2  * Copyright (c) 2010 Jiri Svoboda
     2 * Copyright (c) 2023 Jiri Svoboda
    33 * All rights reserved.
    44 *
     
    8181int main(int argc, char *argv[])
    8282{
     83        loc_srv_t *srv;
     84
    8385        printf("%s: S3C24xx touchscreen driver\n", NAME);
    8486
    8587        async_set_fallback_port_handler(s3c24xx_ts_connection, NULL);
    86         errno_t rc = loc_server_register(NAME);
     88        errno_t rc = loc_server_register(NAME, &srv);
    8789        if (rc != EOK) {
    8890                printf("%s: Unable to register driver.\n", NAME);
     
    9193
    9294        ts = malloc(sizeof(s3c24xx_ts_t));
    93         if (ts == NULL)
     95        if (ts == NULL) {
     96                loc_server_unregister(srv);
    9497                return -1;
    95 
    96         if (s3c24xx_ts_init(ts) != EOK)
     98        }
     99
     100        if (s3c24xx_ts_init(ts) != EOK) {
     101                free(ts);
     102                loc_server_unregister(srv);
    97103                return -1;
    98 
    99         rc = loc_service_register(NAMESPACE "/mouse", &ts->service_id);
     104        }
     105
     106        rc = loc_service_register(srv, NAMESPACE "/mouse", &ts->service_id);
    100107        if (rc != EOK) {
     108                // XXX s3c24xx_ts_fini();
     109                free(ts);
     110                loc_server_unregister(srv);
    101111                printf(NAME ": Unable to register device %s.\n",
    102112                    NAMESPACE "/mouse");
Note: See TracChangeset for help on using the changeset viewer.