Commit Graph
10 Commits
Author SHA1 Message Date
Aleš Nesrsta a2b81d5399 EHCI support. All of the credit goes to Aleš Nesrsta. I've just added
the support for the CS5536 modification thereos and few bugfixes.

	* grub-core/Makefile.core.def (ehci): New module.
	* grub-core/bus/usb/ehci.c: New file.
	* grub-core/bus/usb/usbhub.c (grub_usb_hub_add_dev): New arguments
	port and hubaddr. All users updated.
	Save port and hubaddr into dev structure.
	* include/grub/cs5536.h (GRUB_CS5536_MSR_USB_BASE_SMI_ENABLE): New
	define.
	* include/grub/pci.h (grub_dma_phys2virt): New function.
	(grub_dma_virt2phys): Likewise.
	* include/grub/usb.h (grub_usb_device): New members port and hubaddr.
2012-02-01 14:18:43 +01:00
Aleš Nesrsta 2f82ea948d EHCI implementation by Aleš Nesrsta. 2011-10-01 20:18:47 +02:00
Aleš Nesrsta ab629d0c5d Fix incorrect usb report interpretation 2010-09-19 00:34:25 +02:00
Aleš Nesrsta e70a1b9535 Fix multiple USB issues 2010-09-18 13:49:15 +02:00
Aleš Nesrsta b9c7e9d400 Set UHCI low-speed flag 2010-09-18 10:56:52 +02:00
Aleš Nesrsta 5dab68dfa4 Hotplugging and USB hub support.
* bus/usb/ohci.c (grub_ohci_td): Add convenience fields.
	(grub_ohci): Likewise.
	(GRUB_OHCI_REG_CONTROL_BULK_ENABLE): New definition.
	(GRUB_OHCI_REG_CONTROL_CONTROL_ENABLE): Likewise.
	(GRUB_OHCI_RESET_CONNECT_CHANGE): Likewise.
	(GRUB_OHCI_CTRL_EDS): Likewise.
	(GRUB_OHCI_BULK_EDS): Likewise.
	(GRUB_OHCI_TDS): Likewise.
	(GRUB_OHCI_ED_ADDR_MASK): Likewise.
	(grub_ohci_ed_phys2virt): New function.
	(grub_ohci_virt_to_phys): Likewise.
	(grub_ohci_td_phys2virt): Likewise.
	(grub_ohci_td_virt2phys): Likewise.
	(grub_ohci_pci_iter): Allocate memory and don't wait for stable
	attachment.
	(grub_ohci_find_ed): New function.
	(grub_ohci_alloc_td): Likewise.
	(grub_ohci_free_td): Likewise.
	(grub_ohci_free_tds): Likewise.
	(grub_ohci_transfer): Use previously allocated memory.
	(grub_ohci_portstatus): Reset status changed bit.
	(grub_ohci_detect_dev): Supply status changed.
	(grub_ohci_fini_hw): Free memory.
	(grub_ohci_restore_hw): Reallocate memory.
	* bus/usb/uhci.c (grub_uhci_portstatus): Don't reset on disable.
	Reset status change.
	(grub_uhci_detect_dev): Supply status_change.
	* bus/usb/usb.c (attach_hooks): New var.
	(grub_usb_device_attach): New function.
	(grub_usb_register_attach_hook_class): Likewise.
	(grub_usb_unregister_attach_hook_class): Likewise.
	* bus/usb/usbhub.c (grub_usb_hub_add_dev): Handle errors correctly.
	(grub_usb_add_hub): Reset connection changed bit.
	(attach_root_port): New function.
	(grub_usb_root_hub): Likewise.
	(poll_nonroot_hub): Likewise.
	(grub_usb_poll_devices): Likewise.
	* commands/usbtest.c (grub_cmd_usbtest): Poll devices before listing.
	* disk/usbms.c (grub_usbms_open): Use device hooks.
	(grub_usbms_iterate) :Poll devices.
	(grub_usbms_finddevs): Split into ...
	(grub_usbms_attach): ... this ...
	(grub_usbms_attach): ... and this.
	* include/grub/usb.h (grub_usb_controller_dev): Supply status_changed
	in detect_dev.
	(grub_usb_interface): New fields attached and detach_hook.
	(grub_usb_attach_hook_class): New type.
	(grub_usb_attach_desc): New struct.
	(grub_usb_register_attach_hook_class): New function.
	(grub_usb_unregister_attach_hook_class): Likewise.
	(grub_usb_poll_devices): Likewise.
	(grub_usb_device_attach): Likewise.
	* include/grub/usbtrans.h (GRUB_USB_HUB_FEATURE_C_CONNECTED): New const.
	(GRUB_USB_HUB_STATUS_C_CONNECTED): Likewise.
