Changeset 2791fbb7 in mainline for uspace/drv/block/ata_bd/main.c


Ignore:
Timestamp:
2024-05-16T16:17:49Z (9 months ago)
Author:
Jiri Svoboda <jiri@…>
Branches:
master
Children:
59c0f478
Parents:
64cf7a3
Message:

Move generic ATA code out to libata

File:
1 edited

Legend:

Unmodified
Added
Removed
  • uspace/drv/block/ata_bd/main.c

    r64cf7a3 r2791fbb7  
    157157}
    158158
    159 static char *ata_fun_name(disk_t *disk)
     159static char *ata_fun_name(unsigned idx)
    160160{
    161161        char *fun_name;
    162162
    163         if (asprintf(&fun_name, "d%u", disk->disk_id) < 0)
     163        if (asprintf(&fun_name, "d%u", idx) < 0)
    164164                return NULL;
    165165
     
    167167}
    168168
    169 errno_t ata_fun_create(disk_t *disk)
    170 {
    171         ata_ctrl_t *ctrl = disk->ctrl;
     169errno_t ata_fun_create(ata_ctrl_t *ctrl, unsigned idx, void *charg)
     170{
    172171        errno_t rc;
    173172        char *fun_name = NULL;
     
    176175        bool bound = false;
    177176
    178         fun_name = ata_fun_name(disk);
     177        fun_name = ata_fun_name(idx);
    179178        if (fun_name == NULL) {
    180179                ddf_msg(LVL_ERROR, "Out of memory.");
     
    199198
    200199        afun->fun = fun;
    201         afun->disk = disk;
    202 
    203         bd_srvs_init(&afun->bds);
    204         afun->bds.ops = &ata_bd_ops;
    205         afun->bds.sarg = disk;
     200        afun->charg = charg;
    206201
    207202        /* Set up a connection handler. */
     
    225220
    226221        free(fun_name);
    227         disk->afun = afun;
    228222        return EOK;
    229223error:
     
    238232}
    239233
    240 errno_t ata_fun_remove(disk_t *disk)
     234errno_t ata_fun_remove(ata_ctrl_t *ctrl, unsigned idx)
    241235{
    242236        errno_t rc;
    243237        char *fun_name;
    244 
    245         if (disk->afun == NULL)
    246                 return EOK;
    247 
    248         fun_name = ata_fun_name(disk);
     238        ata_fun_t *afun = ctrl->fun[idx];
     239
     240        fun_name = ata_fun_name(idx);
    249241        if (fun_name == NULL) {
    250242                ddf_msg(LVL_ERROR, "Out of memory.");
     
    253245        }
    254246
    255         ddf_msg(LVL_DEBUG, "ata_fun_remove(%p, '%s')", disk, fun_name);
    256         rc = ddf_fun_offline(disk->afun->fun);
     247        ddf_msg(LVL_DEBUG, "ata_fun_remove(%p, '%s')", afun, fun_name);
     248        rc = ddf_fun_offline(afun->fun);
    257249        if (rc != EOK) {
    258250                ddf_msg(LVL_ERROR, "Error offlining function '%s'.", fun_name);
     
    260252        }
    261253
    262         rc = ddf_fun_unbind(disk->afun->fun);
     254        rc = ddf_fun_unbind(afun->fun);
    263255        if (rc != EOK) {
    264256                ddf_msg(LVL_ERROR, "Failed unbinding function '%s'.", fun_name);
     
    266258        }
    267259
    268         ddf_fun_destroy(disk->afun->fun);
    269         disk->afun = NULL;
     260        ddf_fun_destroy(afun->fun);
    270261        free(fun_name);
    271262        return EOK;
     
    276267}
    277268
    278 errno_t ata_fun_unbind(disk_t *disk)
     269errno_t ata_fun_unbind(ata_ctrl_t *ctrl, unsigned idx)
    279270{
    280271        errno_t rc;
    281272        char *fun_name;
    282 
    283         if (disk->afun == NULL)
    284                 return EOK;
    285 
    286         fun_name = ata_fun_name(disk);
     273        ata_fun_t *afun = ctrl->fun[idx];
     274
     275        fun_name = ata_fun_name(idx);
    287276        if (fun_name == NULL) {
    288277                ddf_msg(LVL_ERROR, "Out of memory.");
     
    291280        }
    292281
    293         ddf_msg(LVL_DEBUG, "ata_fun_unbind(%p, '%s')", disk, fun_name);
    294         rc = ddf_fun_unbind(disk->afun->fun);
     282        ddf_msg(LVL_DEBUG, "ata_fun_unbind(%p, '%s')", afun, fun_name);
     283        rc = ddf_fun_unbind(afun->fun);
    295284        if (rc != EOK) {
    296285                ddf_msg(LVL_ERROR, "Failed unbinding function '%s'.", fun_name);
     
    298287        }
    299288
    300         ddf_fun_destroy(disk->afun->fun);
    301         disk->afun = NULL;
     289        ddf_fun_destroy(afun->fun);
    302290        free(fun_name);
    303291        return EOK;
     
    338326}
    339327
    340 /** Block device connection handler */
    341328static void ata_bd_connection(ipc_call_t *icall, void *arg)
    342329{
     
    344331
    345332        afun = (ata_fun_t *) ddf_fun_data_get((ddf_fun_t *)arg);
    346         bd_conn(icall, &afun->bds);
     333        ata_connection(icall, afun->charg);
    347334}
    348335
Note: See TracChangeset for help on using the changeset viewer.