source: mainline/uspace/lib/device/include/devman.h@ f35749e

Last change on this file since f35749e was 832cbe7, checked in by Jiri Svoboda <jiri@…>, 5 months ago

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).

  • Property mode set to 100644
File size: 3.8 KB
RevLine 
[729fa2d6]1/*
[832cbe7]2 * Copyright (c) 2025 Jiri Svoboda
[1b20da0]3 * Copyright (c) 2010 Lenka Trochtova
[729fa2d6]4 * All rights reserved.
5 *
6 * Redistribution and use in source and binary forms, with or without
7 * modification, are permitted provided that the following conditions
8 * are met:
9 *
10 * - Redistributions of source code must retain the above copyright
11 * notice, this list of conditions and the following disclaimer.
12 * - Redistributions in binary form must reproduce the above copyright
13 * notice, this list of conditions and the following disclaimer in the
14 * documentation and/or other materials provided with the distribution.
15 * - The name of the author may not be used to endorse or promote products
16 * derived from this software without specific prior written permission.
17 *
18 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
19 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
20 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
21 * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
22 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
23 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
24 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
25 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
26 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
27 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28 */
29
[edeee9f]30/** @addtogroup libdevice
[729fa2d6]31 * @{
32 */
33/** @file
34 */
35
[edeee9f]36#ifndef LIBDEVICE_DEVMAN_H
37#define LIBDEVICE_DEVMAN_H
[729fa2d6]38
39#include <ipc/devman.h>
[e280857]40#include <ipc/loc.h>
[729fa2d6]41#include <async.h>
[3e6a98c5]42#include <stdbool.h>
[729fa2d6]43
[f9b2cb4c]44extern async_exch_t *devman_exchange_begin_blocking(iface_t);
45extern async_exch_t *devman_exchange_begin(iface_t);
[79ae36dd]46extern void devman_exchange_end(async_exch_t *);
[7707954]47
[b7fd2a0]48extern errno_t devman_driver_register(const char *);
49extern errno_t devman_add_function(const char *, fun_type_t, match_id_list_t *,
[c63e70c]50 devman_handle_t, devman_handle_t *);
[b7fd2a0]51extern errno_t devman_remove_function(devman_handle_t);
52extern errno_t devman_drv_fun_online(devman_handle_t);
53extern errno_t devman_drv_fun_offline(devman_handle_t);
[832cbe7]54extern errno_t devman_drv_fun_wait_stable(devman_handle_t);
[729fa2d6]55
[f9b2cb4c]56extern async_sess_t *devman_device_connect(devman_handle_t, unsigned int);
57extern async_sess_t *devman_parent_device_connect(devman_handle_t,
[79ae36dd]58 unsigned int);
[5cd136ab]59
[b7fd2a0]60extern errno_t devman_fun_get_handle(const char *, devman_handle_t *,
[c63e70c]61 unsigned int);
[b7fd2a0]62extern errno_t devman_fun_get_child(devman_handle_t, devman_handle_t *);
63extern errno_t devman_dev_get_parent(devman_handle_t, devman_handle_t *);
64extern errno_t devman_dev_get_functions(devman_handle_t, devman_handle_t **,
[7beb220]65 size_t *);
[b7fd2a0]66extern errno_t devman_fun_get_match_id(devman_handle_t, size_t, char *, size_t,
[4c9b28a]67 unsigned int *);
[b7fd2a0]68extern errno_t devman_fun_get_name(devman_handle_t, char *, size_t);
69extern errno_t devman_fun_get_driver_name(devman_handle_t, char *, size_t);
70extern errno_t devman_fun_get_path(devman_handle_t, char *, size_t);
71extern errno_t devman_fun_online(devman_handle_t);
72extern errno_t devman_fun_offline(devman_handle_t);
[f658458]73
[b7fd2a0]74extern errno_t devman_add_device_to_category(devman_handle_t, const char *);
75extern errno_t devman_fun_sid_to_handle(service_id_t, devman_handle_t *);
76extern errno_t devman_get_drivers(devman_handle_t **, size_t *);
77extern errno_t devman_driver_get_devices(devman_handle_t, devman_handle_t **,
[1db5669]78 size_t *);
[b7fd2a0]79extern errno_t devman_driver_get_handle(const char *, devman_handle_t *);
80extern errno_t devman_driver_get_match_id(devman_handle_t, size_t, char *, size_t,
[4c9b28a]81 unsigned int *);
[b7fd2a0]82extern errno_t devman_driver_get_name(devman_handle_t, char *, size_t);
83extern errno_t devman_driver_get_state(devman_handle_t, driver_state_t *);
84extern errno_t devman_driver_load(devman_handle_t);
85extern errno_t devman_driver_unload(devman_handle_t);
[729fa2d6]86
87#endif
88
89/** @}
90 */
Note: See TracBrowser for help on using the repository browser.