~martin-decky/helenos/rcu

« back to all changes in this revision

Viewing changes to uspace/drv/ohci/hc.h

  • Committer: Jakub Jermar
  • Date: 2011-06-07 21:31:35 UTC
  • mfrom: (708.2.1 mainline)
  • Revision ID: jakub@jermar.eu-20110607213135-cxz8vhxq21pij1gb
Merge USB support.

Changes from bzr://helenos-usb.bzr.sourceforge.net/bzrroot/helenos-usb/mainline:

- replaced '-' with '_' in new driver names
- USB libs are built for each architecture
- devman starts early
- sys_thread_udelay() uses generic delay()
- sys_as_create_area() now creates cacheable areas by default

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
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 drvusbohci
 
29
 * @{
 
30
 */
 
31
/** @file
 
32
 * @brief OHCI host controller driver structure
 
33
 */
 
34
#ifndef DRV_OHCI_HC_H
 
35
#define DRV_OHCI_HC_H
 
36
 
 
37
#include <fibril.h>
 
38
#include <fibril_synch.h>
 
39
#include <adt/list.h>
 
40
#include <ddi.h>
 
41
 
 
42
#include <usb/usb.h>
 
43
#include <usb/host/device_keeper.h>
 
44
#include <usb/host/usb_endpoint_manager.h>
 
45
#include <usbhc_iface.h>
 
46
 
 
47
#include "batch.h"
 
48
#include "ohci_regs.h"
 
49
#include "root_hub.h"
 
50
#include "endpoint_list.h"
 
51
#include "hw_struct/hcca.h"
 
52
 
 
53
#define OHCI_NEEDED_IRQ_COMMANDS 5
 
54
 
 
55
/** Main OHCI drier structure */
 
56
typedef struct hc {
 
57
        /** USB bus driver, devices and addresses */
 
58
        usb_device_keeper_t manager;
 
59
        /** USB bus driver, endpoints */
 
60
        usb_endpoint_manager_t ep_manager;
 
61
 
 
62
        /** Memory mapped I/O registers area */
 
63
        ohci_regs_t *registers;
 
64
        /** Host controller communication area structure */
 
65
        hcca_t *hcca;
 
66
 
 
67
        /** Transfer schedules */
 
68
        endpoint_list_t lists[4];
 
69
        /** List of active transfers */
 
70
        link_t pending_batches;
 
71
 
 
72
        /** Fibril for periodic checks if interrupts can't be used */
 
73
        fid_t interrupt_emulator;
 
74
 
 
75
        /** Guards schedule and endpoint manipulation */
 
76
        fibril_mutex_t guard;
 
77
 
 
78
        /** Code to be executed in kernel interrupt handler */
 
79
        irq_code_t interrupt_code;
 
80
 
 
81
        /** Commands that form interrupt code */
 
82
        irq_cmd_t interrupt_commands[OHCI_NEEDED_IRQ_COMMANDS];
 
83
 
 
84
        /** USB hub emulation structure */
 
85
        rh_t rh;
 
86
} hc_t;
 
87
 
 
88
int hc_register_hub(hc_t *instance, ddf_fun_t *hub_fun);
 
89
int hc_init(hc_t *instance, uintptr_t regs, size_t reg_size, bool interrupts);
 
90
void hc_start_hw(hc_t *instance);
 
91
 
 
92
/** Safely dispose host controller internal structures
 
93
 *
 
94
 * @param[in] instance Host controller structure to use.
 
95
 */
 
96
static inline void hc_fini(hc_t *instance)
 
97
        { /* TODO: implement*/ };
 
98
 
 
99
int hc_add_endpoint(hc_t *instance, usb_address_t address, usb_endpoint_t ep,
 
100
    usb_speed_t speed, usb_transfer_type_t type, usb_direction_t direction,
 
101
    size_t max_packet_size, size_t size, unsigned interval);
 
102
int hc_remove_endpoint(hc_t *instance, usb_address_t address,
 
103
    usb_endpoint_t endpoint, usb_direction_t direction);
 
104
endpoint_t * hc_get_endpoint(hc_t *instance, usb_address_t address,
 
105
    usb_endpoint_t endpoint, usb_direction_t direction, size_t *bw);
 
106
 
 
107
int hc_schedule(hc_t *instance, usb_transfer_batch_t *batch);
 
108
void hc_interrupt(hc_t *instance, uint32_t status);
 
109
 
 
110
/** Get and cast pointer to the driver data
 
111
 *
 
112
 * @param[in] fun DDF function pointer
 
113
 * @return cast pointer to driver_data
 
114
 */
 
115
static inline hc_t * fun_to_hc(ddf_fun_t *fun)
 
116
        { return fun->driver_data; }
 
117
#endif
 
118
/**
 
119
 * @}
 
120
 */