2010-07-17 03:06:34 +02:00
Aleš Nesrsta 1515ec8684 2010-06-02 Aleš Nesrsta <starous@volny.cz>
Finally make USB usable.

	* bus/usb/ohci.c (grub_ohci_reg_t): Add missing values.
	(GRUB_OHCI_RHUB_PORT_POWER_MASK): New macro.
	(GRUB_OHCI_RHUB_PORT_ALL_POWERED): Likewise.
	(GRUB_OHCI_REG_FRAME_INTERVAL_FSMPS_MASK): Likewise.
	(GRUB_OHCI_REG_FRAME_INTERVAL_FSMPS_SHIFT): Likewise.
	(GRUB_OHCI_REG_FRAME_INTERVAL_FI_SHIFT): Likewise.
	(GRUB_OHCI_FSMPS): Likewise.
	(GRUB_OHCI_PERIODIC_START): Likewise.
	(GRUB_OHCI_FRAME_INTERVAL): Likewise.
	(GRUB_OHCI_SET_PORT_ENABLE): Likewise.
	(GRUB_OHCI_CLEAR_PORT_ENABLE): Likewise.
	(GRUB_OHCI_SET_PORT_RESET): Likewise.
	(GRUB_OHCI_SET_PORT_RESET_STATUS_CHANGE): Likewise.
	* bus/usb/ohci.c (grub_ohci_pci_iter): Various important fixups.
	(grub_ohci_transaction): Likewise.
	(grub_ohci_transfer): Improve condition detection algorithms.
	Handle toggle property. Program the transactions correctly.
	Improve error handling. Various important fixups.
	(grub_ohci_portstatus): Put register writes in right order.
	* bus/usb/uhci.c (grub_free_queue): Compute last_trans.
	(grub_uhci_transfer): Don't show "failed" message on success.
	* bus/usb/usb.c (grub_usb_set_configuration): Zero-fill whole "toggle"
	array.
	(grub_usb_device_initialize): Read first 8 bytes of descriptor to
	determine its size.
	* bus/usb/usbtrans.c (grub_usb_control_msg): Use descdev.maxsize0 even
	before initialization is completed. Use IN direction for empty
	transfers. Use last_trans and compute toggle.
	* include/grub/usbtrans.h (grub_usb_transfer): New field last_trans.
	(GRUB_USB_FEATURE_ENDP_HALT): Correct the value.
	(GRUB_USB_FEATURE_DEV_REMOTE_WU): Likewise.
	(GRUB_USB_FEATURE_TEST_MODE): Likewise.
	* include/grub/usb.h (grub_usb_err_t): New value GRUB_USB_ERR_UNRECOVERABLE.
	(grub_usb_device): Increase toggle to 256.
	(grub_usbms_subclass_t): New values GRUB_USBMS_SUBCLASS_RBC,
	GRUB_USBMS_SUBCLASS_MMC2, GRUB_USBMS_SUBCLASS_UFI and
	GRUB_USBMS_SUBCLASS_SFF8070.
	* include/grub/scsicmd.h (grub_scsi_test_unit_ready): New structure.
	(grub_scsi_inquiry): New member page and alloc_length.
	(grub_scsi_request_sense): New structure.
	(grub_scsi_request_sense_data): Likewise.
	(grub_scsi_read_capacity): New fields logical_block_addr, PMI and
	control.
	* disk/scsi.c (grub_scsi_request_sense): New function.
	(grub_scsi_test_unit_ready): Likewise.
	(grub_scsi_inquiry): Fill new fields.
	(grub_scsi_read_capacity): Likewise.
	(grub_scsi_read10): Add request sense at the end.
	(grub_scsi_read12): Likewise.
	(grub_scsi_write10): Likewise.
	(grub_scsi_write12): Likewise.
	(grub_scsi_open): Add Test Unit Ready.
	* disk/usbms.c (grub_usbms_finddevs): Check configcnt.
	Support additional subclasses. Con't clear halt yet. Activate the
	proper config. Calculate LUNs correctly.
	(grub_usbms_transfer): Various important fixups.

