Changeset f123909 in mainline for uspace/drv/uhci-rhd/port.c


Ignore:
Timestamp:
2011-03-13T23:10:50Z (14 years ago)
Author:
Jan Vesely <jano.vesely@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
3bd96bb
Parents:
a9f91cd
Message:

Doxygen fixes and refactoring.

UHCI root hub driver should be complete (except may be for the BUG)

File:
1 edited

Legend:

Unmodified
Added
Removed
  • uspace/drv/uhci-rhd/port.c

    ra9f91cd rf123909  
    2626 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    2727 */
    28 /** @addtogroup usb
     28/** @addtogroup drvusbuhcirh
    2929 * @{
    3030 */
    3131/** @file
    32  * @brief UHCI driver
    33  */
     32 * @brief UHCI root hub port routines
     33 */
     34#include <libarch/ddi.h> /* pio_read and pio_write */
    3435#include <errno.h>
    3536#include <str_error.h>
     
    3738
    3839#include <usb/usb.h>    /* usb_address_t */
    39 #include <usb/usbdevice.h>
    4040#include <usb/hub.h>
    41 #include <usb/request.h>
    4241#include <usb/debug.h>
    43 #include <usb/recognise.h>
    4442
    4543#include "port.h"
     
    5048static int uhci_port_check(void *port);
    5149static int uhci_port_reset_enable(int portno, void *arg);
    52 /*----------------------------------------------------------------------------*/
    53 /** Initializes UHCI root hub port instance.
     50static void uhci_port_print_status(
     51    uhci_port_t *port, const port_status_t value);
     52
     53/** Register reading helper function.
     54 *
     55 * @param[in] port Structure to use.
     56 * @return Error code. (Always EOK)
     57 */
     58static inline port_status_t uhci_port_read_status(uhci_port_t *port)
     59{
     60        assert(port);
     61        return pio_read_16(port->address);
     62}
     63/*----------------------------------------------------------------------------*/
     64/** Register writing helper function.
     65 *
     66 * @param[in] port Structure to use.
     67 * @param[in] value New register value.
     68 * @return Error code. (Always EOK)
     69 */
     70static inline void uhci_port_write_status(
     71    uhci_port_t *port, port_status_t value)
     72{
     73        assert(port);
     74        pio_write_16(port->address, value);
     75}
     76
     77/*----------------------------------------------------------------------------*/
     78/** Initialize UHCI root hub port instance.
    5479 *
    5580 * @param[in] port Memory structure to use.
     
    6085 * @return Error code.
    6186 *
    62  * Starts the polling fibril.
     87 * Creates and starts the polling fibril.
    6388 */
    6489int uhci_port_init(uhci_port_t *port,
     
    86111        port->checker = fibril_create(uhci_port_check, port);
    87112        if (port->checker == 0) {
    88                 usb_log_error("Port(%p - %d): failed to launch root hub fibril.",
    89                     port->address, port->number);
     113                usb_log_error("%s: failed to create polling fibril.",
     114                    port->id_string);
    90115                return ENOMEM;
    91116        }
    92117
    93118        fibril_add_ready(port->checker);
    94         usb_log_debug("Port(%p - %d): Added fibril. %x\n",
    95             port->address, port->number, port->checker);
    96         return EOK;
    97 }
    98 /*----------------------------------------------------------------------------*/
    99 /** Finishes UHCI root hub port instance.
     119        usb_log_debug("%s: Started polling fibril(%x).\n",
     120            port->id_string, port->checker);
     121        return EOK;
     122}
     123/*----------------------------------------------------------------------------*/
     124/** Cleanup UHCI root hub port instance.
    100125 *
    101126 * @param[in] port Memory structure to use.
     
    105130void uhci_port_fini(uhci_port_t *port)
    106131{
     132        assert(port);
     133        free(port->id_string);
    107134        /* TODO: Kill fibril here */
    108135        return;
     
    111138/** Periodically checks port status and reports new devices.
    112139 *
    113  * @param[in] port Memory structure to use.
     140 * @param[in] port Port structure to use.
    114141 * @return Error code.
    115142 */
     
    122149                async_usleep(instance->wait_period_usec);
    123150
    124                 /* read register value */
     151                /* Read register value */
    125152                port_status_t port_status = uhci_port_read_status(instance);
    126153
    127                 /* print the value if it's interesting */
     154                /* Print the value if it's interesting */
    128155                if (port_status & ~STATUS_ALWAYS_ONE)
    129156                        uhci_port_print_status(instance, port_status);
     
    177204 * @param arg Pointer to uhci_port_t of port with the new device.
    178205 * @return Error code.
     206 *
     207 * Resets and enables the ub port.
    179208 */
    180209int uhci_port_reset_enable(int portno, void *arg)
     
    214243}
    215244/*----------------------------------------------------------------------------*/
    216 /** Initializes and reports connected device.
    217  *
    218  * @param[in] port Memory structure to use.
     245/** Initialize and report connected device.
     246 *
     247 * @param[in] port Port structure to use.
    219248 * @param[in] speed Detected speed.
    220249 * @return Error code.
     
    247276}
    248277/*----------------------------------------------------------------------------*/
    249 /** Removes device.
     278/** Remove device.
    250279 *
    251280 * @param[in] port Memory structure to use.
    252281 * @return Error code.
    253282 *
    254  * Does not work DDF does not support device removal.
     283 * Does not work, DDF does not support device removal.
     284 * Does not even free used USB address (it would be dangerous if tis driver
     285 * is still running).
    255286 */
    256287int uhci_port_remove_device(uhci_port_t *port)
     
    261292}
    262293/*----------------------------------------------------------------------------*/
    263 /** Enables and disables port.
    264  *
    265  * @param[in] port Memory structure to use.
     294/** Enable or disable root hub port.
     295 *
     296 * @param[in] port Port structure to use.
     297 * @param[in] enabled Port status to set.
    266298 * @return Error code. (Always EOK)
    267299 */
     
    288320}
    289321/*----------------------------------------------------------------------------*/
     322/** Print the port status value in a human friendly way
     323 *
     324 * @param[in] port Port structure to use.
     325 * @param[in] value Port register value to print.
     326 * @return Error code. (Always EOK)
     327 */
     328void uhci_port_print_status(uhci_port_t *port, const port_status_t value)
     329{
     330        assert(port);
     331        usb_log_debug2("%s Port status(%#x):%s%s%s%s%s%s%s%s%s%s%s.\n",
     332            port->id_string, value,
     333            (value & STATUS_SUSPEND) ? " SUSPENDED," : "",
     334            (value & STATUS_RESUME) ? " IN RESUME," : "",
     335            (value & STATUS_IN_RESET) ? " IN RESET," : "",
     336            (value & STATUS_LINE_D_MINUS) ? " VD-," : "",
     337            (value & STATUS_LINE_D_PLUS) ? " VD+," : "",
     338            (value & STATUS_LOW_SPEED) ? " LOWSPEED," : "",
     339            (value & STATUS_ENABLED_CHANGED) ? " ENABLED-CHANGE," : "",
     340            (value & STATUS_ENABLED) ? " ENABLED," : "",
     341            (value & STATUS_CONNECTED_CHANGED) ? " CONNECTED-CHANGE," : "",
     342            (value & STATUS_CONNECTED) ? " CONNECTED," : "",
     343            (value & STATUS_ALWAYS_ONE) ? " ALWAYS ONE" : " ERROR: NO ALWAYS ONE"
     344        );
     345}
    290346/**
    291347 * @}
Note: See TracChangeset for help on using the changeset viewer.