Changeset 832cbe7 in mainline for uspace/lib/c/include/device/hw_res.h


Ignore:
Timestamp:
2025-02-05T12:30:20Z (7 days ago)
Author:
Jiri Svoboda <jiri@…>
Branches:
master
Children:
accdf882
Parents:
0dab4850
git-author:
Jiri Svoboda <jiri@…> (2025-02-04 21:30:06)
git-committer:
Jiri Svoboda <jiri@…> (2025-02-05 12:30:20)
Message:

Add proper IDE PCI to ISA fallback mechanism.

To determine if legacy IDE I/O ports are free, isa-ide asks isa,
who asks pciintel. pciintel waits for bus enumeration to complete,
then waits for all functions except the one who is asking
(which is ISA bus) to stabilize. During attach pci-ide will claim
the legacy IDE ports. Thus, if at this point legacy IDE ports
are unclaimed, pciintel tells ISA they are free, which tells isa-ide,
which continues to attach. If they are not free, isa-ide will not
attach.

This works for all use cases, including system without PCI bus,
system with PCI bus, but no (or disabled) PCI IDE, system with PCI
IDE with unrecognized VID/PID (which we will handle in legacy ISA mode).

File:
1 edited

Legend:

Unmodified
Added
Removed
  • uspace/lib/c/include/device/hw_res.h

    r0dab4850 r832cbe7  
    11/*
    2  * Copyright (c) 2024 Jiri Svoboda
     2 * Copyright (c) 2025 Jiri Svoboda
    33 * Copyright (c) 2010 Lenka Trochtova
    44 * All rights reserved.
     
    5757        HW_RES_DMA_CHANNEL_SETUP,
    5858        HW_RES_DMA_CHANNEL_REMAIN,
    59         HW_RES_GET_FLAGS
     59        HW_RES_QUERY_LEGACY_IO,
     60        HW_RES_CLAIM_LEGACY_IO
    6061} hw_res_method_t;
    6162
     
    118119}
    119120
     121/** Claims to legacy devices */
    120122typedef enum {
    121         /** This is an PCI/ISA bridge, not 'classic' ISA bus */
    122         hwf_isa_bridge = 0x1
    123 } hw_res_flags_t;
     123        /** 'Legacy' ISA IDE I/O ranges */
     124        hwc_isa_ide = 0x1
     125} hw_res_claims_t;
    124126
    125127extern errno_t hw_res_get_resource_list(async_sess_t *, hw_resource_list_t *);
     
    131133    uint32_t, uint8_t);
    132134extern errno_t hw_res_dma_channel_remain(async_sess_t *, unsigned, size_t *);
    133 extern errno_t hw_res_get_flags(async_sess_t *, hw_res_flags_t *);
     135extern errno_t hw_res_query_legacy_io(async_sess_t *, hw_res_claims_t *);
     136extern errno_t hw_res_claim_legacy_io(async_sess_t *, hw_res_claims_t);
    134137
    135138#endif
Note: See TracChangeset for help on using the changeset viewer.