56#define USBETH_TRACE( x, y ... ) xprintf( x, ##y )
58#define USBETH_TRACE( x, y ... ) ((void)0)
64#define ALIGN(n,align) (((n)+((align)-1)) & ~((align)-1))
66#define usb_dma_alloc(n) (KMALLOC(ALIGN((n),CACHE_ALIGN),CACHE_ALIGN))
67#define usb_dma_free(p) (KFREE(p))
78static void hexdump(
unsigned char *src,
int srclen,
int rowlen,
int rows )
80 unsigned char *rowptr;
81 unsigned char *srcstp;
82 unsigned char *byteptr;
84 srcstp = src + srclen;
86 for( rowptr = src; rowptr < src + rowlen * rows; rowptr += rowlen ) {
87 for( byteptr = rowptr; byteptr < rowptr + rowlen && byteptr < srcstp; byteptr++ ) {
95#define hexdump(src,srclen,rowlen,rows) ((void)0)
104static const char *VENDOR_NAMES[] = {
108static const int ID_TBL[] = {
128static int klsi_send_eth_frame(
void *ctx,
hsaddr_t buf,
int len );
129static int klsi_get_eth_frame(
void *ctx,
hsaddr_t buf );
130static int klsi_data_rx(
void *ctx );
131static int klsi_get_dev_addr(
void *ctx,
hsaddr_t mac_addr );
147 (
uint8_t *)kue_code_seg,
sizeof(kue_code_seg) );
150 (
uint8_t *)kue_fix_seg,
sizeof(kue_fix_seg) );
153 (
uint8_t *)kue_trig_seg,
sizeof(kue_trig_seg) );
155 cfe_sleep(CFE_HZ/10);
167 const int *
ptr=ID_TBL;
174 while( *
ptr != -1 ) {
175 if( (vendor_id ==
ptr[0]) && (device_id ==
ptr[1]) ) {
182 xprintf(
"Unknown Kawasaki USB-Ethernet device\n" );
189 if ((bcd_dev & 0x0200) == 0) {
193 cfe_sleep(CFE_HZ/10);
202 printf(
"klsi [dev %04x] ether descriptor\n", bcd_dev);
204 printf(
" %02x", ((
uint8_t *)desc)[i]);
209 memcpy( softc->
mac_addr, desc->klsi_macaddr, 6);
216 xprintf(
"%s USB-Ethernet Adapter (%a)\n",
222static int klsi_get_dev_addr(
void *ctx,
hsaddr_t mac_addr )
225 hs_memcpy_to_hs( mac_addr, softc->
mac_addr, 6 );
237static int klsi_data_rx(
void *ctx )
244static int klsi_get_eth_frame(
void *ctx,
hsaddr_t buf )
251 rxbuf = softc->
rxbuf;
257 len = rxbuf[0] + (rxbuf[1] << 8);
264 xprintf(
"Incoming packet :\n" );
265 hexdump( rxbuf, len, 16, len / 16 + 1 );
267 hs_memcpy_to_hs( buf, rxbuf, len );
270 klsi_queue_rx( softc );
273 xprintf(
"Bulk data is not available yet!\n" );
278static int klsi_send_eth_frame(
void *ctx,
hsaddr_t buf,
int len )
283 unsigned char *txbuf;
286 txbuf[0] = txlen & 0xFF;
287 txbuf[1] = (txlen >> 8) & 0xFF;
288 hs_memcpy_from_hs( &txbuf[2], buf, txlen );
293 txlen += 64 - (txlen % 64);
296 xprintf(
"Outgoing packet :\n" );
297 hexdump( txbuf, txlen, 16, txlen / 16 + 1 );
316 klsi_queue_rx( softc );
362 if( softc ==
NULL ) {
363 xprintf(
"Failed to allocate softc memory.\n" );
371 if (ifdscr ==
NULL) {
372 xprintf(
"USBETH: ERROR...no interace descriptor\n");
376 for (idx = 0; idx < 2; idx++) {
384 if (!indscr || !outdscr) {
389 xprintf(
"USBETH: ERROR...no endpoint descriptors\n");
397 if (klsi_init_device(softc) < 0)
408 klsi_open_device( softc );
428static int klsi_detach(
usbdev_t *dev)
434 klsi_close_device ( softc );
usb_driver_t usbklsi_driver
#define hexdump(src, srclen, rowlen, rows)
const cfe_driver_t usbklsidrv
struct klsi_softc_s klsi_softc_t
#define KMALLOC(size, align)
uint8_t bConfigurationValue
usb_config_descr_t * ud_cfgdescr
usb_device_descr_t ud_devdescr
#define USBREQ_TYPE_VENDOR
#define USB_ENDPOINT_DESCRIPTOR_TYPE
#define USB_ENDPOINT_DIR_OUT(addr)
#define USB_INTERFACE_DESCRIPTOR_TYPE
void * usb_find_cfg_descr(usbdev_t *dev, int dtype, int idx)
int usb_simple_request(usbdev_t *dev, uint8_t reqtype, int bRequest, int wValue, int wIndex)
int usb_std_request(usbdev_t *dev, uint8_t bmRequestType, uint8_t bRequest, uint16_t wValue, uint16_t wIndex, uint8_t *buffer, int length)
int usb_sync_request(usbreq_t *ur)
usbreq_t * usb_make_request(usbdev_t *dev, int epaddr, uint8_t *buf, int length, int flags)
void usb_free_request(usbreq_t *ur)
void usb_poll(usbbus_t *bus)
int usb_queue_request(usbreq_t *ur)
int usb_get_device_descriptor(usbdev_t *dev, usb_device_descr_t *dscr, int smallflg)
int usb_set_configuration(usbdev_t *dev, int config)
int usb_open_pipe(usbdev_t *dev, usb_endpoint_descr_t *epdesc)
int usbeth_register(usbeth_disp_t *disp, void *softc)
void usbeth_unregister(void *softc)
#define KLSI_SET_PKT_FILTER
#define KLSI_SET_URB_SIZE
struct klsi_ether_desc_s klsi_ether_desc_t
#define KLSI_RX_BROADCAST
#define KLSI_GET_ETH_DESC