Changeset 7acd787 in mainline for uspace/drv/bus


Ignore:
Timestamp:
2019-01-03T00:53:50Z (7 years ago)
Author:
Jiri Svoboda <jiri@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
b9f1585, c477c80
Parents:
ca645a2
git-author:
Jiri Svoboda <jiri@…> (2019-01-03 00:48:00)
git-committer:
Jiri Svoboda <jiri@…> (2019-01-03 00:53:50)
Message:

Utility for listing PCI devices

Currently all information presented can also be gathered from devctl -v,
although 'pci' prints it in a nice compact format. Ability to print
more information, including information not available from devctl,
can be added later.

Location:
uspace/drv/bus/pci/pciintel
Files:
2 added
3 edited

Legend:

Unmodified
Added
Removed
  • uspace/drv/bus/pci/pciintel/Makefile

    rca645a2 r7acd787  
    3232
    3333SOURCES = \
     34        ctl.c \
    3435        pci.c
    3536
  • uspace/drv/bus/pci/pciintel/pci.c

    rca645a2 r7acd787  
    11/*
     2 * Copyright (c) 2019 Jiri Svoboda
    23 * Copyright (c) 2010 Lenka Trochtova
    3  * Copyright (c) 2018 Jiri Svoboda
    44 * All rights reserved.
    55 *
     
    5858#include <pci_dev_iface.h>
    5959
     60#include "ctl.h"
    6061#include "pci.h"
     62#include "pci_regs.h"
    6163
    6264#define NAME "pciintel"
     
    7375
    7476/** Obtain PCI bus soft-state from DDF device node */
    75 #if 0
    76 static pci_bus_t *pci_bus(ddf_dev_t *dnode)
     77pci_bus_t *pci_bus(ddf_dev_t *dnode)
    7778{
    7879        return ddf_dev_data_get(dnode);
    7980}
    80 #endif
    8181
    8282/** Obtain PCI bus soft-state from function soft-state */
     
    448448
    449449        /* TODO add subsys ids, but those exist only in header type 0 */
     450}
     451
     452/** Get first PCI function.
     453 *
     454 * @param bus PCI bus
     455 * @return First PCI function on @a bus or @c NULL if there is none
     456 */
     457pci_fun_t *pci_fun_first(pci_bus_t *bus)
     458{
     459        link_t *link;
     460
     461        link = list_first(&bus->funs);
     462        if (link == NULL)
     463                return NULL;
     464
     465        return list_get_instance(link, pci_fun_t, lfuns);
     466}
     467
     468/** Get next PCI function.
     469 *
     470 * @param cur Current function
     471 * @return Next PCI function on the same bus or @c NULL if there is none
     472 */
     473pci_fun_t *pci_fun_next(pci_fun_t *cur)
     474{
     475        link_t *link;
     476
     477        link = list_next(&cur->lfuns, &cur->busptr->funs);
     478        if (link == NULL)
     479                return NULL;
     480
     481        return list_get_instance(link, pci_fun_t, lfuns);
    450482}
    451483
     
    691723                                continue;
    692724                        }
     725
     726                        list_append(&fun->lfuns, &bus->funs);
    693727                }
    694728        }
     
    718752                goto fail;
    719753        }
     754
     755        list_initialize(&bus->funs);
    720756        fibril_mutex_initialize(&bus->conf_mutex);
    721757
     
    802838        }
    803839
     840        ddf_fun_set_conn_handler(ctl, pci_ctl_connection);
     841
    804842        /* Enumerate functions. */
    805843        ddf_msg(LVL_DEBUG, "Enumerating the bus");
     
    816854        }
    817855
     856        rc = ddf_fun_add_to_category(ctl, "pci");
     857        if (rc != EOK) {
     858                ddf_msg(LVL_ERROR, "Failed adding control function to category "
     859                    "'pci'.");
     860                goto fail;
     861        }
     862
    818863        hw_res_clean_resource_list(&hw_resources);
    819864
  • uspace/drv/bus/pci/pciintel/pci.h

    rca645a2 r7acd787  
    3737#define PCI_H_
    3838
     39#include <adt/list.h>
     40#include <ddi.h>
    3941#include <ddf/driver.h>
    40 #include "pci_regs.h"
     42#include <fibril_synch.h>
    4143
    4244#define PCI_MAX_HW_RES 10
     
    5052        pio_window_t pio_win;
    5153        fibril_mutex_t conf_mutex;
     54        /** List of functions (of pci_fun_t) */
     55        list_t funs;
    5256} pci_bus_t;
    5357
     
    5559        pci_bus_t *busptr;
    5660        ddf_fun_t *fnode;
     61        /** Link to @c busptr->funs */
     62        link_t lfuns;
    5763
    5864        int bus;
     
    7177} pci_fun_t;
    7278
     79extern pci_bus_t *pci_bus(ddf_dev_t *);
     80
    7381extern void pci_fun_create_match_ids(pci_fun_t *);
     82extern pci_fun_t *pci_fun_first(pci_bus_t *);
     83extern pci_fun_t *pci_fun_next(pci_fun_t *);
    7484
    7585extern uint8_t pci_conf_read_8(pci_fun_t *, int);
Note: See TracChangeset for help on using the changeset viewer.