2010-06-02  Vladimir Serbinenko  <phcoder@gmail.com>

	* bus/pci.c (grub_pci_iterate) [GRUB_MACHINE_MIPS_YEELOONG]: Skip ghosts.
	* bus/usb/ohci.c (grub_ohci_portstatus): Handle R/WC correctly.
	(grub_ohci_fini_hw): New function.
	(grub_ohci_restore_hw): Likewise.
	(GRUB_MOD_INIT(ohci)): Register preboot hook.
	(GRUB_MOD_FINI(ohci)): Shutdown OHCI.
	* term/usb_keyboard.c: Remove include of grub/machine/console.h.

2010-06-02  Vladimir Serbinenko  <phcoder@gmail.com>

	Dedicated DMA allocations.

	* bus/pci.c (grub_memalign_dma32): New function
	(grub_dma_free): Likewise.
	(grub_dma_get_virt): Likewise.
	(grub_dma_get_phys): Likewise.
	* bus/usb/ohci.c (grub_ohci): New members hcca_addr and hcca_chunk.
	(grub_ohci_pci_iter): Use dma32_alloc.
	(grub_ohci_transfer): Likewise.
	* bus/usb/usbtrans.c (grub_usb_control_msg): Likewise.
	(grub_usb_bulk_readwrite): Likewise.
	* include/grub/pci.h: Add declarations.

2010-06-02  Vladimir Serbinenko  <phcoder@gmail.com>

	CS5536 support.

	* bus/cs5536.c: New file.
	* bus/usb/ohci.c (grub_ohci_pci_iter): Check for CS5536.
	* conf/i386.rmk (pkglib_MODULES): Add cs5536.mod.
	(cs5536_mod_SOURCES): New variable.
	(cs5536_mod_CFLAGS): Likewise.
	(cs5536_mod_LDFLAGS): Likewise.
	* conf/mips-yeeloong.rmk (kernel_img_HEADERS): Add cs5536.h and
	machine/pci.h.
	(kernel_img_SOURCES): Add bus/cs5536.c.
	(pkglib_MODULES): Add usb.mod, usbtest.mod, ohci.mod, usbms.mod and
	usb_keyboard.mod.
	(usb_mod_SOURCES): New variable.
	(usb_mod_CFLAGS): New variable.
	(usb_mod_LDFLAGS): New variable.
	(usbtest_mod_SOURCES): New variable.
	(usbtest_mod_CFLAGS): New variable.
	(usbtest_mod_LDFLAGS): New variable.
	(ohci_mod_SOURCES): New variable.
	(ohci_mod_CFLAGS): New variable.
	(ohci_mod_LDFLAGS): New variable.
	(usbms_mod_SOURCES): New variable.
	(usbms_mod_CFLAGS): New variable.
	(usbms_mod_LDFLAGS): New variable.
	(usb_keyboard_mod_SOURCES): New variable.
	(usb_keyboard_mod_CFLAGS): New variable.
	(usb_keyboard_mod_LDFLAGS): New variable.
	* include/grub/smbus.h: New file.
	* include/grub/cs5536.h: New file.

	Also-By: Vladimir Serbinenko <phcoder@gmail.com>
2010-06-02 17:16:20 +02:00
Aleš Nesrsta 390b0676c4 Use dev->descdev.maxsize0 even if dev->initialized isn't set 2010-06-02 02:04:45 +02:00
Aleš Nesrsta 7d4873c26a Merge Aleš' latest patch 2010-06-01 02:10:19 +02:00
Aleš Nesrsta 778ff32476 Fix a bunch of problems with USB. 2010-05-31 14:11:41 +02:00