source: mainline/uspace/drv/uhci-rhd/root_hub.c@ 7ffe82f

lfn serial ticket/834-toolchain-update topic/msim-upgrade topic/simplify-dev-export
Last change on this file since 7ffe82f was 275bf456, checked in by Jan Vesely <jano.vesely@…>, 14 years ago

Doxygen and other comments uhci-rhd refactoring.

  • Property mode set to 100644
File size: 3.2 KB
RevLine 
[c56dbe0]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/** @addtogroup usb
29 * @{
30 */
31/** @file
32 * @brief UHCI driver
33 */
[1256a0a]34#include <errno.h>
35#include <stdint.h>
[eb1a2f4]36#include <ddi.h>
37#include <devman.h>
[7ce0fe3]38#include <usb/debug.h>
[1256a0a]39
40#include "root_hub.h"
41
[275bf456]42/** Initializes UHCI root hub instance.
43 *
44 * @param[in] instance Driver memory structure to use.
45 * @param[in] addr Address of I/O registers.
46 * @param[in] size Size of available I/O space.
47 * @param[in] rh Pointer to ddf instance fo the root hub driver.
48 * @return Error code.
49 */
[1256a0a]50int uhci_root_hub_init(
[eb1a2f4]51 uhci_root_hub_t *instance, void *addr, size_t size, ddf_dev_t *rh)
[1256a0a]52{
53 assert(instance);
54 assert(rh);
55 int ret;
56
[275bf456]57 /* Allow access to root hub port registers */
58 assert(sizeof(port_status_t) * UHCI_ROOT_HUB_PORT_COUNT <= size);
[1256a0a]59 port_status_t *regs;
[dced52a]60 ret = pio_enable(addr, size, (void**)&regs);
[1256a0a]61 if (ret < 0) {
[275bf456]62 usb_log_error(
63 "Failed to gain access to port registers at %p\n", regs);
[1256a0a]64 return ret;
65 }
66
67 /* add fibrils for periodic port checks */
68 unsigned i = 0;
69 for (; i < UHCI_ROOT_HUB_PORT_COUNT; ++i) {
[275bf456]70 /* NOTE: mind pointer arithmetics here */
[dced52a]71 ret = uhci_port_init(
[275bf456]72 &instance->ports[i], regs + i, i, ROOT_HUB_WAIT_USEC, rh);
[1256a0a]73 if (ret != EOK) {
74 unsigned j = 0;
75 for (;j < i; ++j)
76 uhci_port_fini(&instance->ports[j]);
77 return ret;
78 }
79 }
80
81 return EOK;
82}
83/*----------------------------------------------------------------------------*/
[275bf456]84/** Finishes UHCI root hub instance.
85 *
86 * @param[in] instance Driver memory structure to use.
87 * @return Error code.
88 */
89int uhci_root_hub_fini(uhci_root_hub_t* instance)
[1256a0a]90{
[275bf456]91 assert(instance);
92 unsigned i = 0;
93 for (; i < UHCI_ROOT_HUB_PORT_COUNT; ++i) {
94 uhci_port_fini(&instance->ports[i]);
95 }
[1256a0a]96 return EOK;
97}
98/*----------------------------------------------------------------------------*/
[c56dbe0]99/**
100 * @}
101 */
Note: See TracBrowser for help on using the repository browser.