/* * GRUB -- GRand Unified Bootloader * Copyright (C) 2008 Free Software Foundation, Inc. * * GRUB is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GRUB is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GRUB. If not, see . */ #ifndef GRUB_USBTRANS_H #define GRUB_USBTRANS_H 1 #define MAX_USB_TRANSFER_LEN 0x0800 typedef enum { GRUB_USB_TRANSFER_TYPE_IN, GRUB_USB_TRANSFER_TYPE_OUT, GRUB_USB_TRANSFER_TYPE_SETUP } grub_transfer_type_t; typedef enum { GRUB_USB_TRANSACTION_TYPE_CONTROL, GRUB_USB_TRANSACTION_TYPE_BULK } grub_transaction_type_t; struct grub_usb_transaction { int size; int toggle; grub_transfer_type_t pid; grub_uint32_t data; grub_size_t preceding; }; typedef struct grub_usb_transaction *grub_usb_transaction_t; struct grub_usb_transfer { int devaddr; int endpoint; int size; int transcnt; int max; grub_transaction_type_t type; grub_transfer_type_t dir; struct grub_usb_device *dev; struct grub_usb_transaction *transactions; int last_trans; /* Index of last processed transaction in OHCI/UHCI driver. */ void *controller_data; /* Used when finishing transfer to copy data back. */ struct grub_pci_dma_chunk *data_chunk; void *data; }; typedef struct grub_usb_transfer *grub_usb_transfer_t; enum { GRUB_USB_REQTYPE_TARGET_DEV = (0 << 0), GRUB_USB_REQTYPE_TARGET_INTERF = (1 << 0), GRUB_USB_REQTYPE_TARGET_ENDP = (2 << 0), GRUB_USB_REQTYPE_TARGET_OTHER = (3 << 0), GRUB_USB_REQTYPE_STANDARD = (0 << 5), GRUB_USB_REQTYPE_CLASS = (1 << 5), GRUB_USB_REQTYPE_VENDOR = (2 << 5), GRUB_USB_REQTYPE_OUT = (0 << 7), GRUB_USB_REQTYPE_IN = (1 << 7), GRUB_USB_REQTYPE_CLASS_INTERFACE_OUT = GRUB_USB_REQTYPE_TARGET_INTERF | GRUB_USB_REQTYPE_CLASS | GRUB_USB_REQTYPE_OUT, GRUB_USB_REQTYPE_VENDOR_OUT = GRUB_USB_REQTYPE_VENDOR | GRUB_USB_REQTYPE_OUT, GRUB_USB_REQTYPE_CLASS_INTERFACE_IN = GRUB_USB_REQTYPE_TARGET_INTERF | GRUB_USB_REQTYPE_CLASS | GRUB_USB_REQTYPE_IN, GRUB_USB_REQTYPE_VENDOR_IN = GRUB_USB_REQTYPE_VENDOR | GRUB_USB_REQTYPE_IN }; enum { GRUB_USB_REQ_GET_STATUS = 0x00, GRUB_USB_REQ_CLEAR_FEATURE = 0x01, GRUB_USB_REQ_SET_FEATURE = 0x03, GRUB_USB_REQ_SET_ADDRESS = 0x05, GRUB_USB_REQ_GET_DESCRIPTOR = 0x06, GRUB_USB_REQ_SET_DESCRIPTOR = 0x07, GRUB_USB_REQ_GET_CONFIGURATION = 0x08, GRUB_USB_REQ_SET_CONFIGURATION = 0x09, GRUB_USB_REQ_GET_INTERFACE = 0x0A, GRUB_USB_REQ_SET_INTERFACE = 0x0B, GRUB_USB_REQ_SYNC_FRAME = 0x0C }; #define GRUB_USB_FEATURE_ENDP_HALT 0x00 #define GRUB_USB_FEATURE_DEV_REMOTE_WU 0x01 #define GRUB_USB_FEATURE_TEST_MODE 0x02 enum { GRUB_USB_HUB_FEATURE_PORT_RESET = 0x04, GRUB_USB_HUB_FEATURE_PORT_POWER = 0x08, GRUB_USB_HUB_FEATURE_C_PORT_CONNECTED = 0x10, GRUB_USB_HUB_FEATURE_C_PORT_ENABLED = 0x11, GRUB_USB_HUB_FEATURE_C_PORT_SUSPEND = 0x12, GRUB_USB_HUB_FEATURE_C_PORT_OVERCURRENT = 0x13, GRUB_USB_HUB_FEATURE_C_PORT_RESET = 0x14 }; enum { GRUB_USB_HUB_STATUS_PORT_CONNECTED = (1 << 0), GRUB_USB_HUB_STATUS_PORT_ENABLED = (1 << 1), GRUB_USB_HUB_STATUS_PORT_SUSPEND = (1 << 2), GRUB_USB_HUB_STATUS_PORT_OVERCURRENT = (1 << 3), GRUB_USB_HUB_STATUS_PORT_POWERED = (1 << 8), GRUB_USB_HUB_STATUS_PORT_LOWSPEED = (1 << 9), GRUB_USB_HUB_STATUS_PORT_HIGHSPEED = (1 << 10), GRUB_USB_HUB_STATUS_C_PORT_CONNECTED = (1 << 16), GRUB_USB_HUB_STATUS_C_PORT_ENABLED = (1 << 17), GRUB_USB_HUB_STATUS_C_PORT_SUSPEND = (1 << 18), GRUB_USB_HUB_STATUS_C_PORT_OVERCURRENT = (1 << 19), GRUB_USB_HUB_STATUS_C_PORT_RESET = (1 << 20) }; struct grub_usb_packet_setup { grub_uint8_t reqtype; grub_uint8_t request; grub_uint16_t value; grub_uint16_t index; grub_uint16_t length; } GRUB_PACKED; #endif /* GRUB_USBTRANS_H */