FreeBSD kernel usb device Code
usb_hub_acpi.c File Reference
#include <sys/stdint.h>
#include <sys/stddef.h>
#include <sys/param.h>
#include <sys/queue.h>
#include <sys/types.h>
#include <sys/systm.h>
#include <sys/kernel.h>
#include <sys/bus.h>
#include <sys/module.h>
#include <sys/lock.h>
#include <sys/mutex.h>
#include <sys/condvar.h>
#include <sys/sysctl.h>
#include <sys/sx.h>
#include <sys/unistd.h>
#include <sys/callout.h>
#include <sys/malloc.h>
#include <sys/priv.h>
#include <dev/usb/usb.h>
#include <dev/usb/usbdi.h>
#include <dev/usb/usbdi_util.h>
#include <dev/usb/usb_core.h>
#include <dev/usb/usb_process.h>
#include <dev/usb/usb_device.h>
#include <dev/usb/usb_request.h>
#include <dev/usb/usb_debug.h>
#include <dev/usb/usb_hub.h>
#include <dev/usb/usb_util.h>
#include <dev/usb/usb_busdma.h>
#include <dev/usb/usb_transfer.h>
#include <dev/usb/usb_dynamic.h>
#include <dev/usb/usb_controller.h>
#include <dev/usb/usb_bus.h>
#include <dev/usb/usb_hub_private.h>
#include <contrib/dev/acpica/include/acpi.h>
#include <contrib/dev/acpica/include/accommon.h>
#include <dev/acpica/acpivar.h>
#include <sys/sbuf.h>
Include dependency graph for usb_hub_acpi.c:

Go to the source code of this file.

Data Structures

struct  acpi_uhub_port
 
struct  acpi_uhub_softc
 

Macros

#define USB_DEBUG_VAR   uhub_debug
 
#define ACPI_PLD_SIZE   20
 
#define ACPI_UPC_CONNECTABLE   0x80000000
 
#define ACPI_UPC_PORTTYPE(x)   ((x)&0xff)
 

Functions

static UINT32 acpi_uhub_find_rh_cb (ACPI_HANDLE ah, UINT32 nl, void *ctx, void **status)
 
static const char * acpi_uhub_upc_type (uint8_t type)
 
static int acpi_uhub_parse_upc (device_t dev, unsigned int p, ACPI_HANDLE ah, struct sysctl_oid_list *poid)
 
static int acpi_uhub_port_sysctl (SYSCTL_HANDLER_ARGS)
 
static int acpi_uhub_parse_pld (device_t dev, unsigned int p, ACPI_HANDLE ah, struct sysctl_oid_list *tree)
 
static ACPI_STATUS acpi_uhub_find_rh (device_t dev, ACPI_HANDLE *ah)
 
static ACPI_STATUS acpi_usb_hub_port_probe_cb (ACPI_HANDLE ah, UINT32 lv, void *ctx, void **rv)
 
static ACPI_STATUS acpi_usb_hub_port_probe (device_t dev, ACPI_HANDLE ah)
 
static int acpi_uhub_root_probe (device_t dev)
 
static int acpi_uhub_probe (device_t dev)
 
static int acpi_uhub_attach_common (device_t dev)
 
static int acpi_uhub_detach (device_t dev)
 
static int acpi_uhub_root_attach (device_t dev)
 
static int acpi_uhub_attach (device_t dev)
 
static int acpi_uhub_read_ivar (device_t dev, device_t child, int idx, uintptr_t *res)
 
static int acpi_uhub_child_location (device_t parent, device_t child, struct sbuf *sb)
 
static int acpi_uhub_get_device_path (device_t bus, device_t child, const char *locator, struct sbuf *sb)
 
 DRIVER_MODULE (uacpi, uhub, acpi_uhub_driver, uhub_devclass, 0, 0)
 
 DRIVER_MODULE (uacpi, usbus, acpi_uhub_root_driver, uhub_devclass, 0, 0)
 
 MODULE_DEPEND (uacpi, acpi, 1, 1, 1)
 
 MODULE_DEPEND (uacpi, usb, 1, 1, 1)
 
 MODULE_VERSION (uacpi, 1)
 

