87 lines
2.8 KiB
C
87 lines
2.8 KiB
C
/*
|
|
* Copyright (c) 2013, NVIDIA CORPORATION. All rights reserved.
|
|
*
|
|
* Author:
|
|
* Ajay Gupta <ajayg@nvidia.com>
|
|
*
|
|
* This software is licensed under the terms of the GNU General Public
|
|
* License version 2, as published by the Free Software Foundation, and
|
|
* may be copied, distributed, and modified under those terms.
|
|
*
|
|
* This program 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.
|
|
*
|
|
*/
|
|
#ifndef _TEGRA_XUSB_H
|
|
#define _TEGRA_XUSB_H
|
|
|
|
#include <uapi/linux/usb/ch9.h>
|
|
|
|
/* Command requests from the firmware */
|
|
enum tegra_xusb_mbox_cmd {
|
|
MBOX_CMD_MSG_ENABLED = 1,
|
|
MBOX_CMD_INC_FALC_CLOCK,
|
|
MBOX_CMD_DEC_FALC_CLOCK,
|
|
MBOX_CMD_INC_SSPI_CLOCK,
|
|
MBOX_CMD_DEC_SSPI_CLOCK,
|
|
MBOX_CMD_SET_BW,
|
|
MBOX_CMD_SET_SS_PWR_GATING,
|
|
MBOX_CMD_SET_SS_PWR_UNGATING,
|
|
MBOX_CMD_SAVE_DFE_CTLE_CTX,
|
|
MBOX_CMD_AIRPLANE_MODE_ENABLED, /* unused */
|
|
MBOX_CMD_AIRPLANE_MODE_DISABLED, /* unused */
|
|
MBOX_CMD_STAR_HSIC_IDLE,
|
|
MBOX_CMD_STOP_HSIC_IDLE,
|
|
MBOX_CMD_DBC_WAKE_STACK, /* unused */
|
|
MBOX_CMD_HSIC_PRETEND_CONNECT,
|
|
|
|
MBOX_CMD_MAX,
|
|
|
|
/* Response message to above commands */
|
|
MBOX_CMD_ACK = 128,
|
|
MBOX_CMD_NACK
|
|
};
|
|
|
|
#define MSG_DATA_SHIFT 0
|
|
#define MSG_DATA_MASK 0xffffff
|
|
#define MSG_CMD_SHIFT 24
|
|
#define MSG_CMD_MASK 0xff
|
|
|
|
#define MBOX_PACK_MSG(c, d) ((((c) & MSG_CMD_MASK) << MSG_CMD_SHIFT) | \
|
|
(((d) & MSG_DATA_MASK) << MSG_DATA_SHIFT))
|
|
#define MBOX_MSG_CMD(m) (((m) >> MSG_CMD_SHIFT) & MSG_CMD_MASK)
|
|
#define MBOX_MSG_DATA(m) (((m) >> MSG_DATA_SHIFT) & MSG_DATA_MASK)
|
|
|
|
struct tegra_xhci_hcd;
|
|
struct notifier_block;
|
|
|
|
/*
|
|
* Tegra XUSB MBOX handler interface:
|
|
* - Drivers which may handle mbox messages should register a notifier.
|
|
* - The notifier event will be an mbox command (above) and the data will
|
|
* be a pointer to struct mbox_notifier_data.
|
|
* - If a notifier has handled the message, it should return NOTIFY_STOP
|
|
* and populate resp_{cmd,data} appropriately.
|
|
* - A resp_cmd of 0 indicates that no response should be sent.
|
|
*/
|
|
struct mbox_notifier_data {
|
|
u32 msg_data; /* Inbound message data */
|
|
u32 resp_cmd; /* Response message command */
|
|
u32 resp_data; /* Response message data */
|
|
};
|
|
|
|
extern enum usb_device_speed tegra_xhci_port_speed(struct tegra_xhci_hcd *tegra,
|
|
unsigned int port);
|
|
extern bool tegra_xhci_port_connected(struct tegra_xhci_hcd *tegra,
|
|
unsigned int port);
|
|
extern bool tegra_xhci_port_may_wakeup(struct tegra_xhci_hcd *tegra,
|
|
unsigned int port);
|
|
extern int tegra_xhci_register_mbox_notifier(struct tegra_xhci_hcd *tegra,
|
|
struct notifier_block *nb);
|
|
extern void tegra_xhci_unregister_mbox_notifier(struct tegra_xhci_hcd *tegra,
|
|
struct notifier_block *nb);
|
|
|
|
#endif /* _TEGRA_XUSB_H */
|