Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • uspace/lib/drv/generic/driver.c

    r8300c72 rfafb8e5  
    11/*
    2  * Copyright (c) 2025 Jiri Svoboda
    32 * Copyright (c) 2010 Lenka Trochtova
     3 * Copyright (c) 2011 Jiri Svoboda
    44 * All rights reserved.
    55 *
     
    237237}
    238238
    239 static void driver_dev_quiesce(ipc_call_t *icall)
    240 {
    241         devman_handle_t devh = ipc_get_arg1(icall);
    242         ddf_fun_t *fun;
    243         link_t *link;
    244 
    245         fibril_mutex_lock(&devices_mutex);
    246         ddf_dev_t *dev = driver_get_device(devh);
    247         if (dev != NULL)
    248                 dev_add_ref(dev);
    249         fibril_mutex_unlock(&devices_mutex);
    250 
    251         if (dev == NULL) {
    252                 async_answer_0(icall, ENOENT);
    253                 return;
    254         }
    255 
    256         errno_t rc;
    257 
    258         if (driver->driver_ops->dev_quiesce != NULL) {
    259                 rc = driver->driver_ops->dev_quiesce(dev);
    260         } else {
    261                 /*
    262                  * If the driver does not implement quiesce, we will
    263                  * simply request all subordinate functions to quiesce.
    264                  */
    265                 fibril_mutex_lock(&functions_mutex);
    266                 link = list_first(&functions);
    267                 while (link != NULL) {
    268                         fun = list_get_instance(link, ddf_fun_t, link);
    269                         if (fun->dev == dev)
    270                                 ddf_fun_quiesce(fun);
    271                         link = list_next(link, &functions);
    272                 }
    273                 fibril_mutex_unlock(&functions_mutex);
    274                 rc = EOK;
    275         }
    276 
    277         dev_del_ref(dev);
    278         async_answer_0(icall, rc);
    279 }
    280 
    281239static void driver_fun_online(ipc_call_t *icall)
    282240{
     
    399357                case DRIVER_DEV_GONE:
    400358                        driver_dev_gone(&call);
    401                         break;
    402                 case DRIVER_DEV_QUIESCE:
    403                         driver_dev_quiesce(&call);
    404359                        break;
    405360                case DRIVER_FUN_ONLINE:
     
    948903}
    949904
    950 /** Quiesce function.
    951  *
    952  * @param fun Function to quiesce
    953  *
    954  * @return EOK on success or an error code
    955  *
    956  */
    957 errno_t ddf_fun_quiesce(ddf_fun_t *fun)
    958 {
    959         assert(fun->bound == true);
    960 
    961         errno_t res = devman_drv_fun_quiesce(fun->handle);
    962         if (res != EOK)
    963                 return res;
    964 
    965         return EOK;
    966 }
    967 
    968905/** Add single match ID to inner function.
    969906 *
     
    1032969
    1033970        return devman_add_device_to_category(fun->handle, cat_name);
    1034 }
    1035 
    1036 /** Wait for function to enter stable state.
    1037  *
    1038  * @param fun Function
    1039  * @return EOK on success or an error code
    1040  */
    1041 errno_t ddf_fun_wait_stable(ddf_fun_t *fun)
    1042 {
    1043         return devman_drv_fun_wait_stable(fun->handle);
    1044971}
    1045972
Note: See TracChangeset for help on using the changeset viewer.