USB, to add ohci/ehci. Make fifo comply with iorec
This commit is contained in:
@@ -78,7 +78,9 @@ CSRCS= \
|
|||||||
$(SRCDIR)/usb_kbd.c \
|
$(SRCDIR)/usb_kbd.c \
|
||||||
$(SRCDIR)/usb_mem.c \
|
$(SRCDIR)/usb_mem.c \
|
||||||
$(SRCDIR)/usb_mouse.c \
|
$(SRCDIR)/usb_mouse.c \
|
||||||
$(SRCDIR)/usb_storage.c
|
$(SRCDIR)/usb_storage.c \
|
||||||
|
$(SRCDIR)/ehci-hcd.c \
|
||||||
|
$(SRCDIR)/ohci-hcd.c
|
||||||
|
|
||||||
ASRCS= \
|
ASRCS= \
|
||||||
$(SRCDIR)/startcf.S \
|
$(SRCDIR)/startcf.S \
|
||||||
|
|||||||
@@ -1,6 +1,10 @@
|
|||||||
#ifndef _CONFIG_H_
|
#ifndef _CONFIG_H_
|
||||||
#define _CONFIG_H_
|
#define _CONFIG_H_
|
||||||
|
|
||||||
|
#ifndef COLDFIRE
|
||||||
|
#define COLDFIRE
|
||||||
|
#endif
|
||||||
|
|
||||||
/* DEBUG */
|
/* DEBUG */
|
||||||
#define DEBUG
|
#define DEBUG
|
||||||
|
|
||||||
|
|||||||
@@ -12,16 +12,31 @@
|
|||||||
|
|
||||||
#include <inttypes.h>
|
#include <inttypes.h>
|
||||||
|
|
||||||
|
/*
|
||||||
|
* FIFO
|
||||||
|
*
|
||||||
|
* Make this look exactly like IOREC, so that
|
||||||
|
* we can interchange the two. But ignore the
|
||||||
|
* low, high watermarks. For now.
|
||||||
|
*
|
||||||
|
* in IOREC, the notion of head/tail is opposite
|
||||||
|
* to ours. So we place our head/tail, in the
|
||||||
|
* equivalent positions as TOS use is. So
|
||||||
|
* we can use this structure, intermittantly
|
||||||
|
* with TOS.
|
||||||
|
*/
|
||||||
typedef struct
|
typedef struct
|
||||||
{
|
{
|
||||||
char * buf;
|
char * buf;
|
||||||
int head;
|
int16_t size;
|
||||||
int tail;
|
int16_t tail;
|
||||||
int size;
|
int16_t head;
|
||||||
|
int16_t low;
|
||||||
|
int16_t high;
|
||||||
} fifo_t;
|
} fifo_t;
|
||||||
|
|
||||||
void fifo_init(fifo_t*, char*, int);
|
void fifo_init(fifo_t*, char*, int16_t);
|
||||||
void fifo_advance(fifo_t*, int*);
|
void fifo_advance(fifo_t*, int16_t*);
|
||||||
|
|
||||||
uint8_t fifo_get(fifo_t*);
|
uint8_t fifo_get(fifo_t*);
|
||||||
void fifo_put(fifo_t*, uint8_t);
|
void fifo_put(fifo_t*, uint8_t);
|
||||||
@@ -34,7 +49,7 @@ int fifo_unused(fifo_t*);
|
|||||||
int fifo_full(fifo_t*);
|
int fifo_full(fifo_t*);
|
||||||
int fifo_empty(fifo_t*);
|
int fifo_empty(fifo_t*);
|
||||||
|
|
||||||
int fifo_read(fifo_t*, unsigned char *, int);
|
int fifo_read(fifo_t*, unsigned char *, int16_t);
|
||||||
int fifo_write(fifo_t*, const unsigned char*, int);
|
int fifo_write(fifo_t*, const unsigned char*, int16_t);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -28,13 +28,6 @@
|
|||||||
#include "usb.h"
|
#include "usb.h"
|
||||||
#include "ehci.h"
|
#include "ehci.h"
|
||||||
|
|
||||||
#if defined(COLDFIRE) && defined(NETWORK) && defined(LWIP)
|
|
||||||
#include "../freertos/FreeRTOS.h"
|
|
||||||
#include "../freertos/queue.h"
|
|
||||||
extern xQueueHandle queue_poll_hub;
|
|
||||||
#define USB_POLL_HUB
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#undef DEBUG
|
#undef DEBUG
|
||||||
#undef SHOW_INFO
|
#undef SHOW_INFO
|
||||||
|
|
||||||
|
|||||||
@@ -8,12 +8,14 @@
|
|||||||
#include <fifo.h>
|
#include <fifo.h>
|
||||||
|
|
||||||
//This initializes the FIFO structure with the given buffer and size
|
//This initializes the FIFO structure with the given buffer and size
|
||||||
void fifo_init(fifo_t * f, char * buf, int size)
|
void fifo_init(fifo_t * f, char * buf, int16_t size)
|
||||||
{
|
{
|
||||||
f->head = 0;
|
f->head = 0;
|
||||||
f->tail = 0;
|
f->tail = 0;
|
||||||
f->size = size;
|
f->size = size;
|
||||||
f->buf = buf;
|
f->buf = buf;
|
||||||
|
f->low = 0;
|
||||||
|
f->high = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Get one byte from the fifo buffer
|
// Get one byte from the fifo buffer
|
||||||
@@ -21,11 +23,10 @@ uint8_t fifo_get(fifo_t *f)
|
|||||||
{
|
{
|
||||||
uint8_t ch = 0;
|
uint8_t ch = 0;
|
||||||
|
|
||||||
if( f->tail != f->head && f->tail < f->size )
|
if( !fifo_empty(f) )
|
||||||
{
|
{
|
||||||
ch = f->buf[f->tail++];
|
fifo_advance(f,&f->tail);
|
||||||
if( f->tail >= f->size )
|
ch = f->buf[f->tail];
|
||||||
f->tail = 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return ch;
|
return ch;
|
||||||
@@ -34,10 +35,10 @@ uint8_t fifo_get(fifo_t *f)
|
|||||||
// Put one byte into the buffer
|
// Put one byte into the buffer
|
||||||
void fifo_put(fifo_t *f, uint8_t byte)
|
void fifo_put(fifo_t *f, uint8_t byte)
|
||||||
{
|
{
|
||||||
if( f->head == f->tail || f->head >= f->size )
|
if( fifo_unused(f) <= 0 )
|
||||||
return;
|
return;
|
||||||
f->buf[f->head] = byte;
|
|
||||||
fifo_advance(f,&f->head);
|
fifo_advance(f,&f->head);
|
||||||
|
f->buf[f->head] = byte;
|
||||||
}
|
}
|
||||||
|
|
||||||
void fifo_clear(fifo_t *f)
|
void fifo_clear(fifo_t *f)
|
||||||
@@ -71,7 +72,7 @@ int fifo_empty(fifo_t *f)
|
|||||||
return (f->head == f->tail);
|
return (f->head == f->tail);
|
||||||
}
|
}
|
||||||
|
|
||||||
void fifo_advance(fifo_t *f, int *ix)
|
void fifo_advance(fifo_t *f, int16_t *ix)
|
||||||
{
|
{
|
||||||
if( ++*ix > f->size )
|
if( ++*ix > f->size )
|
||||||
*ix=0;
|
*ix=0;
|
||||||
@@ -79,14 +80,13 @@ void fifo_advance(fifo_t *f, int *ix)
|
|||||||
|
|
||||||
//This reads at most nbytes bytes from the FIFO
|
//This reads at most nbytes bytes from the FIFO
|
||||||
//The number of bytes read is returned
|
//The number of bytes read is returned
|
||||||
int fifo_read(fifo_t *f, unsigned char *buf, int nbytes){
|
int fifo_read(fifo_t *f, unsigned char *buf, int16_t nbytes){
|
||||||
int n = 0;
|
int n = 0;
|
||||||
|
|
||||||
while( n < nbytes && !fifo_empty(f) )
|
while( n < nbytes && !fifo_empty(f) )
|
||||||
{
|
{
|
||||||
n++;
|
n++;
|
||||||
*buf++ = f->buf[f->tail];
|
*buf++ = fifo_get(f);
|
||||||
fifo_advance(f,&f->tail);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return n;
|
return n;
|
||||||
@@ -95,13 +95,12 @@ int fifo_read(fifo_t *f, unsigned char *buf, int nbytes){
|
|||||||
//This writes up to nbytes bytes to the FIFO
|
//This writes up to nbytes bytes to the FIFO
|
||||||
//If the head runs in to the tail, not all bytes are written
|
//If the head runs in to the tail, not all bytes are written
|
||||||
//The number of bytes written is returned
|
//The number of bytes written is returned
|
||||||
int fifo_write(fifo_t *f, const unsigned char *buf, int nbytes){
|
int fifo_write(fifo_t *f, const unsigned char *buf, int16_t nbytes){
|
||||||
int n = 0;
|
int n = 0;
|
||||||
|
|
||||||
while( n < nbytes && !fifo_full(f) )
|
while( n < nbytes && !fifo_full(f) )
|
||||||
{
|
{
|
||||||
f->buf[f->head] = *buf++;
|
fifo_put(f,*buf++);
|
||||||
fifo_advance(f,&f->head);
|
|
||||||
n++;
|
n++;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -49,14 +49,6 @@
|
|||||||
#include "usb.h"
|
#include "usb.h"
|
||||||
#include "ohci.h"
|
#include "ohci.h"
|
||||||
|
|
||||||
#if defined(COLDFIRE) && defined(NETWORK) && defined(LWIP)
|
|
||||||
#include "../freertos/FreeRTOS.h"
|
|
||||||
#include "../freertos/queue.h"
|
|
||||||
extern xQueueHandle queue_poll_hub;
|
|
||||||
#define USB_POLL_HUB
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
#undef OHCI_USE_NPS /* force NoPowerSwitching mode */
|
#undef OHCI_USE_NPS /* force NoPowerSwitching mode */
|
||||||
|
|
||||||
#undef OHCI_VERBOSE_DEBUG /* not always helpful */
|
#undef OHCI_VERBOSE_DEBUG /* not always helpful */
|
||||||
|
|||||||
@@ -48,18 +48,6 @@
|
|||||||
#include "config.h"
|
#include "config.h"
|
||||||
#include "usb.h"
|
#include "usb.h"
|
||||||
|
|
||||||
#if defined(COLDFIRE) && defined(NETWORK) && defined(LWIP)
|
|
||||||
#include "../freertos/FreeRTOS.h"
|
|
||||||
#include "../freertos/task.h"
|
|
||||||
#include "../freertos/queue.h"
|
|
||||||
#include "../freertos/semphr.h"
|
|
||||||
#define USB_POLL_HUB
|
|
||||||
#ifdef CONFIG_USB_STORAGE
|
|
||||||
extern int usb_stor_curr_dev;
|
|
||||||
extern unsigned long usb_1st_disk_drive;
|
|
||||||
#endif
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if defined(CONFIG_USB_UHCI) || defined(CONFIG_USB_OHCI) || defined(CONFIG_USB_EHCI)
|
#if defined(CONFIG_USB_UHCI) || defined(CONFIG_USB_OHCI) || defined(CONFIG_USB_EHCI)
|
||||||
|
|
||||||
#undef USB_DEBUG
|
#undef USB_DEBUG
|
||||||
@@ -1181,7 +1169,7 @@ void usb_scan_devices(void *priv)
|
|||||||
dev = usb_alloc_new_device(bus_index, priv);
|
dev = usb_alloc_new_device(bus_index, priv);
|
||||||
if (usb_new_device(dev))
|
if (usb_new_device(dev))
|
||||||
{
|
{
|
||||||
Cconws("No USB Device found\r\n");
|
xprintf("No USB Device found\r\n");
|
||||||
USB_PRINTF("No USB Device found\r\n");
|
USB_PRINTF("No USB Device found\r\n");
|
||||||
if (dev != NULL )
|
if (dev != NULL )
|
||||||
dev_index[bus_index]--;
|
dev_index[bus_index]--;
|
||||||
@@ -1197,13 +1185,13 @@ void usb_scan_devices(void *priv)
|
|||||||
if (drv_usb_kbd_init() < 0)
|
if (drv_usb_kbd_init() < 0)
|
||||||
USB_PRINTF("No USB keyboard found\r\n");
|
USB_PRINTF("No USB keyboard found\r\n");
|
||||||
else
|
else
|
||||||
Cconws("USB HID keyboard driver installed\r\n");
|
xprintf("USB HID keyboard driver installed\r\n");
|
||||||
#endif /* CONFIG_USB_KEYBOARD */
|
#endif /* CONFIG_USB_KEYBOARD */
|
||||||
#ifdef CONFIG_USB_MOUSE
|
#ifdef CONFIG_USB_MOUSE
|
||||||
if (drv_usb_mouse_init() < 0)
|
if (drv_usb_mouse_init() < 0)
|
||||||
USB_PRINTF("No USB mouse found\r\n");
|
USB_PRINTF("No USB mouse found\r\n");
|
||||||
else
|
else
|
||||||
Cconws("USB HID mouse driver installed\r\n");
|
xprintf("USB HID mouse driver installed\r\n");
|
||||||
#endif /* CONFIG_USB_MOUSE */
|
#endif /* CONFIG_USB_MOUSE */
|
||||||
#endif
|
#endif
|
||||||
USB_PRINTF("Scan end\r\n");
|
USB_PRINTF("Scan end\r\n");
|
||||||
|
|||||||
Reference in New Issue
Block a user