Variables

static device_method_t acpi_uhub_methods []
 
static device_method_t acpi_uhub_root_methods []
 
static devclass_t uhub_devclass
 
driver_t uhub_driver
 
static kobj_class_t uhub_baseclasses [] = {&uhub_driver, NULL}
 
static driver_t acpi_uhub_driver
 
static driver_t acpi_uhub_root_driver
 

Macro Definition Documentation

◆ ACPI_PLD_SIZE

#define ACPI_PLD_SIZE   20

Definition at line 84 of file usb_hub_acpi.c.

◆ ACPI_UPC_CONNECTABLE

#define ACPI_UPC_CONNECTABLE   0x80000000

Definition at line 87 of file usb_hub_acpi.c.

◆ ACPI_UPC_PORTTYPE

#define ACPI_UPC_PORTTYPE (   x)    ((x)&0xff)

Definition at line 88 of file usb_hub_acpi.c.

◆ USB_DEBUG_VAR

#define USB_DEBUG_VAR   uhub_debug

Definition at line 62 of file usb_hub_acpi.c.

Function Documentation

◆ acpi_uhub_attach()

static int acpi_uhub_attach ( device_t  dev)
static

Definition at line 501 of file usb_hub_acpi.c.

References acpi_uhub_attach_common(), acpi_uhub_detach(), acpi_uhub_softc::ah, dev, and uhub_attach.

Here is the call graph for this function:

◆ acpi_uhub_attach_common()

static int acpi_uhub_attach_common ( device_t  dev)
static

Definition at line 450 of file usb_hub_acpi.c.

References acpi_usb_hub_port_probe(), acpi_uhub_softc::ah, dev, usb_device::hub, usb_hub::nports, acpi_uhub_softc::nports, acpi_uhub_softc::port, uhub_softc::sc_udev, status, and acpi_uhub_softc::usc.

Referenced by acpi_uhub_attach(), and acpi_uhub_root_attach().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ acpi_uhub_child_location()

static int acpi_uhub_child_location ( device_t  parent,
device_t  child,
struct sbuf *  sb 
)
static

Definition at line 544 of file usb_hub_acpi.c.

References acpi_uhub_softc::ah, child, and uhub_child_location.

◆ acpi_uhub_detach()

static int acpi_uhub_detach ( device_t  dev)
static

Definition at line 471 of file usb_hub_acpi.c.

References dev, acpi_uhub_softc::port, and uhub_detach.

Referenced by acpi_uhub_attach(), and acpi_uhub_root_attach().

Here is the caller graph for this function:

◆ acpi_uhub_find_rh()

static ACPI_STATUS acpi_uhub_find_rh ( device_t  dev,
ACPI_HANDLE *  ah 
)
static

Definition at line 349 of file usb_hub_acpi.c.

References acpi_uhub_find_rh_cb(), and dev.

Referenced by acpi_uhub_root_attach(), and acpi_uhub_root_probe().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ acpi_uhub_find_rh_cb()

static UINT32 acpi_uhub_find_rh_cb ( ACPI_HANDLE  ah,
UINT32  nl,
void *  ctx,
void **  status 
)
static

Definition at line 101 of file usb_hub_acpi.c.

References status.

Referenced by acpi_uhub_find_rh().

Here is the caller graph for this function:

◆ acpi_uhub_get_device_path()

static int acpi_uhub_get_device_path ( device_t  bus,
device_t  child,
const char *  locator,
struct sbuf *  sb 
)
static

Definition at line 557 of file usb_hub_acpi.c.

References bus, child, and uhub_get_device_path.

◆ acpi_uhub_parse_pld()

static int acpi_uhub_parse_pld ( device_t  dev,
unsigned int  p,
ACPI_HANDLE  ah,
struct sysctl_oid_list *  tree 
)
static

