Release 4.11 drivers/usb/host/ohci-mem.c
/*
* OHCI HCD (Host Controller Driver) for USB.
*
* (C) Copyright 1999 Roman Weissgaerber <weissg@vienna.at>
* (C) Copyright 2000-2002 David Brownell <dbrownell@users.sourceforge.net>
*
* This file is licenced under the GPL.
*/
/*-------------------------------------------------------------------------*/
/*
* OHCI deals with three types of memory:
* - data used only by the HCD ... kmalloc is fine
* - async and periodic schedules, shared by HC and HCD ... these
* need to use dma_pool or dma_alloc_coherent
* - driver buffers, read/written by HC ... the hcd glue or the
* device driver provides us with dma addresses
*
* There's also "register" data, which is memory mapped.
* No memory seen by this driver (or any HCD) may be paged out.
*/
/*-------------------------------------------------------------------------*/
static void ohci_hcd_init (struct ohci_hcd *ohci)
{
ohci->next_statechange = jiffies;
spin_lock_init (&ohci->lock);
INIT_LIST_HEAD (&ohci->pending);
INIT_LIST_HEAD(&ohci->eds_in_use);
}
Contributors
Person | Tokens | Prop | Commits | CommitProp |
David Brownell | 22 | 53.66% | 2 | 40.00% |
Alan Stern | 11 | 26.83% | 2 | 40.00% |
Linus Torvalds | 8 | 19.51% | 1 | 20.00% |
Total | 41 | 100.00% | 5 | 100.00% |
/*-------------------------------------------------------------------------*/
static int ohci_mem_init (struct ohci_hcd *ohci)
{
ohci->td_cache = dma_pool_create ("ohci_td",
ohci_to_hcd(ohci)->self.controller,
sizeof (struct td),
32 /* byte alignment */,
0 /* no page-crossing issues */);
if (!ohci->td_cache)
return -ENOMEM;
ohci->ed_cache = dma_pool_create ("ohci_ed",
ohci_to_hcd(ohci)->self.controller,
sizeof (struct ed),
16 /* byte alignment */,
0 /* no page-crossing issues */);
if (!ohci->ed_cache) {
dma_pool_destroy (ohci->td_cache);
return -ENOMEM;
}
return 0;
}
Contributors
Person | Tokens | Prop | Commits | CommitProp |
Linus Torvalds | 90 | 85.71% | 1 | 33.33% |
Deepak Saxena | 9 | 8.57% | 1 | 33.33% |
Alan Stern | 6 | 5.71% | 1 | 33.33% |
Total | 105 | 100.00% | 3 | 100.00% |
static void ohci_mem_cleanup (struct ohci_hcd *ohci)
{
if (ohci->td_cache) {
dma_pool_destroy (ohci->td_cache);
ohci->td_cache = NULL;
}
if (ohci->ed_cache) {
dma_pool_destroy (ohci->ed_cache);
ohci->ed_cache = NULL;
}
}
Contributors
Person | Tokens | Prop | Commits | CommitProp |
Linus Torvalds | 49 | 92.45% | 1 | 33.33% |
Greg Kroah-Hartman | 2 | 3.77% | 1 | 33.33% |
Deepak Saxena | 2 | 3.77% | 1 | 33.33% |
Total | 53 | 100.00% | 3 | 100.00% |
/*-------------------------------------------------------------------------*/
/* ohci "done list" processing needs this mapping */
static inline struct td *
dma_to_td (struct ohci_hcd *hc, dma_addr_t td_dma)
{
struct td *td;
td_dma &= TD_MASK;
td = hc->td_hash [TD_HASH_FUNC(td_dma)];
while (td && td->td_dma != td_dma)
td = td->td_hash;
return td;
}
Contributors
Person | Tokens | Prop | Commits | CommitProp |
David Brownell | 57 | 100.00% | 1 | 100.00% |
Total | 57 | 100.00% | 1 | 100.00% |
/* TDs ... */
static struct td *
td_alloc (struct ohci_hcd *hc, gfp_t mem_flags)
{
dma_addr_t dma;
struct td *td;
td = dma_pool_zalloc (hc->td_cache, mem_flags, &dma);
if (td) {
/* in case hc fetches it, make it look dead */
td->hwNextTD = cpu_to_hc32 (hc, dma);
td->td_dma = dma;
/* hashed in td_fill */
}
return td;
}
Contributors
Person | Tokens | Prop | Commits | CommitProp |
Linus Torvalds | 51 | 77.27% | 1 | 16.67% |
David Brownell | 13 | 19.70% | 3 | 50.00% |
shashi bhusan | 1 | 1.52% | 1 | 16.67% |
Al Viro | 1 | 1.52% | 1 | 16.67% |
Total | 66 | 100.00% | 6 | 100.00% |
static void
td_free (struct ohci_hcd *hc, struct td *td)
{
struct td **prev = &hc->td_hash [TD_HASH_FUNC (td->td_dma)];
while (*prev && *prev != td)
prev = &(*prev)->td_hash;
if (*prev)
*prev = td->td_hash;
else if ((td->hwINFO & cpu_to_hc32(hc, TD_DONE)) != 0)
ohci_dbg (hc, "no hash for td %p\n", td);
dma_pool_free (hc->td_cache, td, td->td_dma);
}
Contributors
Person | Tokens | Prop | Commits | CommitProp |
David Brownell | 72 | 67.29% | 5 | 71.43% |
Linus Torvalds | 34 | 31.78% | 1 | 14.29% |
Deepak Saxena | 1 | 0.93% | 1 | 14.29% |
Total | 107 | 100.00% | 7 | 100.00% |
/*-------------------------------------------------------------------------*/
/* EDs ... */
static struct ed *
ed_alloc (struct ohci_hcd *hc, gfp_t mem_flags)
{
dma_addr_t dma;
struct ed *ed;
ed = dma_pool_zalloc (hc->ed_cache, mem_flags, &dma);
if (ed) {
INIT_LIST_HEAD (&ed->td_list);
ed->dma = dma;
}
return ed;
}
Contributors
Person | Tokens | Prop | Commits | CommitProp |
Linus Torvalds | 51 | 83.61% | 1 | 25.00% |
David Brownell | 8 | 13.11% | 1 | 25.00% |
shashi bhusan | 1 | 1.64% | 1 | 25.00% |
Al Viro | 1 | 1.64% | 1 | 25.00% |
Total | 61 | 100.00% | 4 | 100.00% |
static void
ed_free (struct ohci_hcd *hc, struct ed *ed)
{
dma_pool_free (hc->ed_cache, ed, ed->dma);
}
Contributors
Person | Tokens | Prop | Commits | CommitProp |
Linus Torvalds | 28 | 96.55% | 1 | 50.00% |
Deepak Saxena | 1 | 3.45% | 1 | 50.00% |
Total | 29 | 100.00% | 2 | 100.00% |
Overall Contributors
Person | Tokens | Prop | Commits | CommitProp |
Linus Torvalds | 316 | 59.74% | 1 | 5.88% |
David Brownell | 177 | 33.46% | 10 | 58.82% |
Alan Stern | 17 | 3.21% | 2 | 11.76% |
Deepak Saxena | 13 | 2.46% | 1 | 5.88% |
Al Viro | 2 | 0.38% | 1 | 5.88% |
Greg Kroah-Hartman | 2 | 0.38% | 1 | 5.88% |
shashi bhusan | 2 | 0.38% | 1 | 5.88% |
Total | 529 | 100.00% | 17 | 100.00% |
Information contained on this website is for historical information purposes only and does not indicate or represent copyright ownership.