Linux Audio

Check our new training course

Embedded Linux Audio

Check our new training course
with Creative Commons CC-BY-SA
lecture materials

Bootlin logo

Elixir Cross Referencer

Loading...
/* Header for CPC-USB Driver ********************
 * Copyright 1999, 2000, 2001
 *
 * Company:  EMS Dr. Thomas Wuensche
 *           Sonnenhang 3
 *           85304 Ilmmuenster
 *           Phone: +49-8441-490260
 *           Fax:   +49-8441-81860
 *           email: support@ems-wuensche.com
 *           WWW:   www.ems-wuensche.com
 */

#ifndef CPCUSB_H
#define CPCUSB_H

#undef err
#undef dbg
#undef info

/* Use our own dbg macro */
#define dbg(format, arg...) do { if (debug) printk(KERN_INFO "CPC-USB: " format "\n" , ## arg); } while (0)
#define info(format, arg...) do { printk(KERN_INFO "CPC-USB: " format "\n" , ## arg); } while (0)
#define err(format, arg...) do { printk(KERN_INFO "CPC-USB(ERROR): " format "\n" , ## arg); } while (0)

#define CPC_USB_CARD_CNT      4

typedef struct CPC_USB_READ_URB {
	unsigned char *buffer;	/* the buffer to send data */
	size_t size;		/* the size of the send buffer */
	struct urb *urb;	/* the urb used to send data */
} CPC_USB_READ_URB_T;

typedef struct CPC_USB_WRITE_URB {
	unsigned char *buffer;	/* the buffer to send data */
	size_t size;		/* the size of the send buffer */
	struct urb *urb;	/* the urb used to send data */
	atomic_t busy;		/* true if write urb is busy */
	struct completion finished;	/* wait for the write to finish */
} CPC_USB_WRITE_URB_T;

#define CPC_USB_URB_CNT  10

typedef struct CPC_USB {
	struct usb_device *udev;	/* save off the usb device pointer */
	struct usb_interface *interface;	/* the interface for this device */
	unsigned char minor;	/* the starting minor number for this device */
	unsigned char num_ports;	/* the number of ports this device has */
	int num_intr_in;	/* number of interrupt in endpoints we have */
	int num_bulk_in;	/* number of bulk in endpoints we have */
	int num_bulk_out;	/* number of bulk out endpoints we have */

	CPC_USB_READ_URB_T urbs[CPC_USB_URB_CNT];

	unsigned char intr_in_buffer[4];	/* interrupt transfer buffer */
	struct urb *intr_in_urb;	/* interrupt transfer urb */

	CPC_USB_WRITE_URB_T wrUrbs[CPC_USB_URB_CNT];

	int open;		/* if the port is open or not */
	int present;		/* if the device is not disconnected */
	struct semaphore sem;	/* locks this structure */

	int free_slots;		/* free send slots of CPC-USB */
	int idx;

	spinlock_t slock;

	char serialNumber[128];	/* serial number */
	int productId;		/* product id to differ between M16C and LPC2119 */
	CPC_CHAN_T *chan;
} CPC_USB_T;

#define CPCTable               CPCUSB_Table

#define CPC_DRIVER_VERSION "0.724"
#define CPC_DRIVER_SERIAL  "not applicable"

#define OBUF_SIZE 255		// 4096

/* read timeouts -- RD_NAK_TIMEOUT * RD_EXPIRE = Number of seconds */
#define RD_NAK_TIMEOUT (10*HZ)	/* Default number of X seconds to wait */
#define RD_EXPIRE 12		/* Number of attempts to wait X seconds */

#define CPC_USB_BASE_MNR 0	/* CPC-USB start at minor 0  */

#endif