104 lines
3.9 KiB
C
104 lines
3.9 KiB
C
/*
|
||
* Copyright : (C) 2022 Phytium Information Technology, Inc.
|
||
* All Rights Reserved.
|
||
*
|
||
* This program is OPEN SOURCE software: you can redistribute it and/or modify it
|
||
* under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd,
|
||
* either version 1.0 of the License, or (at your option) any later version.
|
||
*
|
||
* 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 Phytium Public License for more details.
|
||
*
|
||
*
|
||
* FilePath: fusb_private.h
|
||
* Date: 2022-02-11 13:33:11
|
||
* LastEditTime: 2022-02-18 09:21:22
|
||
* Description: This files is for definition of internal function interface
|
||
*
|
||
* Modify History:
|
||
* Ver Who Date Changes
|
||
* ----- ------ -------- --------------------------------------
|
||
* 1.0 Zhugengyu 2022/2/7 init commit
|
||
*/
|
||
|
||
#pragma once
|
||
|
||
/***************************** Include Files *********************************/
|
||
#ifdef __aarch64__
|
||
#include "faarch64.h"
|
||
#else
|
||
#include "fcp15.h"
|
||
#endif
|
||
|
||
#include "fkernel.h"
|
||
#include "fio.h"
|
||
#include "fassert.h"
|
||
#include "fusb.h"
|
||
|
||
/************************** Constant Definitions *****************************/
|
||
|
||
/**************************** Type Definitions *******************************/
|
||
|
||
/************************** Variable Definitions *****************************/
|
||
|
||
/***************** Macros (Inline Functions) Definitions *********************/
|
||
#define FUSB_REG32_GET_BITS(x, a, b) (u32)((((u32)(x)) & GENMASK(a, b)) >> b)
|
||
#define FUSB_REG32_SET_BITS(x, a, b) (u32)((((u32)(x)) << b) & GENMASK(a, b))
|
||
#define FUSB_REG64_GET_BITS(x, a, b) (u64)((((u64)(x)) & GENMASK_ULL(a, b)) >> b)
|
||
#define FUSB_REG64_SET_BITS(x, a, b) (u64)((((u64)(x)) << b) & GENMASK_ULL(a, b))
|
||
|
||
/************************** Function Prototypes ******************************/
|
||
/* 创建USB控制器实例,添加到USB实例的Hc链表中 */
|
||
FUsbHc *FUsbAllocateHc(FUsb *instance);
|
||
|
||
/* 删除USB控制器实例,从USB实例的Hc链表中删去 */
|
||
void FUsbDetachHc(FUsbHc *controller);
|
||
|
||
/* 初始化USB设备 */
|
||
FUsbDev *FUsbInitDevEntry(FUsbHc *controller, int slot_id);
|
||
|
||
/* 根据USB设备速度,选择最大包长度 */
|
||
int FUsbDecodeMaxPacketSz0(FUsbSpeed speed, u8 bMaxPacketSize0);
|
||
|
||
/* 据设备速度获取最大包长度 */
|
||
int FUsbSpeedtoDefaultMaxPacketSz(FUsbSpeed speed);
|
||
|
||
/* 配置USB配置描述符解析器 */
|
||
FError FUsbSetupConfigParser(FUsbDev *dev, const void *buf, u32 buf_len);
|
||
|
||
/* 去初始化USB配置描述符解析器 */
|
||
void FUsbRevokeConfigParser(FUsbDev *dev);
|
||
|
||
/* 初始化字符串描述符解析器 */
|
||
void FUsbSetupStringParser(FUsbDev *dev);
|
||
|
||
/* 去初始化字符串描述符解析器 */
|
||
void FUsbRevokeStringParser(FUsbDev *dev);
|
||
|
||
/* 检索字符串描述符,保存在FUsbStringParser结构中 */
|
||
FError FUsbSearchStringDescriptor(FUsb *instance, FUsbDev *dev, u8 id);
|
||
|
||
/* 获取刚刚检索到的字符串描述符内容 */
|
||
const char *FUsbGetString(const FUsbDev *const dev);
|
||
|
||
/* 从配置描述符解析器中获取指定类型的描述符(端点描述符/接口描述符) */
|
||
const FUsbDescriptor *FUsbGetDescriptorFromParser(FUsbConfigParser *parser, FUsbDescriptorType type);
|
||
|
||
/* 默认的USB设备初始化函数 */
|
||
void FUsbNopDevInit(FUsbDev *dev);
|
||
|
||
/* 默认的USB设备初始化函数 */
|
||
void FUsbGenericDevInit(FUsbDev *dev);
|
||
|
||
/* 打印设备描述符信息 */
|
||
void FUsbDumpDeviceDescriptor(const FUsbDeviceDescriptor *descriptor);
|
||
|
||
/* 打印配置描述符信息 */
|
||
void FUsbDumpConfigDescriptor(const FUsbConfigurationDescriptor *descriptor);
|
||
|
||
/* 打印接口描述符信息 */
|
||
void FUsbDumpInterfaceDescriptor(const FUsbInterfaceDescriptor *descriptor);
|
||
|
||
/* 打印端点描述符信息 */
|
||
void FUsbDumpEndpointDescriptor(const FUsbEndpointDescriptor *descriptor); |