usb on mipsel

This commit is contained in:
phcoder 2009-10-19 16:38:07 +02:00
parent 82b1f15b6b
commit 6592e23a4e
3 changed files with 50 additions and 11 deletions

View file

@ -27,6 +27,8 @@
#include <grub/i386/io.h> #include <grub/i386/io.h>
#include <grub/time.h> #include <grub/time.h>
#define vtop(x) ((x) & 0x7fffffff)
struct grub_ohci_hcca struct grub_ohci_hcca
{ {
/* Pointers to Interrupt Endpoint Descriptors. Not used by /* Pointers to Interrupt Endpoint Descriptors. Not used by
@ -178,7 +180,7 @@ grub_ohci_pci_iter (int bus, int device, int func,
grub_ohci_writereg32 (o, GRUB_OHCI_REG_FRAME_INTERVAL, frame_interval); grub_ohci_writereg32 (o, GRUB_OHCI_REG_FRAME_INTERVAL, frame_interval);
/* Setup the HCCA. */ /* Setup the HCCA. */
grub_ohci_writereg32 (o, GRUB_OHCI_REG_HCCA, (grub_uint32_t) o->hcca); grub_ohci_writereg32 (o, GRUB_OHCI_REG_HCCA, vtop ((grub_uint32_t) o->hcca));
grub_dprintf ("ohci", "OHCI HCCA\n"); grub_dprintf ("ohci", "OHCI HCCA\n");
/* Enable the OHCI. */ /* Enable the OHCI. */
@ -264,10 +266,10 @@ grub_ohci_transaction (grub_ohci_td_t td,
buffer = (grub_uint32_t) data; buffer = (grub_uint32_t) data;
buffer_end = buffer + size - 1; buffer_end = buffer + size - 1;
td->token = grub_cpu_to_le32 (token); td->token = grub_cpu_to_le32 (vtop (token));
td->buffer = grub_cpu_to_le32 (buffer); td->buffer = grub_cpu_to_le32 (vtop (buffer));
td->next_td = 0; td->next_td = 0;
td->buffer_end = grub_cpu_to_le32 (buffer_end); td->buffer_end = grub_cpu_to_le32 (vtop (buffer_end));
} }
static grub_usb_err_t static grub_usb_err_t
@ -307,7 +309,7 @@ grub_ohci_transfer (grub_usb_controller_t dev,
grub_ohci_transaction (&td_list[i], tr->pid, tr->toggle, grub_ohci_transaction (&td_list[i], tr->pid, tr->toggle,
tr->size, tr->data); tr->size, tr->data);
td_list[i].next_td = grub_cpu_to_le32 (&td_list[i + 1]); td_list[i].next_td = grub_cpu_to_le32 (vtop (&td_list[i + 1]));
} }
/* Setup the Endpoint Descriptor. */ /* Setup the Endpoint Descriptor. */
@ -324,9 +326,9 @@ grub_ohci_transfer (grub_usb_controller_t dev,
/* Set the maximum packet size. */ /* Set the maximum packet size. */
target |= transfer->max << 16; target |= transfer->max << 16;
td_head = (grub_uint32_t) td_list; td_head = vtop ((grub_uint32_t) td_list);
td_tail = (grub_uint32_t) &td_list[transfer->transcnt]; td_tail = vtop ((grub_uint32_t) &td_list[transfer->transcnt]);
ed->target = grub_cpu_to_le32 (target); ed->target = grub_cpu_to_le32 (target);
ed->td_head = grub_cpu_to_le32 (td_head); ed->td_head = grub_cpu_to_le32 (td_head);
@ -353,7 +355,8 @@ grub_ohci_transfer (grub_usb_controller_t dev,
status &= ~(1 << 2); status &= ~(1 << 2);
grub_ohci_writereg32 (o, GRUB_OHCI_REG_CMDSTATUS, status); grub_ohci_writereg32 (o, GRUB_OHCI_REG_CMDSTATUS, status);
grub_ohci_writereg32 (o, GRUB_OHCI_REG_BULKHEAD, (grub_uint32_t) ed); grub_ohci_writereg32 (o, GRUB_OHCI_REG_BULKHEAD,
vtop ((grub_uint32_t) ed));
/* Enable the Bulk list. */ /* Enable the Bulk list. */
control |= 1 << 5; control |= 1 << 5;
@ -381,9 +384,9 @@ grub_ohci_transfer (grub_usb_controller_t dev,
grub_ohci_writereg32 (o, GRUB_OHCI_REG_CMDSTATUS, status); grub_ohci_writereg32 (o, GRUB_OHCI_REG_CMDSTATUS, status);
grub_ohci_writereg32 (o, GRUB_OHCI_REG_CONTROLHEAD, grub_ohci_writereg32 (o, GRUB_OHCI_REG_CONTROLHEAD,
(grub_uint32_t) ed); vtop ((grub_uint32_t) ed));
grub_ohci_writereg32 (o, GRUB_OHCI_REG_CONTROLHEAD+1, grub_ohci_writereg32 (o, GRUB_OHCI_REG_CONTROLHEAD+1,
(grub_uint32_t) ed); vtop ((grub_uint32_t) ed));
/* Enable the Control list. */ /* Enable the Control list. */
control |= 1 << 4; control |= 1 << 4;

View file

@ -148,6 +148,43 @@ pci_mod_SOURCES = bus/pci.c
pci_mod_CFLAGS = $(COMMON_CFLAGS) pci_mod_CFLAGS = $(COMMON_CFLAGS)
pci_mod_LDFLAGS = $(COMMON_LDFLAGS) pci_mod_LDFLAGS = $(COMMON_LDFLAGS)
# For lspci.mod
pkglib_MODULES += lspci.mod
lspci_mod_SOURCES = commands/lspci.c
lspci_mod_CFLAGS = $(COMMON_CFLAGS)
lspci_mod_LDFLAGS = $(COMMON_LDFLAGS)
# For ohci.mod
pkglib_MODULES += ohci.mod
ohci_mod_SOURCES = bus/usb/ohci.c
ohci_mod_CFLAGS = $(COMMON_CFLAGS)
ohci_mod_LDFLAGS = $(COMMON_LDFLAGS)
# For usb.mod
pkglib_MODULES += usb.mod
usb_mod_SOURCES = bus/usb/usb.c bus/usb/usbtrans.c bus/usb/usbhub.c
usb_mod_CFLAGS = $(COMMON_CFLAGS)
usb_mod_LDFLAGS = $(COMMON_LDFLAGS)
# For usbtest.mod
pkglib_MODULES += usbtest.mod
usbtest_mod_SOURCES = commands/usbtest.c
usbtest_mod_CFLAGS = $(COMMON_CFLAGS)
usbtest_mod_LDFLAGS = $(COMMON_LDFLAGS)
# For usbms.mod
pkglib_MODULES += usbms.mod
usbms_mod_SOURCES = disk/usbms.c
usbms_mod_CFLAGS = $(COMMON_CFLAGS)
usbms_mod_LDFLAGS = $(COMMON_LDFLAGS)
# For usb_keyboard.mod
pkglib_MODULES += usb_keyboard.mod
usb_keyboard_mod_SOURCES = term/usb_keyboard.c
usb_keyboard_mod_CFLAGS = $(COMMON_CFLAGS)
usb_keyboard_mod_LDFLAGS = $(COMMON_LDFLAGS)
# For relocator.mod. # For relocator.mod.
pkglib_MODULES += relocator.mod pkglib_MODULES += relocator.mod
relocator_mod_SOURCES = lib/$(target_cpu)/relocator.c lib/$(target_cpu)/relocator_asm.S relocator_mod_SOURCES = lib/$(target_cpu)/relocator.c lib/$(target_cpu)/relocator_asm.S

View file

@ -19,7 +19,6 @@
#include <grub/term.h> #include <grub/term.h>
#include <grub/machine/machine.h> #include <grub/machine/machine.h>
#include <grub/machine/console.h>
#include <grub/time.h> #include <grub/time.h>
#include <grub/cpu/io.h> #include <grub/cpu/io.h>
#include <grub/misc.h> #include <grub/misc.h>