Changeset 8e7c9fe in mainline for uspace/drv/bus/usb
- Timestamp:
- 2014-09-12T03:45:25Z (11 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- c53b58e
- Parents:
- 3eb0c85 (diff), 105d8d6 (diff)
Note: this is a merge changeset, the changes displayed below correspond to the merge itself.
Use the(diff)links above to see all the changes relative to each parent. - Location:
- uspace/drv/bus/usb
- Files:
-
- 1 added
- 17 edited
- 1 moved
-
uhci/utils/malloc32.h (modified) (1 diff)
-
usbhid/Makefile (modified) (1 diff)
-
usbhid/blink1/blink1.c (added)
-
usbhid/blink1/blink1.h (moved) (moved from kernel/arch/mips64/include/arch/arch.h ) (2 diffs)
-
usbhid/generic/hiddev.c (modified) (3 diffs)
-
usbhid/generic/hiddev.h (modified) (1 diff)
-
usbhid/kbd/kbddev.c (modified) (1 diff)
-
usbhid/kbd/kbddev.h (modified) (4 diffs)
-
usbhid/mouse/mousedev.h (modified) (2 diffs)
-
usbhid/multimedia/multimedia.c (modified) (1 diff)
-
usbhid/multimedia/multimedia.h (modified) (1 diff)
-
usbhid/subdrivers.c (modified) (3 diffs)
-
usbhid/subdrivers.h (modified) (4 diffs)
-
usbhid/usbhid.c (modified) (1 diff)
-
usbhid/usbhid.ma (modified) (1 diff)
-
usbmast/bo_trans.h (modified) (1 diff)
-
usbmast/main.c (modified) (3 diffs)
-
usbmast/scsi_ms.c (modified) (1 diff)
-
usbmast/scsi_ms.h (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
uspace/drv/bus/usb/uhci/utils/malloc32.h
r3eb0c85 r8e7c9fe 101 101 { 102 102 uintptr_t phys; 103 void *address ;103 void *address = AS_AREA_ANY; 104 104 105 105 const int ret = dmamem_map_anonymous(UHCI_REQUIRED_PAGE_SIZE, -
uspace/drv/bus/usb/usbhid/Makefile
r3eb0c85 r8e7c9fe 50 50 mouse/mousedev.c \ 51 51 multimedia/multimedia.c \ 52 multimedia/keymap.c 52 multimedia/keymap.c \ 53 blink1/blink1.c 53 54 54 55 SOURCES = \ -
uspace/drv/bus/usb/usbhid/blink1/blink1.h
r3eb0c85 r8e7c9fe 1 1 /* 2 * Copyright (c) 20 05Martin Decky2 * Copyright (c) 2014 Martin Decky 3 3 * All rights reserved. 4 4 * … … 27 27 */ 28 28 29 /** @addtogroup mips6429 /** @addtogroup drvusbhid 30 30 * @{ 31 31 */ 32 32 /** @file 33 * USB blink(1) subdriver. 33 34 */ 34 35 35 #ifndef KERN_mips64_ARCH_H_36 #define KERN_mips64_ARCH_H_36 #ifndef USB_HID_BLINK1_H_ 37 #define USB_HID_BLINK1_H_ 37 38 38 #include <typedefs.h> 39 #include <usb/dev/driver.h> 40 #include "../usbhid.h" 39 41 40 #define TASKMAP_MAX_RECORDS 32 41 #define CPUMAP_MAX_RECORDS 32 42 #define BOOTINFO_TASK_NAME_BUFLEN 32 42 /** Container for USB blink(1) device. */ 43 typedef struct { 44 /** DDF blink(1) function */ 45 ddf_fun_t *fun; 46 47 /** USB HID device */ 48 usb_hid_dev_t *hid_dev; 49 } usb_blink1_t; 43 50 44 extern size_t cpu_count; 51 extern const char *HID_BLINK1_FUN_NAME; 52 extern const char *HID_BLINK1_CATEGORY; 45 53 46 typedef struct { 47 void *addr; 48 size_t size; 49 char name[BOOTINFO_TASK_NAME_BUFLEN]; 50 } utask_t; 54 extern int usb_blink1_init(usb_hid_dev_t *, void **); 55 extern void usb_blink1_deinit(usb_hid_dev_t *, void *); 51 56 52 typedef struct { 53 uint32_t cpumap; 54 size_t cnt; 55 utask_t tasks[TASKMAP_MAX_RECORDS]; 56 } bootinfo_t; 57 #endif // USB_HID_BLINK1_H_ 57 58 58 extern void arch_pre_main(void *entry, bootinfo_t *bootinfo); 59 60 #endif 61 62 /** @} 59 /** 60 * @} 63 61 */ -
uspace/drv/bus/usb/usbhid/generic/hiddev.c
r3eb0c85 r8e7c9fe 46 46 #include "usbhid.h" 47 47 48 49 50 48 const usb_endpoint_description_t usb_hid_generic_poll_endpoint_description = { 51 49 .transfer_type = USB_TRANSFER_INTERRUPT, … … 58 56 59 57 const char *HID_GENERIC_FUN_NAME = "hid"; 60 const char *HID_GENERIC_C LASS_NAME= "hid";58 const char *HID_GENERIC_CATEGORY = "hid"; 61 59 62 60 … … 223 221 return true; 224 222 } 223 225 224 /** 226 225 * @} -
uspace/drv/bus/usb/usbhid/generic/hiddev.h
r3eb0c85 r8e7c9fe 38 38 39 39 #include <usb/dev/driver.h> 40 41 struct usb_hid_dev; 40 #include "../usbhid.h" 42 41 43 42 extern const usb_endpoint_description_t 44 43 usb_hid_generic_poll_endpoint_description; 45 44 46 const char *HID_GENERIC_FUN_NAME;47 const char *HID_GENERIC_CLASS_NAME;45 extern const char *HID_GENERIC_FUN_NAME; 46 extern const char *HID_GENERIC_CATEGORY; 48 47 49 48 /** The USB HID generic 'hid' function softstate */ 50 49 typedef struct { 51 struct usb_hid_dev*hid_dev;50 usb_hid_dev_t *hid_dev; 52 51 } usb_hid_gen_fun_t; 53 52 54 int usb_generic_hid_init(struct usb_hid_dev *hid_dev, void **data); 55 56 void usb_generic_hid_deinit(struct usb_hid_dev *hid_dev, void *data); 57 58 bool usb_generic_hid_polling_callback(struct usb_hid_dev *hid_dev, void *data); 53 extern int usb_generic_hid_init(usb_hid_dev_t *, void **); 54 extern void usb_generic_hid_deinit(usb_hid_dev_t *, void *); 55 extern bool usb_generic_hid_polling_callback(usb_hid_dev_t *, void *); 59 56 60 57 #endif // USB_HID_HIDDDEV_H_ -
uspace/drv/bus/usb/usbhid/kbd/kbddev.c
r3eb0c85 r8e7c9fe 666 666 667 667 usb_log_debug("Adding DDF function to category %s...\n", 668 HID_KBD_C LASS_NAME);668 HID_KBD_CATEGORY_NAME); 669 669 ret = ddf_fun_add_to_category(fun, HID_KBD_CATEGORY_NAME); 670 670 if (ret != EOK) { 671 671 usb_log_error( 672 672 "Could not add DDF function to category %s: %s.\n", 673 HID_KBD_C LASS_NAME, str_error(ret));673 HID_KBD_CATEGORY_NAME, str_error(ret)); 674 674 usb_kbd_destroy(kbd_dev); 675 675 if (ddf_fun_unbind(fun) == EOK) { -
uspace/drv/bus/usb/usbhid/kbd/kbddev.h
r3eb0c85 r8e7c9fe 45 45 #include <usb/dev/pipes.h> 46 46 #include <usb/dev/driver.h> 47 47 #include "../usbhid.h" 48 48 #include "kbdrepeat.h" 49 50 struct usb_hid_dev;51 52 49 53 50 /** … … 65 62 typedef struct usb_kbd_t { 66 63 /** Link to HID device structure */ 67 struct usb_hid_dev*hid_dev;68 64 usb_hid_dev_t *hid_dev; 65 69 66 /** Previously pressed keys (not translated to key codes). */ 70 67 int32_t *keys_old; … … 75 72 /** Currently pressed modifiers (bitmap). */ 76 73 uint8_t modifiers; 77 74 78 75 /** Currently active modifiers including locks. Sent to the console. */ 79 unsigned mods;80 76 unsigned int mods; 77 81 78 /** Currently active lock keys. */ 82 unsigned lock_keys;83 79 unsigned int lock_keys; 80 84 81 /** IPC session to client (for sending key events). */ 85 82 async_sess_t *client_sess; 86 83 87 84 /** Information for auto-repeat of keys. */ 88 85 usb_kbd_repeat_t repeat; 89 86 90 87 /** Mutex for accessing the information about auto-repeat. */ 91 88 fibril_mutex_t repeat_mtx; 92 89 93 90 uint8_t *output_buffer; 94 91 95 92 size_t output_size; 96 93 97 94 size_t led_output_size; 98 95 99 96 usb_hid_report_path_t *led_path; 100 97 101 98 int32_t *led_data; 102 99 103 100 /** State of the structure (for checking before use). 104 * 101 * 105 102 * 0 - not initialized 106 103 * 1 - initialized … … 108 105 */ 109 106 int initialized; 110 107 111 108 /** DDF function */ 112 109 ddf_fun_t *fun; 113 110 } usb_kbd_t; 114 111 115 116 117 112 extern const usb_endpoint_description_t usb_hid_kbd_poll_endpoint_description; 118 113 119 const char *HID_KBD_FUN_NAME;120 const char *HID_KBD_CLASS_NAME;114 extern const char *HID_KBD_FUN_NAME; 115 extern const char *HID_KBD_CATEGORY; 121 116 122 123 124 int usb_kbd_init(struct usb_hid_dev *hid_dev, void **data); 125 126 bool usb_kbd_polling_callback(struct usb_hid_dev *hid_dev, void *data); 127 128 int usb_kbd_is_initialized(const usb_kbd_t *kbd_dev); 129 130 int usb_kbd_is_ready_to_destroy(const usb_kbd_t *kbd_dev); 131 132 void usb_kbd_destroy(usb_kbd_t *kbd_dev); 133 134 void usb_kbd_push_ev(usb_kbd_t *kbd_dev, 135 int type, unsigned int key); 136 137 void usb_kbd_deinit(struct usb_hid_dev *hid_dev, void *data); 138 139 int usb_kbd_set_boot_protocol(struct usb_hid_dev *hid_dev); 117 extern int usb_kbd_init(usb_hid_dev_t *, void **); 118 extern bool usb_kbd_polling_callback(usb_hid_dev_t *, void *); 119 extern int usb_kbd_is_initialized(const usb_kbd_t *); 120 extern int usb_kbd_is_ready_to_destroy(const usb_kbd_t *); 121 extern void usb_kbd_destroy(usb_kbd_t *); 122 extern void usb_kbd_push_ev(usb_kbd_t *, int, unsigned int); 123 extern void usb_kbd_deinit(usb_hid_dev_t *, void *); 124 extern int usb_kbd_set_boot_protocol(usb_hid_dev_t *); 140 125 141 126 #endif /* USB_HID_KBDDEV_H_ */ -
uspace/drv/bus/usb/usbhid/mouse/mousedev.h
r3eb0c85 r8e7c9fe 39 39 #include <usb/dev/driver.h> 40 40 #include <async.h> 41 42 struct usb_hid_dev; 43 44 41 #include "../usbhid.h" 45 42 46 43 /** Container for USB mouse device. */ … … 48 45 /** IPC session to consumer. */ 49 46 async_sess_t *mouse_sess; 50 51 /* Mouse buttons statuses. */47 48 /** Mouse buttons statuses. */ 52 49 int32_t *buttons; 53 50 size_t buttons_count; 54 55 /* DDF mouse function */51 52 /** DDF mouse function */ 56 53 ddf_fun_t *mouse_fun; 57 54 } usb_mouse_t; 58 55 59 60 61 56 extern const usb_endpoint_description_t usb_hid_mouse_poll_endpoint_description; 62 57 63 const char *HID_MOUSE_FUN_NAME;64 const char *HID_MOUSE_CATEGORY;58 extern const char *HID_MOUSE_FUN_NAME; 59 extern const char *HID_MOUSE_CATEGORY; 65 60 66 67 68 int usb_mouse_init(struct usb_hid_dev *hid_dev, void **data); 69 70 bool usb_mouse_polling_callback(struct usb_hid_dev *hid_dev, void *data); 71 72 void usb_mouse_deinit(struct usb_hid_dev *hid_dev, void *data); 73 74 int usb_mouse_set_boot_protocol(struct usb_hid_dev *hid_dev); 75 76 61 extern int usb_mouse_init(usb_hid_dev_t *, void **); 62 extern bool usb_mouse_polling_callback(usb_hid_dev_t *, void *); 63 extern void usb_mouse_deinit(usb_hid_dev_t *, void *); 64 extern int usb_mouse_set_boot_protocol(usb_hid_dev_t *); 77 65 78 66 #endif // USB_HID_MOUSEDEV_H_ -
uspace/drv/bus/usb/usbhid/multimedia/multimedia.c
r3eb0c85 r8e7c9fe 1 1 /* 2 * Copyright (c) 2011 Lubos Slovak, Vojtech Horky 2 * Copyright (c) 2011 Lubos Slovak 3 * Copyright (c) 2011 Vojtech Horky 3 4 * All rights reserved. 4 5 * -
uspace/drv/bus/usb/usbhid/multimedia/multimedia.h
r3eb0c85 r8e7c9fe 38 38 39 39 #include <usb/dev/driver.h> 40 #include "../usbhid.h" 40 41 41 struct usb_hid_dev; 42 43 44 45 int usb_multimedia_init(struct usb_hid_dev *hid_dev, void **data); 46 47 void usb_multimedia_deinit(struct usb_hid_dev *hid_dev, void *data); 48 49 bool usb_multimedia_polling_callback(struct usb_hid_dev *hid_dev, void *data); 50 51 42 extern int usb_multimedia_init(usb_hid_dev_t *, void **); 43 extern void usb_multimedia_deinit(usb_hid_dev_t *, void *); 44 extern bool usb_multimedia_polling_callback(usb_hid_dev_t *, void *); 52 45 53 46 #endif // USB_HID_MULTIMEDIA_H_ -
uspace/drv/bus/usb/usbhid/subdrivers.c
r3eb0c85 r8e7c9fe 37 37 #include <usb/hid/usages/core.h> 38 38 #include <usb/hid/hidpath.h> 39 39 #include "kbd/kbddev.h" 40 #include "mouse/mousedev.h" 40 41 #include "multimedia/multimedia.h" 41 #include " mouse/mousedev.h"42 #include "blink1/blink1.h" 42 43 #include "generic/hiddev.h" 43 44 44 45 static const usb_hid_subdriver_usage_t path_kbd[] = { 45 {USB_HIDUT_PAGE_GENERIC_DESKTOP, 46 USB_HIDUT_USAGE_GENERIC_DESKTOP_KEYBOARD}, 46 { 47 USB_HIDUT_PAGE_GENERIC_DESKTOP, 48 USB_HIDUT_USAGE_GENERIC_DESKTOP_KEYBOARD 49 }, 47 50 {0, 0} 48 51 }; 49 52 50 53 static const usb_hid_subdriver_usage_t path_mouse[] = { 51 {USB_HIDUT_PAGE_GENERIC_DESKTOP, USB_HIDUT_USAGE_GENERIC_DESKTOP_MOUSE}, 54 { 55 USB_HIDUT_PAGE_GENERIC_DESKTOP, 56 USB_HIDUT_USAGE_GENERIC_DESKTOP_MOUSE 57 }, 52 58 {0, 0} 53 59 }; 54 60 55 static const usb_hid_subdriver_usage_t multim_key_path[] = { 56 {USB_HIDUT_PAGE_CONSUMER, USB_HIDUT_USAGE_CONSUMER_CONSUMER_CONTROL}, 61 static const usb_hid_subdriver_usage_t path_multim_key[] = { 62 { 63 USB_HIDUT_PAGE_CONSUMER, 64 USB_HIDUT_USAGE_CONSUMER_CONSUMER_CONTROL 65 }, 57 66 {0, 0} 58 67 }; … … 73 82 }, 74 83 { 75 multim_key_path,84 path_multim_key, 76 85 1, 77 86 USB_HID_PATH_COMPARE_BEGIN, … … 98 107 } 99 108 }, 109 { 110 NULL, 111 0, 112 USB_HID_PATH_COMPARE_BEGIN, 113 0x27b8, 114 0x01ed, 115 { 116 .init = usb_blink1_init, 117 .deinit = usb_blink1_deinit, 118 .poll = NULL, 119 .poll_end = NULL 120 } 121 } 100 122 }; 101 123 -
uspace/drv/bus/usb/usbhid/subdrivers.h
r3eb0c85 r8e7c9fe 40 40 #include "kbd/kbddev.h" 41 41 42 43 44 42 typedef struct usb_hid_subdriver_usage { 45 43 int usage_page; … … 47 45 } usb_hid_subdriver_usage_t; 48 46 49 50 51 /** Structure representing the mapping between device requirements and the 47 /** Structure representing the mapping between device requirements and the 52 48 * subdriver supposed to handle this device. 53 49 * … … 55 51 * a new subdriver mapping will be created and used by the HID driver when it 56 52 * searches for appropriate subdrivers for a device. 53 * 57 54 */ 58 55 typedef struct usb_hid_subdriver_mapping { 59 /** Usage path that the device's Input reports must contain.56 /** Usage path that the device's input reports must contain. 60 57 * 61 58 * It is an array of pairs <usage_page, usage>, terminated by a <0, 0> … … 64 61 */ 65 62 const usb_hid_subdriver_usage_t *usage_path; 66 63 67 64 /** Report ID for which the path should apply. */ 68 65 int report_id; 69 70 /** Compare type for the Usage path. */66 67 /** Compare type for the usage path. */ 71 68 int compare; 72 69 73 70 /** Vendor ID (set to -1 if not specified). */ 74 71 int vendor_id; 75 72 76 73 /** Product ID (set to -1 if not specified). */ 77 74 int product_id; 78 75 79 76 /** Subdriver for controlling this device. */ 80 77 const usb_hid_subdriver_t subdriver; 81 78 } usb_hid_subdriver_mapping_t; 82 79 83 84 85 80 extern const usb_hid_subdriver_mapping_t usb_hid_subdrivers[]; 86 81 extern const size_t USB_HID_MAX_SUBDRIVERS; 87 88 89 82 90 83 #endif /* USB_HID_SUBDRIVERS_H_ */ -
uspace/drv/bus/usb/usbhid/usbhid.c
r3eb0c85 r8e7c9fe 415 415 } 416 416 417 /* 418 * 1) subdriver vytvori vlastnu ddf_fun, vlastne ddf_dev_ops, ktore da 419 * do nej. 420 * 2) do tych ops do .interfaces[DEV_IFACE_USBHID (asi)] priradi 421 * vyplnenu strukturu usbhid_iface_t. 422 * 3) klientska aplikacia - musi si rucne vytvorit telefon 423 * (devman_device_connect() - cesta k zariadeniu (/hw/pci0/...) az 424 * k tej fcii. 425 * pouzit usb/classes/hid/iface.h - prvy int je telefon 426 */ 417 /* Initialize subdrivers */ 427 418 bool ok = false; 428 419 for (unsigned i = 0; i < hid_dev->subdriver_count; ++i) { -
uspace/drv/bus/usb/usbhid/usbhid.ma
r3eb0c85 r8e7c9fe 1 100 usb&interface&class=HID&subclass=0x01&protocol=0x011 1000 usb&interface&class=HID&subclass=0x01&protocol=0x01 2 2 1000 usb&interface&class=HID&subclass=0x01&protocol=0x02 3 3 100 usb&interface&class=HID -
uspace/drv/bus/usb/usbmast/bo_trans.h
r3eb0c85 r8e7c9fe 43 43 #include <usb/dev/driver.h> 44 44 #include "usbmast.h" 45 46 #define BULK_IN_EP 047 #define BULK_OUT_EP 148 45 49 46 typedef enum cmd_status { -
uspace/drv/bus/usb/usbmast/main.c
r3eb0c85 r8e7c9fe 82 82 static int usbmast_bd_close(bd_srv_t *); 83 83 static int usbmast_bd_read_blocks(bd_srv_t *, aoff64_t, size_t, void *, size_t); 84 static int usbmast_bd_sync_cache(bd_srv_t *, aoff64_t, size_t); 84 85 static int usbmast_bd_write_blocks(bd_srv_t *, aoff64_t, size_t, const void *, size_t); 85 86 static int usbmast_bd_get_block_size(bd_srv_t *, size_t *); … … 90 91 .close = usbmast_bd_close, 91 92 .read_blocks = usbmast_bd_read_blocks, 93 .sync_cache = usbmast_bd_sync_cache, 92 94 .write_blocks = usbmast_bd_write_blocks, 93 95 .get_block_size = usbmast_bd_get_block_size, … … 344 346 } 345 347 348 /** Synchronize blocks to nonvolatile storage. */ 349 static int usbmast_bd_sync_cache(bd_srv_t *bd, uint64_t ba, size_t cnt) 350 { 351 usbmast_fun_t *mfun = bd_srv_usbmast(bd); 352 353 return usbmast_sync_cache(mfun, ba, cnt); 354 } 355 346 356 /** Write blocks to the device. */ 347 357 static int usbmast_bd_write_blocks(bd_srv_t *bd, uint64_t ba, size_t cnt, -
uspace/drv/bus/usb/usbmast/scsi_ms.c
r3eb0c85 r8e7c9fe 383 383 } 384 384 385 /** Perform SCSI Synchronize Cache command on USB mass storage device. 386 * 387 * @param mfun Mass storage function 388 * @param ba Address of first block 389 * @param nblocks Number of blocks to read 390 * @param data Data to write 391 * 392 * @return Error code 393 */ 394 int usbmast_sync_cache(usbmast_fun_t *mfun, uint64_t ba, size_t nblocks) 395 { 396 scsi_cmd_t cmd; 397 scsi_cdb_sync_cache_10_t cdb; 398 int rc; 399 400 if (ba > UINT32_MAX) 401 return ELIMIT; 402 403 if (nblocks > UINT16_MAX) 404 return ELIMIT; 405 406 memset(&cdb, 0, sizeof(cdb)); 407 cdb.op_code = SCSI_CMD_SYNC_CACHE_10; 408 cdb.lba = host2uint32_t_be(ba); 409 cdb.numlb = host2uint16_t_be(nblocks); 410 411 memset(&cmd, 0, sizeof(cmd)); 412 cmd.cdb = &cdb; 413 cmd.cdb_size = sizeof(cdb); 414 415 rc = usbmast_run_cmd(mfun, &cmd); 416 417 if (rc != EOK) { 418 usb_log_error("Synchronize Cache (10) transport failed, device %s: %s.\n", 419 usb_device_get_name(mfun->mdev->usb_dev), str_error(rc)); 420 return rc; 421 } 422 423 if (cmd.status != CMDS_GOOD) { 424 usb_log_error("Synchronize Cache (10) command failed, device %s.\n", 425 usb_device_get_name(mfun->mdev->usb_dev)); 426 return EIO; 427 } 428 429 return EOK; 430 } 431 385 432 /** 386 433 * @} -
uspace/drv/bus/usb/usbmast/scsi_ms.h
r3eb0c85 r8e7c9fe 64 64 extern int usbmast_read(usbmast_fun_t *, uint64_t, size_t, void *); 65 65 extern int usbmast_write(usbmast_fun_t *, uint64_t, size_t, const void *); 66 extern int usbmast_sync_cache(usbmast_fun_t *, uint64_t, size_t); 66 67 extern const char *usbmast_scsi_dev_type_str(unsigned); 67 68
Note:
See TracChangeset
for help on using the changeset viewer.