Definition at line 265 of file usb_hub_acpi.c.

References ACPI_PLD_SIZE, dev, len, acpi_uhub_port::pld, acpi_uhub_softc::port, and usb_debug.

Referenced by acpi_usb_hub_port_probe_cb().

Here is the caller graph for this function:

◆ acpi_uhub_parse_upc()

static int acpi_uhub_parse_upc ( device_t  dev,
unsigned int  p,
ACPI_HANDLE  ah,
struct sysctl_oid_list *  poid 
)
static

Definition at line 139 of file usb_hub_acpi.c.

References acpi_uhub_upc_type(), ACPI_UPC_CONNECTABLE, dev, acpi_uhub_softc::port, acpi_uhub_port::upc, and usb_debug.

Referenced by acpi_usb_hub_port_probe_cb().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ acpi_uhub_port_sysctl()

static int acpi_uhub_port_sysctl ( SYSCTL_HANDLER_ARGS  )
static

Definition at line 178 of file usb_hub_acpi.c.

References acpi_uhub_upc_type(), ACPI_UPC_CONNECTABLE, error, acpi_uhub_port::handle, acpi_uhub_port::pld, req, and acpi_uhub_port::upc.

Referenced by acpi_usb_hub_port_probe_cb().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ acpi_uhub_probe()

static int acpi_uhub_probe ( device_t  dev)
static

Definition at line 432 of file usb_hub_acpi.c.

References dev, and uhub_probe.

◆ acpi_uhub_read_ivar()

static int acpi_uhub_read_ivar ( device_t  dev,
device_t  child,
int  idx,
uintptr_t *  res 
)
static

◆ acpi_uhub_root_attach()

static int acpi_uhub_root_attach ( device_t  dev)
static

Definition at line 481 of file usb_hub_acpi.c.

References acpi_uhub_attach_common(), acpi_uhub_detach(), acpi_uhub_find_rh(), acpi_uhub_softc::ah, dev, and uhub_attach.

Here is the call graph for this function:

◆ acpi_uhub_root_probe()

static int acpi_uhub_root_probe ( device_t  dev)
static

Definition at line 414 of file usb_hub_acpi.c.

References acpi_uhub_find_rh(), dev, status, and uhub_probe.

Here is the call graph for this function:

◆ acpi_uhub_upc_type()

static const char * acpi_uhub_upc_type ( uint8_t  type)
static

Definition at line 122 of file usb_hub_acpi.c.

References type.

Referenced by acpi_uhub_parse_upc(), and acpi_uhub_port_sysctl().

Here is the caller graph for this function:

◆ acpi_usb_hub_port_probe()

static ACPI_STATUS acpi_usb_hub_port_probe ( device_t  dev,
ACPI_HANDLE  ah 
)
static

Definition at line 405 of file usb_hub_acpi.c.

References acpi_usb_hub_port_probe_cb(), and dev.

Referenced by acpi_uhub_attach_common().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ acpi_usb_hub_port_probe_cb()

static ACPI_STATUS acpi_usb_hub_port_probe_cb ( ACPI_HANDLE  ah,
UINT32  lv,
void *  ctx,
void **  rv 
)
static

Definition at line 365 of file usb_hub_acpi.c.

References acpi_uhub_parse_pld(), acpi_uhub_parse_upc(), acpi_uhub_port_sysctl(), acpi_uhub_softc::ah, dev, acpi_uhub_port::handle, acpi_uhub_softc::nports, acpi_uhub_softc::port, and acpi_uhub_port::upc.

Referenced by acpi_usb_hub_port_probe().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ DRIVER_MODULE() [1/2]

DRIVER_MODULE ( uacpi  ,
uhub  ,
acpi_uhub_driver  ,
uhub_devclass  ,
,
 
)

◆ DRIVER_MODULE() [2/2]

DRIVER_MODULE ( uacpi  ,
usbus  ,
acpi_uhub_root_driver  ,
uhub_devclass  ,
,
 
)

