usb: ohci: Move the td array struct to inside the ohci_dev struct

This is a preparation patch for adding driver-model support.

Signed-off-by: Hans de Goede <hdegoede@redhat.com>
Acked-by: Marek Vasut <marex@denx.de>
This commit is contained in:
Hans de Goede 2015-05-05 23:56:09 +02:00 committed by Simon Glass
parent 19d95d5729
commit 3c5497d831
2 changed files with 9 additions and 20 deletions

View File

@ -447,7 +447,7 @@ int sohci_submit_job(ohci_t *ohci, ohci_dev_t *ohci_dev, urb_priv_t *urb,
/* allocate the TDs */ /* allocate the TDs */
/* note that td[0] was allocated in ep_add_ed */ /* note that td[0] was allocated in ep_add_ed */
for (i = 0; i < size; i++) { for (i = 0; i < size; i++) {
purb_priv->td[i] = td_alloc(dev); purb_priv->td[i] = td_alloc(ohci_dev, dev);
if (!purb_priv->td[i]) { if (!purb_priv->td[i]) {
purb_priv->length = i; purb_priv->length = i;
urb_free_priv(purb_priv); urb_free_priv(purb_priv);
@ -760,7 +760,7 @@ static ed_t *ep_add_ed(ohci_dev_t *ohci_dev, struct usb_device *usb_dev,
if (ed->state == ED_NEW) { if (ed->state == ED_NEW) {
/* dummy td; end of td list for ed */ /* dummy td; end of td list for ed */
td = td_alloc(usb_dev); td = td_alloc(ohci_dev, usb_dev);
ed->hwTailP = m32_swap((unsigned long)td); ed->hwTailP = m32_swap((unsigned long)td);
ed->hwHeadP = ed->hwTailP; ed->hwHeadP = ed->hwTailP;
ed->state = ED_UNLINK; ed->state = ED_UNLINK;
@ -1762,12 +1762,6 @@ int usb_lowlevel_init(int index, enum usb_init_type init, void **controller)
} }
phcca = &ghcca[0]; phcca = &ghcca[0];
info("aligned ghcca %p", phcca); info("aligned ghcca %p", phcca);
memset(gtd, 0, sizeof(td_t) * (NUM_TD + 1));
if ((__u32)gtd & 0x7) {
err("TDs not aligned!!");
return -1;
}
ptd = gtd;
gohci.hcca = phcca; gohci.hcca = phcca;
memset(phcca, 0, sizeof(struct ohci_hcca)); memset(phcca, 0, sizeof(struct ohci_hcca));

View File

@ -410,8 +410,11 @@ typedef struct
#define NUM_EDS 8 /* num of preallocated endpoint descriptors */ #define NUM_EDS 8 /* num of preallocated endpoint descriptors */
#define NUM_TD 64 /* we need more TDs than EDs */
typedef struct ohci_device { typedef struct ohci_device {
ed_t ed[NUM_EDS] __aligned(16); ed_t ed[NUM_EDS] __aligned(16);
td_t tds[NUM_TD] __aligned(32);
int ed_cnt; int ed_cnt;
} ohci_dev_t; } ohci_dev_t;
@ -425,7 +428,7 @@ typedef struct ohci_device {
typedef struct ohci { typedef struct ohci {
/* this allocates EDs for all possible endpoints */ /* this allocates EDs for all possible endpoints */
struct ohci_device ohci_dev __aligned(16); struct ohci_device ohci_dev __aligned(32);
struct ohci_hcca *hcca; /* hcca */ struct ohci_hcca *hcca; /* hcca */
/*dma_addr_t hcca_dma;*/ /*dma_addr_t hcca_dma;*/
@ -457,17 +460,9 @@ static ed_t *ep_add_ed(ohci_dev_t *ohci_dev, struct usb_device *usb_dev,
/*-------------------------------------------------------------------------*/ /*-------------------------------------------------------------------------*/
/* we need more TDs than EDs */
#define NUM_TD 64
/* +1 so we can align the storage */
td_t gtd[NUM_TD+1];
/* pointers to aligned storage */
td_t *ptd;
/* TDs ... */ /* TDs ... */
static inline struct td * static inline struct td *
td_alloc (struct usb_device *usb_dev) td_alloc (ohci_dev_t *ohci_dev, struct usb_device *usb_dev)
{ {
int i; int i;
struct td *td; struct td *td;
@ -475,9 +470,9 @@ td_alloc (struct usb_device *usb_dev)
td = NULL; td = NULL;
for (i = 0; i < NUM_TD; i++) for (i = 0; i < NUM_TD; i++)
{ {
if (ptd[i].usb_dev == NULL) if (ohci_dev->tds[i].usb_dev == NULL)
{ {
td = &ptd[i]; td = &ohci_dev->tds[i];
td->usb_dev = usb_dev; td->usb_dev = usb_dev;
break; break;
} }