Changeset dc5c303 in mainline for uspace/srv/hid/display/cfgops.c


Ignore:
Timestamp:
2023-12-28T13:59:23Z (15 months ago)
Author:
GitHub <noreply@…>
Children:
6b66de6b
Parents:
42c2e65 (diff), f87ff8e (diff)
Note: this is a merge changeset, the changes displayed below correspond to the merge itself.
Use the (diff) links above to see all the changes relative to each parent.
git-author:
boba-buba <120932204+boba-buba@…> (2023-12-28 13:59:23)
git-committer:
GitHub <noreply@…> (2023-12-28 13:59:23)
Message:

Merge branch 'master' into topic/packet-capture

File:
1 edited

Legend:

Unmodified
Added
Removed
  • uspace/srv/hid/display/cfgops.c

    r42c2e65 rdc5c303  
    5050static errno_t dispc_dev_assign(void *, sysarg_t, sysarg_t);
    5151static errno_t dispc_dev_unassign(void *, sysarg_t);
     52static errno_t dispc_get_asgn_dev_list(void *, sysarg_t, dispcfg_dev_list_t **);
    5253static errno_t dispc_get_event(void *, dispcfg_ev_t *);
    5354
     
    5960        .dev_assign = dispc_dev_assign,
    6061        .dev_unassign = dispc_dev_unassign,
     62        .get_asgn_dev_list = dispc_get_asgn_dev_list,
    6163        .get_event = dispc_get_event,
    6264};
     
    195197        ds_cfgclient_t *cfgclient = (ds_cfgclient_t *)arg;
    196198        ds_seat_t *seat;
     199        ds_seat_t *s;
    197200
    198201        log_msg(LOG_DEFAULT, LVL_DEBUG, "dispcfg_seat_delete()");
     
    203206                ds_display_unlock(cfgclient->display);
    204207                return ENOENT;
     208        }
     209
     210        /* Verify we are not deleting the last seat */
     211        s = ds_display_first_seat(cfgclient->display);
     212        if (s == seat && ds_display_next_seat(s) == NULL) {
     213                ds_display_unlock(cfgclient->display);
     214                return EBUSY;
    205215        }
    206216
     
    281291}
    282292
     293/** Get assigned device list.
     294 *
     295 * @param arg Argument (CFG client)
     296 * @param seat_id Seat ID
     297 * @param rlist Place to store pointer to new list
     298 * @return EOK on success or an error code
     299 */
     300static errno_t dispc_get_asgn_dev_list(void *arg, sysarg_t seat_id,
     301    dispcfg_dev_list_t **rlist)
     302{
     303        ds_cfgclient_t *cfgclient = (ds_cfgclient_t *)arg;
     304        dispcfg_dev_list_t *list;
     305        ds_seat_t *seat;
     306        ds_idevcfg_t *idevcfg;
     307        unsigned i;
     308
     309        log_msg(LOG_DEFAULT, LVL_DEBUG, "dispcfg_get_asgn_dev_list()");
     310
     311        list = calloc(1, sizeof(dispcfg_dev_list_t));
     312        if (list == NULL)
     313                return ENOMEM;
     314
     315        ds_display_lock(cfgclient->display);
     316
     317        seat = ds_display_find_seat(cfgclient->display, seat_id);
     318        if (seat == NULL) {
     319                ds_display_unlock(cfgclient->display);
     320                free(list);
     321                return ENOENT;
     322        }
     323
     324        /* Count the number of devices */
     325        list->ndevs = 0;
     326        idevcfg = ds_seat_first_idevcfg(seat);
     327        while (idevcfg != NULL) {
     328                ++list->ndevs;
     329                idevcfg = ds_display_next_idevcfg(idevcfg);
     330        }
     331
     332        /* Allocate array for device IDs */
     333        list->devs = calloc(list->ndevs, sizeof(sysarg_t));
     334        if (list->devs == NULL) {
     335                ds_display_unlock(cfgclient->display);
     336                free(list);
     337                return ENOMEM;
     338        }
     339
     340        /* Fill in device IDs */
     341        i = 0;
     342        idevcfg = ds_seat_first_idevcfg(seat);
     343        while (idevcfg != NULL) {
     344                list->devs[i++] = idevcfg->svc_id;
     345                idevcfg = ds_display_next_idevcfg(idevcfg);
     346        }
     347
     348        ds_display_unlock(cfgclient->display);
     349        *rlist = list;
     350        return EOK;
     351}
     352
    283353/** Get display configuration event.
    284354 *
Note: See TracChangeset for help on using the changeset viewer.