Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • uspace/drv/block/isa-ide/main.c

    r443695e r832cbe7  
    11/*
    2  * Copyright (c) 2024 Jiri Svoboda
     2 * Copyright (c) 2025 Jiri Svoboda
    33 * All rights reserved.
    44 *
     
    4343
    4444#include "isa-ide.h"
     45#include "isa-ide_hw.h"
    4546#include "main.h"
    4647
     
    7071        async_sess_t *parent_sess;
    7172        hw_res_list_parsed_t hw_res;
    72         hw_res_flags_t flags;
     73        hw_res_claims_t claims;
    7374        errno_t rc;
    7475
     
    7778                return ENOMEM;
    7879
    79         rc = hw_res_get_flags(parent_sess, &flags);
    80         if (rc != EOK)
    81                 return rc;
    82 
    83         /*
    84          * Prevent attaching to the legacy ISA IDE register block
    85          * on a system with PCI not to conflict with PCI IDE.
    86          *
    87          * XXX This is a simplification. If we had a PCI-based system without
    88          * PCI-IDE or with PCI-IDE disabled and would still like to use
    89          * an ISA IDE controller, this would prevent us from doing so.
    90          */
    91         if (flags & hwf_isa_bridge) {
    92                 ddf_msg(LVL_NOTE, "Will not attach to PCI/ISA bridge.");
    93                 return EIO;
     80        rc = hw_res_query_legacy_io(parent_sess, &claims);
     81        if (rc != EOK) {
     82                ddf_msg(LVL_NOTE, "Error getting HW resource flags.");
     83                return rc;
    9484        }
    9585
    9686        hw_res_list_parsed_init(&hw_res);
    9787        rc = hw_res_get_list_parsed(parent_sess, &hw_res, 0);
    98         if (rc != EOK)
    99                 return rc;
     88        if (rc != EOK) {
     89                ddf_msg(LVL_NOTE, "Error getting HW resource list.");
     90                return rc;
     91        }
    10092
    10193        if (hw_res.io_ranges.count != 4) {
     
    148140        }
    149141
     142        /*
     143         * Only attach to legacy ISA IDE register block if it
     144         * is not claimed by PCI IDE driver.
     145         */
     146        if (res->cmd1 == leg_ide_ata_cmd_p &&
     147            res->cmd2 == leg_ide_ata_cmd_s &&
     148            (claims & hwc_isa_ide) != 0) {
     149                ddf_msg(LVL_NOTE, "Will not attach to ISA legacy ports "
     150                    "since they are already handled by PCI.");
     151                return EBUSY;
     152        }
     153
    150154        return EOK;
    151155error:
     
    167171        rc = isa_ide_get_res(dev, &res);
    168172        if (rc != EOK) {
    169                 ddf_msg(LVL_ERROR, "Invalid HW resource configuration.");
     173                if (rc == EINVAL)
     174                        ddf_msg(LVL_ERROR, "Invalid HW resource configuration.");
    170175                return EINVAL;
    171176        }
Note: See TracChangeset for help on using the changeset viewer.