source: mainline/uspace/drv/bus/usb/ohci/hc.h@ 8b415cc

lfn serial ticket/834-toolchain-update topic/msim-upgrade topic/simplify-dev-export
Last change on this file since 8b415cc was e4d7363, checked in by Ondřej Hlavatý <aearsis@…>, 8 years ago

usbhost: refactor the initialization

Before that, drivers had to setup MMIO range multiple times, or even parse hw
resources themselves again. The former init method was split in half - init and
start. Init shall allocate and initialize inner structures, start shall start
the HC.

In the XHCI it is demonstrated how to isolate inner HC implementation from the
fact this driver is using libusbhost. It adds some boilerplate code, but
I think it leads to cleaner design.

  • Property mode set to 100644
File size: 3.1 KB
Line 
1/*
2 * Copyright (c) 2011 Jan Vesely
3 * All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
7 * are met:
8 *
9 * - Redistributions of source code must retain the above copyright
10 * notice, this list of conditions and the following disclaimer.
11 * - Redistributions in binary form must reproduce the above copyright
12 * notice, this list of conditions and the following disclaimer in the
13 * documentation and/or other materials provided with the distribution.
14 * - The name of the author may not be used to endorse or promote products
15 * derived from this software without specific prior written permission.
16 *
17 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
18 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
19 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
20 * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
21 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
22 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
23 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
24 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
26 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27 */
28
29/** @addtogroup drvusbohci
30 * @{
31 */
32/** @file
33 * @brief OHCI host controller driver structure
34 */
35
36#ifndef DRV_OHCI_HC_H
37#define DRV_OHCI_HC_H
38
39#include <adt/list.h>
40#include <ddi.h>
41#include <ddf/driver.h>
42#include <device/hw_res_parsed.h>
43#include <fibril.h>
44#include <fibril_synch.h>
45#include <stdbool.h>
46#include <stdint.h>
47
48#include <usb/host/hcd.h>
49#include <usb/host/endpoint.h>
50#include <usb/host/usb_transfer_batch.h>
51
52#include "ohci_regs.h"
53#include "ohci_rh.h"
54#include "endpoint_list.h"
55#include "hw_struct/hcca.h"
56
57/** Main OHCI driver structure */
58typedef struct hc {
59 /** Memory mapped I/O registers area */
60 ohci_regs_t *registers;
61 /** Host controller communication area structure */
62 hcca_t *hcca;
63
64 /** Transfer schedules */
65 endpoint_list_t lists[4];
66 /** List of active transfers */
67 list_t pending_batches;
68
69 /** Fibril for periodic checks if interrupts can't be used */
70 fid_t interrupt_emulator;
71
72 /** Guards schedule and endpoint manipulation */
73 fibril_mutex_t guard;
74
75 /** interrupts available */
76 bool hw_interrupts;
77
78 /** USB hub emulation structure */
79 ohci_rh_t rh;
80} hc_t;
81
82extern int hc_init(hc_t *, const hw_res_list_parsed_t *);
83extern void hc_gain_control(hc_t *instance);
84extern void hc_start(hc_t *instance);
85extern void hc_fini(hc_t *);
86
87extern void hc_enqueue_endpoint(hc_t *, const endpoint_t *);
88extern void hc_dequeue_endpoint(hc_t *, const endpoint_t *);
89
90int ohci_hc_gen_irq_code(irq_code_t *code, hcd_t *hcd, const hw_res_list_parsed_t *hw_res);
91
92extern void ohci_hc_interrupt(hcd_t *, uint32_t);
93extern int ohci_hc_status(hcd_t *, uint32_t *);
94extern int ohci_hc_schedule(hcd_t *, usb_transfer_batch_t *);
95
96#endif
97
98/**
99 * @}
100 */
Note: See TracBrowser for help on using the repository browser.