[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[cdi-devel] [PATCH] usb: uhci_do_packet interface rework
Signed-off-by: Kevin Wolf <kevin@xxxxxxxxxx>
---
usb/include/usb.h | 5 ++---
usb/main.c | 5 +----
usb/uhci.c | 30 +++++++++++++++---------------
3 files changed, 18 insertions(+), 22 deletions(-)
diff --git a/usb/include/usb.h b/usb/include/usb.h
index 223ecf7..deb7dd5 100644
--- a/usb/include/usb.h
+++ b/usb/include/usb.h
@@ -136,15 +136,14 @@ struct cdi_hci {
};
struct usb_device;
+struct usb_packet;
struct hci {
struct cdi_pci_device* pcidev;
hci_type_t type;
cdi_list_t (* find_devices)(struct hci*);
void (* activate_device)(struct hci*, struct usb_device*);
- int (* do_packet)(struct hci*, int frame, int type, int device,
- int endpoint, int low_speed, uintptr_t phys_data, int length,
- int datatoggle);
+ int (* do_packet)(struct usb_device*, struct usb_packet* packet);
int (* get_frame)(struct hci*);
};
diff --git a/usb/main.c b/usb/main.c
index 02079e2..2491343 100644
--- a/usb/main.c
+++ b/usb/main.c
@@ -130,10 +130,7 @@ int usb_do_packet(struct usb_device* device, struct usb_packet* packet)
}
while (error == USB_NAK) {
- error = device->hci->do_packet(device->hci,
- (device->hci->get_frame(device->hci) + 3) & 0x3FF,
- packet->type, device->id, packet->endpoint, device->low_speed,
- packet->phys_data, packet->length, packet->datatoggle);
+ error = device->hci->do_packet(device, packet);
}
if (error == USB_STALLED) {
diff --git a/usb/uhci.c b/usb/uhci.c
index 208000e..413c7f5 100644
--- a/usb/uhci.c
+++ b/usb/uhci.c
@@ -53,9 +53,8 @@ static struct cdi_driver cdi_driver;
static cdi_list_t active_transfers;
static void uhci_handler(struct cdi_device* dev);
-static int enqueue_request(struct hci* gen_hci, int frame, int type, int device,
- int endpoint, int low_speed, uintptr_t phys_data, int length,
- int datatoggle);
+static int uhci_do_packet(struct usb_device* usbdev,
+ struct usb_packet* packet);
static cdi_list_t get_devices(struct hci* gen_hci);
static void activate_device(struct hci* gen_hci, struct usb_device* device);
static int get_current_frame(struct hci* gen_hci);
@@ -167,7 +166,7 @@ void uhci_init(struct cdi_device* cdi_hci)
dprintf(" Fertig\n");
gen_hci->find_devices = &get_devices;
gen_hci->activate_device = &activate_device;
- gen_hci->do_packet = &enqueue_request;
+ gen_hci->do_packet = &uhci_do_packet;
gen_hci->get_frame = &get_current_frame;
enumerate_hci(gen_hci);
@@ -228,17 +227,18 @@ static inline int tsl(volatile int* variable)
static volatile int locked = 0;
-static int enqueue_request(struct hci* gen_hci, int frame, int type, int device,
- int endpoint, int low_speed, uintptr_t phys_data, int length,
- int datatoggle)
+static int uhci_do_packet(struct usb_device* usbdev,
+ struct usb_packet* packet)
{
- struct uhci* uhci = (struct uhci*) gen_hci;
+ struct uhci* uhci = (struct uhci*) usbdev->hci;
struct uhci_td* td;
struct uhci_qh* qh;
uintptr_t ptd, pqh;
struct transfer* addr;
int timeout;
+ int frame = (usbdev->hci->get_frame(usbdev->hci) + 3) & 0x3FF;
+
if (cdi_alloc_phys_mem(sizeof(struct uhci_td),
(void**) &td, (void**) &ptd) == -1)
{
@@ -263,14 +263,14 @@ static int enqueue_request(struct hci* gen_hci, int frame, int type, int device,
td->next = 1; //Invalid
td->active = 1;
td->ioc = 1;
- td->data_toggle = datatoggle;
- td->low_speed = low_speed;
+ td->data_toggle = packet->datatoggle;
+ td->low_speed = usbdev->low_speed;
td->errors = 1;
- td->pid = type;
- td->device = device;
- td->endpoint = endpoint;
- td->maxlen = length ? length - 1 : 0x7FF;
- td->buffer = phys_data;
+ td->pid = packet->type;
+ td->device = usbdev->id;
+ td->endpoint = packet->endpoint;
+ td->maxlen = packet->length ? packet->length - 1 : 0x7FF;
+ td->buffer = packet->phys_data;
addr = malloc(sizeof(struct transfer));
addr->virt = td;
addr->phys = ptd;
--
1.6.0.2