◆ MODULE_DEPEND() [1/2]

MODULE_DEPEND ( uacpi  ,
acpi  ,
,
,
 
)

◆ MODULE_DEPEND() [2/2]

MODULE_DEPEND ( uacpi  ,
usb  ,
,
,
 
)

◆ MODULE_VERSION()

MODULE_VERSION ( uacpi  ,
 
)

Variable Documentation

◆ acpi_uhub_driver

driver_t acpi_uhub_driver
static
Initial value:
= {
.name = "uhub",
.methods = acpi_uhub_methods,
.size = sizeof(struct acpi_uhub_softc),
.baseclasses = uhub_baseclasses,
}
static kobj_class_t uhub_baseclasses[]
Definition: usb_hub_acpi.c:589
static device_method_t acpi_uhub_methods[]
Definition: usb_hub_acpi.c:566

Definition at line 591 of file usb_hub_acpi.c.

◆ acpi_uhub_methods

device_method_t acpi_uhub_methods[]
static
Initial value:
= {
DEVMETHOD(device_probe, acpi_uhub_probe),
DEVMETHOD(device_attach, acpi_uhub_attach),
DEVMETHOD(device_detach, acpi_uhub_detach),
DEVMETHOD(bus_child_location, acpi_uhub_child_location),
DEVMETHOD(bus_get_device_path, acpi_uhub_get_device_path),
DEVMETHOD(bus_read_ivar, acpi_uhub_read_ivar),
DEVMETHOD_END
}
static int acpi_uhub_child_location(device_t parent, device_t child, struct sbuf *sb)
Definition: usb_hub_acpi.c:544
static int acpi_uhub_probe(device_t dev)
Definition: usb_hub_acpi.c:432
static int acpi_uhub_attach(device_t dev)
Definition: usb_hub_acpi.c:501
static int acpi_uhub_detach(device_t dev)
Definition: usb_hub_acpi.c:471
static int acpi_uhub_read_ivar(device_t dev, device_t child, int idx, uintptr_t *res)
Definition: usb_hub_acpi.c:523
static int acpi_uhub_get_device_path(device_t bus, device_t child, const char *locator, struct sbuf *sb)
Definition: usb_hub_acpi.c:557

Definition at line 566 of file usb_hub_acpi.c.

◆ acpi_uhub_root_driver

driver_t acpi_uhub_root_driver
static
Initial value:
= {
.name = "uhub",
.size = sizeof(struct acpi_uhub_softc),
.baseclasses = uhub_baseclasses,
}
static device_method_t acpi_uhub_root_methods[]
Definition: usb_hub_acpi.c:577

Definition at line 598 of file usb_hub_acpi.c.

◆ acpi_uhub_root_methods

device_method_t acpi_uhub_root_methods[]
static
Initial value:
= {
DEVMETHOD(device_probe, acpi_uhub_root_probe),
DEVMETHOD(device_attach, acpi_uhub_root_attach),
DEVMETHOD(device_detach, acpi_uhub_detach),
DEVMETHOD(bus_read_ivar, acpi_uhub_read_ivar),
DEVMETHOD(bus_child_location, acpi_uhub_child_location),
DEVMETHOD(bus_get_device_path, acpi_uhub_get_device_path),
DEVMETHOD_END
}
static int acpi_uhub_root_attach(device_t dev)
Definition: usb_hub_acpi.c:481
static int acpi_uhub_root_probe(device_t dev)
Definition: usb_hub_acpi.c:414

Definition at line 577 of file usb_hub_acpi.c.

◆ uhub_baseclasses

kobj_class_t uhub_baseclasses[] = {&uhub_driver, NULL}
static

Definition at line 589 of file usb_hub_acpi.c.

◆ uhub_devclass

devclass_t uhub_devclass
static

Definition at line 587 of file usb_hub_acpi.c.

◆ uhub_driver

driver_t uhub_driver
extern

Definition at line 177 of file usb_hub.c.