diff options
author | joe <joe@FreeBSD.org> | 2002-07-31 10:05:26 +0000 |
---|---|---|
committer | joe <joe@FreeBSD.org> | 2002-07-31 10:05:26 +0000 |
commit | 39fe82b49a53ddbc062d4825e0a05fd3b8e5e0e1 (patch) | |
tree | 3288bb76567a0477890907dd42e1757b746e1106 | |
parent | 38c0bac80825eff60a250b130e7611b0d9cb340e (diff) | |
download | FreeBSD-src-39fe82b49a53ddbc062d4825e0a05fd3b8e5e0e1.zip FreeBSD-src-39fe82b49a53ddbc062d4825e0a05fd3b8e5e0e1.tar.gz |
MFNetBSD: uvisor.c (1.14, 1.15)
Add support for Palm (M500, M505, M125) and Sony devices (Clie 4.0 and 4.1).
-rw-r--r-- | sys/dev/usb/usbdevs | 5 | ||||
-rw-r--r-- | sys/dev/usb/uvisor.c | 60 |
2 files changed, 56 insertions, 9 deletions
diff --git a/sys/dev/usb/usbdevs b/sys/dev/usb/usbdevs index 1ee4f56..cf61517 100644 --- a/sys/dev/usb/usbdevs +++ b/sys/dev/usb/usbdevs @@ -878,6 +878,9 @@ product OMNIVISION OV511PLUS 0xa511 OV511+ Camera /* Palm Computing, Inc. product */ product PALM SERIAL 0x0080 USB Serial Adaptor +product PALM M500 0x0001 Palm m500 +product PALM M505 0x0002 Palm m505 +product PALM M125 0x0040 Palm m125 /* Panasonic products */ product PANASONIC SDCAAE 0x1b00 MultiMediaCard Adapter @@ -1010,6 +1013,8 @@ product SOLIDYEAR KEYBOARD 0x2101 Solid Year USB keyboard product SONY DSC 0x0010 DSC cameras product SONY MSACUS1 0x002d Memorystick MSAC-US1 product SONY MSC 0x0032 MSC memory stick slot +product SONY CLIE_40 0x0066 Sony Clie v4.0 +product SONY CLIE_41 0x009a Sony Clie v4.1 /* STMicroelectronics products */ product STMICRO COMMUNICATOR 0x7554 USB Communicator diff --git a/sys/dev/usb/uvisor.c b/sys/dev/usb/uvisor.c index fb64918..7fca6a7 100644 --- a/sys/dev/usb/uvisor.c +++ b/sys/dev/usb/uvisor.c @@ -8,9 +8,9 @@ * 1.11 needed ucom has an "info" attach message - use it * 1.12 not needed rcsids * 1.13 already merged extra arg to usbd_do_request_flags - * 1.14 needed sony and palm support - * 1.15 needed sony clie - * 1.16 merged trailing whites + * 1.14 already merged sony and palm support + * 1.15 already merged sony clie + * 1.16 already merged trailing whites */ /* @@ -125,7 +125,6 @@ struct uvisor_connection_info { }; #define UVISOR_CONNECTION_INFO_SIZE 18 - /* struct uvisor_connection_info.connection[x].port defines: */ #define UVISOR_ENDPOINT_1 0x01 #define UVISOR_ENDPOINT_2 0x02 @@ -137,12 +136,19 @@ struct uvisor_connection_info { #define UVISOR_FUNCTION_CONSOLE 0x03 #define UVISOR_FUNCTION_REMOTE_FILE_SYS 0x04 +/* + * Unknown PalmOS stuff. + */ +#define UVISOR_GET_PALM_INFORMATION 0x04 +#define UVISOR_GET_PALM_INFORMATION_LEN 0x14 + #define UVISORIBUFSIZE 1024 #define UVISOROBUFSIZE 1024 struct uvisor_softc { struct ucom_softc sc_ucom; + u_int16_t sc_flags; }; Static usbd_status uvisor_init(struct uvisor_softc *); @@ -182,6 +188,22 @@ DRIVER_MODULE(uvisor, uhub, uvisor_driver, ucom_devclass, usbd_driver_load, 0); MODULE_DEPEND(uvisor, ucom, UCOM_MINVER, UCOM_PREFVER, UCOM_MAXVER); MODULE_VERSION(uvisor, UVISOR_MODVER); +struct uvisor_type { + struct usb_devno uv_dev; + u_int16_t uv_flags; +#define PALM4 0x0001 +}; +static const struct uvisor_type uvisor_devs[] = { + {{ USB_VENDOR_HANDSPRING, USB_PRODUCT_HANDSPRING_VISOR }, 0 }, + {{ USB_VENDOR_PALM, USB_PRODUCT_PALM_M500 }, PALM4 }, + {{ USB_VENDOR_PALM, USB_PRODUCT_PALM_M505 }, PALM4 }, + {{ USB_VENDOR_PALM, USB_PRODUCT_PALM_M125 }, PALM4 }, + {{ USB_VENDOR_SONY, USB_PRODUCT_SONY_CLIE_40 }, PALM4 }, + {{ USB_VENDOR_SONY, USB_PRODUCT_SONY_CLIE_41 }, 0 }, +/* {{ USB_VENDOR_SONY, USB_PRODUCT_SONY_CLIE_25 }, PALM4 },*/ +}; +#define uvisor_lookup(v, p) ((const struct uvisor_type *)usb_lookup(uvisor_devs, v, p)) + USB_MATCH(uvisor) { @@ -193,11 +215,8 @@ USB_MATCH(uvisor) DPRINTFN(20,("uvisor: vendor=0x%x, product=0x%x\n", uaa->vendor, uaa->product)); - if (uaa->vendor == USB_VENDOR_HANDSPRING && - uaa->product == USB_PRODUCT_HANDSPRING_VISOR) - return (UMATCH_VENDOR_PRODUCT); - - return (UMATCH_NONE); + return (uvisor_lookup(uaa->vendor, uaa->product) != NULL ? + UMATCH_VENDOR_PRODUCT : UMATCH_NONE); } USB_ATTACH(uvisor) @@ -247,6 +266,8 @@ USB_ATTACH(uvisor) printf("%s: %s\n", devname, devinfo); + sc->sc_flags = uvisor_lookup(uaa->vendor, uaa->product)->uv_flags; + id = usbd_get_interface_descriptor(iface); ucom->sc_udev = dev; @@ -362,6 +383,7 @@ uvisor_init(struct uvisor_softc *sc) struct uvisor_connection_info coninfo; int actlen; uWord avail; + char buffer[256]; DPRINTF(("uvisor_init: getting connection info\n")); req.bmRequestType = UT_READ_VENDOR_ENDPOINT; @@ -407,6 +429,26 @@ uvisor_init(struct uvisor_softc *sc) } #endif + if (sc->sc_flags & PALM4) { + /* Palm OS 4.0 Hack */ + req.bmRequestType = UT_READ_VENDOR_ENDPOINT; + req.bRequest = UVISOR_GET_PALM_INFORMATION; + USETW(req.wValue, 0); + USETW(req.wIndex, 0); + USETW(req.wLength, UVISOR_GET_PALM_INFORMATION_LEN); + err = usbd_do_request(sc->sc_ucom.sc_udev, &req, buffer); + if (err) + return (err); + req.bmRequestType = UT_READ_VENDOR_ENDPOINT; + req.bRequest = UVISOR_GET_PALM_INFORMATION; + USETW(req.wValue, 0); + USETW(req.wIndex, 0); + USETW(req.wLength, UVISOR_GET_PALM_INFORMATION_LEN); + err = usbd_do_request(sc->sc_ucom.sc_udev, &req, buffer); + if (err) + return (err); + } + DPRINTF(("uvisor_init: getting available bytes\n")); req.bmRequestType = UT_READ_VENDOR_ENDPOINT; req.bRequest = UVISOR_REQUEST_BYTES_AVAILABLE; |