/** 
 * @brief           HUB Class Driver Header
 * @author          AXELL CORPORATION
 * @description     HUB Class Driver関連ヘッダ
 * @note            none
 * @history         2017_02_22	初版
 * @history         2017_10_26  Ver2.0
*/
/* DOM-IGNORE-BEGIN */
/*
 * This program was created by AXELL CORPORATION.
 * Copyright (C) 2017-2019 AXELL CORPORATION, all rights reserved.
 */
#ifndef __USBC_HUB_H__
#define __USBC_HUB_H__
/* DOM-IGNORE-END */

// *************************************************************************************************
//	include
// *************************************************************************************************


// *************************************************************************************************
//	define
// *************************************************************************************************
/** ドライバ：メジャーバージョン */
#define HUB_MAJOR_VERSION				(0x01)
/** ドライバ：マイナーバージョン */
#define HUB_MINOR_VERSION				(0x00)


/** OVERCURRENT時のCALLBACK呼び出し<p>
	⇒	OVERCURRENT時にCONNECTステータス未変化の場合に1に設定する。<p>
	0 = OVERCURRENT検出で、デタッチ処理の呼び出ししない。(CONNステータスで処理)<p>
	1 = OVERCURRENT検出で、デタッチ処理の呼び出しする。 */
#define	HUB_OVRCUR_CALLBACK				(1)

/** ハブの最大ポート数<p>
	※本ドライバでは7以下に対応。*/
#define HUB_MAX_PORT_NUM				(7)

//----------------------------------------------------------------------------
// ハブフィーチャーセレクターズ
//----------------------------------------------------------------------------

// ハブ受信用
/** ローカルパワー */
#define C_HUB_LOCAL_POWER				(0)
/** オーバーカレント */
#define C_HUB_OVER_CURRENT				(1)

// ポート受信用
/** デバイスが存在するか */
#define PORT_CONNECTION					(0)
/** ポートが動作するか */
#define PORT_ENABLE						(1)
/** ポートがSuspend状態であるか */
#define PORT_SUSPEND					(2)
/** 過電流条件が存在しないか */
#define PORT_OVER_CURRENT				(3)
/** ハブがポートへリセット信号を出しているか */
#define PORT_RESET						(4)
/** ポートが電源供給状態であるか */
#define PORT_POWER						(8)
/** 接続されたデバイスがLow Speedか */
#define PORT_LOW_SPEED					(9)
/** 接続ステータスが変化したか */
#define C_PORT_CONNECTION				(16)
/** ポートエラー条件が存在するか */
#define C_PORT_ENABLE					(17)
/** リジューム信号が完了したか */
#define C_PORT_SUSPEND					(18)
/** 過電流条件が変化したか */
#define C_PORT_OVERCURRENT				(19)
/** リセット処理が完了したか */
#define C_PORT_RESET					(20)
/** ポートがポートテストモードか */
#define PORT_TEST						(21)
/** ポートインジケータの表示色がソフトウェアコントロールか */
#define PORT_INDICATOR					(22)

/* ハブタスク関連 */
#define HUB_TASK_STKSZ                  USB_CL_HUB_TASK_STKSZ
#define HUB_TASK_PRI                    USB_CL_HUB_TASK_PRI

/* ハブのクラスID */
#define USB_HUB_CLASSID     			(9)

/* ハブのSinfleTT/MultiTT種別 */
#define	USB_HUB_DEVPROTO_SINGLE			(1)
#define	USB_HUB_DEVPROTO_MULTI			(2)

/* ハブクラスリクエストコード */
#define HUB_GET_STATUS_REQ          	USB_DEVICE_REQUEST_GET_STATUS
#define HUB_CLEAR_FEATURE_REQ       	USB_DEVICE_REQUEST_CLEAR_FEATURE
#define HUB_SET_FEATURE_REQ         	USB_DEVICE_REQUEST_SET_FEATURE
#define HUB_GET_DESCRIPTOR_REQ      	(6)
#define HUB_SET_DESCRIPTOR_REQ      	(7)

/* GET HUB DESCRIPTOR */
#define GET_HUB_DESCRIPTOR_REQTYPE      (0xA0)
#define GET_HUB_DESCRIPTOR_REQ          USB_DEVICE_REQUEST_GET_DESCRIPTOR
#define GET_HUB_DESCRIPTOR_VALUE        (HUB_DESCRIPTOR_TYPE << 8)
#define GET_HUB_DESCRIPTOR_INDEX        (0)


/* CLEAR HUB FEATURE / CLEAR PORT FEATURE */
#define CLEAR_HUB_FEATURE   			(0x20)
#define CLEAR_PORT_FEATURE  			(0x23)

/* SET HUB FEATURE / SET PORT FEATURE */
#define SET_HUB_FEATURE     			(0x20)
#define SET_PORT_FEATURE    			(0x23)

/* GET HUB STATUS / GET PORT STATUS */
#define GET_HUB_STATUS      			(0xA0)
#define GET_PORT_STATUS     			(0xA3)

//	CLEAR_TT_BUFFER
#define		CLEAR_TT_BUFFER_BMREQ		(0x23)									//	bmRequest
#define		CLEAR_TT_BUFFER_BREQ		(8)										//	bRequest

//	RESET_TT
#define		RESET_TT_BMREQ				(0x23)									//	bmRequest
#define		RESET_TT_BREQ				(9)										//	bRequest

//	GET_TT_STATE
#define		GET_TT_STATE_BMREQ			(0xA3)									//	bmRequest
#define		GET_TT_STATE_BREQ			(10)									//	bRequest

//	STOP_TT
#define		STOP_TT_BMREQ				(0x23)									//	bmRequest
#define		STOP_TT_BREQ				(11)									//	bRequest

//	CLR_TT_BUFFER wValueフィールド用
/** X--- ---- ---- ----     方向 */
#define		USB_HUB_WVALUE_DIR_MSK		(0x8000)
/**	---X X--- ---- ----     EP種別 */
#define		USB_HUB_WVALUE_EPKIND_MSK	(0x1800)
/** ---- -XXX XXXX ----		デバイスアドレス */
#define		USB_HUB_WVALUE_DEVADDR_MSK	(0x07F0)
/** ---- ---- ---- XXXX		EP番号 */
#define		USB_HUB_WVALUE_EPNUM_MSK	(0x000F)


/* Status Change Bitmapデータデコード用 */
#define HUB_CHANGE_DETECT   			(0x01)
#define PORT_CHANGE_OFFSET  			(0x02)

/* 転送関係 */
#define INTERRUPT_BUF_SIZE 				(1)
#define GET_STATUS_LENGTH 				(4)
#define DESC_LENGTH 					(8)

/* タイムアウト関係 */
/** PORT RESET発行後のリセット完了待ち時間(通常10ms〜20ms) */
#define USB_PORT_RESET_WAIT         	(20)
/** デバイス接続を認識した際のチャタリング除去時間 */
#define USB_DEVICE_CONNECT_WAIT     	(100)
/** バスリセットを発行してから、ダウンストリームに対するリセットの完了までのウエイト */
#define BUS_RESET_TIMEOUT           	(10)
#define USB_HUB_ENDTASK_TIMEOUT     	(20000)
/** Retry無し。（要Close）*/
#define USB_HUB_RETRY_CNT           	(1)
/** Retry有り。 */
#define USB_HUB_GETDESC_RETRY_CNT     	(3)

/* common */
#define ON  							(1)
#define OFF 							(0)
#define BYTE_MSB 						(0x80)
#define BYTE_LSB 						(0x01)

//------------------------------------------------------------------------------
//	HUBの最大接続台数(ROOT_HUB含み2段迄)
//	この台数以上のHUB接続はNGとする。
//------------------------------------------------------------------------------
#define	HUB_CONN_MAXCNT					(USBH_MAX_CLS_ROOTHUB_NUM + USBH_MAX_CLS_HUB_NUM)

/** HUBスレッド終了要求 */
#define	USB_HUB_MSGKIND_EXITTHREAD		((void *)0)
/** HUB OverCurrent通知 */
#define	USB_HUB_MSGKIND_DETECTOVERCURR	((void *)1)

//------------------------------------------------------------------------------
//	Message ID (Notify / Request)
//------------------------------------------------------------------------------
/** 既存要因：HUB_Thread終了通知 */
#define		USBH_HUB_MESID_NOTIFY_THREAD_EXIT				(USBH_MSGID_KIND_HUB_THREAD | 0x00000000)
/** 既存要因：Interrupt_in通知 */
#define		USBH_HUB_MESID_NOTIFY_INTERRUPT_IN				(USBH_MSGID_KIND_HUB_THREAD | 0x00000001)
/** SUSPEND要求 */
#define		USBH_HUB_MESID_REQ_SUSPEND						(USBH_MSGID_KIND_HUB_THREAD | 0x00000002)
/** RESUME要求 */
#define		USBH_HUB_MESID_REQ_RESUME						(USBH_MSGID_KIND_HUB_THREAD | 0x00000003)
/** 再ATT/DET許可要求 */
#define		USBH_HUB_MESID_REQ_RE_ATTDET					(USBH_MSGID_KIND_HUB_THREAD | 0x00000004)
/** ポートSUSPEND要求 */
#define		USBH_HUB_MESID_REQ_PORT_SUSPEND					(USBH_MSGID_KIND_HUB_THREAD | 0x00000005)
/** ポートRESME要求 */
#define		USBH_HUB_MESID_REQ_PORT_RESUME					(USBH_MSGID_KIND_HUB_THREAD | 0x00000006)
/** ATT/DET禁止要求 */
#define		USBH_HUB_MESID_REQ_DIS_ATTDET					(USBH_MSGID_KIND_HUB_THREAD | 0x00000007)

//------------------------------------------------------------------------------
//	Message ID (Response)
//------------------------------------------------------------------------------
/** SUSPEND応答 */
#define		USBH_HUB_MESID_ANS_SUSPEND						(USBH_MSGID_KIND_RESPONSE | USBH_HUB_MESID_REQ_SUSPEND)
/** RESUME応答 */
#define		USBH_HUB_MESID_ANS_RESUME						(USBH_MSGID_KIND_RESPONSE | USBH_HUB_MESID_REQ_RESUME)
/** 再ATT/DET許可応答 */
#define		USBH_HUB_MESID_ANS_RE_ATTDET					(USBH_MSGID_KIND_RESPONSE | USBH_HUB_MESID_REQ_RE_ATTDET)
/** ポートSUSPEND応答 */
#define		USBH_HUB_MESID_ANS_PORT_SUSPEND					(USBH_MSGID_KIND_RESPONSE | USBH_HUB_MESID_REQ_PORT_SUSPEND)
/** ポートRESME応答 */
#define		USBH_HUB_MESID_ANS_PORT_RESUME					(USBH_MSGID_KIND_RESPONSE | USBH_HUB_MESID_REQ_PORT_RESUME)
/** ATT/DET禁止要求 */
#define		USBH_HUB_MESID_ANS_DIS_ATTDET					(USBH_MSGID_KIND_RESPONSE | USBH_HUB_MESID_REQ_DIS_ATTDET)

//------------------------------------------------------------------------------
//	GET_PORT_STATUSのリトライディレイ	(ms)
//------------------------------------------------------------------------------
#define		USBH_HUB_RTEY_DLY_GET_PORT_STATUS				(100)

//------------------------------------------------------------------------------
//	GET_PORT_STATUSのリトライカウンタ	(Counts)
//------------------------------------------------------------------------------
#define		USBH_HUB_CHKMAX_LOOP_GET_PORT_STATUS			(10)

// *************************************************************************************************
//	enum
// *************************************************************************************************
/* HUBクラスドライバステータス */
typedef enum _USB_HUB_STATUS {
    USB_HUB_NON_INIT,															// 未初期化状態
    USB_HUB_IDLE,																// アイドル状態
    USB_HUB_RUN,																// 動作中状態
    USB_HUB_EXIT,																// 終了処理中状態
    USB_HUB_ERROR																// エラー発生状態
}USB_HUB_STATUS;


// *************************************************************************************************
//	structure
// *************************************************************************************************
//------------------------------------------------------------------------------
//	HUBステータス構造体
//------------------------------------------------------------------------------
struct usbh_hub_status{     // __st__
    uhs_ubit16_t    hub_status;
        #define HS_HUB_STATUS_LOCAL_POWER   ((uhs_ubit16_t)1 << 0)
        #define HS_HUB_STATUS_OVER_CURRENT  ((uhs_ubit16_t)1 << 1)

    uhs_ubit16_t    hub_change_status;
        #define HS_C_HUB_LOCAL_POWER        ((uhs_ubit16_t)1 << 0)
        #define HS_C_HUB_OVER_CURRENT       ((uhs_ubit16_t)1 << 1)
};


//------------------------------------------------------------------------------
//	ポートステータス構造体
//------------------------------------------------------------------------------
struct usbh_port_status{        // __st__
    uhs_ubit16_t    port_status;
        /** デバイスが存在するか */
        #define PS_PORT_CONNECTION          ((uhs_ubit16_t)1 << 0)
        /** ポートが動作するか */
        #define PS_PORT_ENABLE              ((uhs_ubit16_t)1 << 1)
        /** ポートがSuspend状態であるか */
        #define PS_PORT_SUSPEND             ((uhs_ubit16_t)1 << 2)
        /** 過電流条件が存在しないか */
        #define PS_PORT_OVER_CURRENT        ((uhs_ubit16_t)1 << 3)
        /** ハブがポートへリセット信号を出しているか */
        #define PS_PORT_RESET               ((uhs_ubit16_t)1 << 4)
        /** ポートが電源供給状態であるか */
        #define PS_PORT_POWER               ((uhs_ubit16_t)1 << 8)
        /** 接続されたデバイスがLow Speedか */
        #define PS_PORT_LOW_SPEED           ((uhs_ubit16_t)1 << 9)
        /** 接続されたデバイスがHigh Speedか */
        #define PS_PORT_HIGH_SPEED          ((uhs_ubit16_t)1 << 10)
        /** ポートがポートテストモードか */
        #define PS_PORT_TEST                ((uhs_ubit16_t)1 << 11)
        /** ポートインジケータの表示色がソフトウェアコントロールか */
        #define PS_PORT_INDICATOR           ((uhs_ubit16_t)1 << 12)

    uhs_ubit16_t    port_change_status;
        /** 接続ステータスが変化したか */
        #define PS_C_PORT_CONNECTION        ((uhs_ubit16_t)1 << 0)
        /** ポートエラー条件が存在するか */
        #define PS_C_PORT_ENABLE            ((uhs_ubit16_t)1 << 1)
        /** リジューム信号が完了したか */
        #define PS_C_PORT_SUSPEND           ((uhs_ubit16_t)1 << 2)
        /** 過電流条件が変化したか */
        #define PS_C_PORT_OVERCURRENT       ((uhs_ubit16_t)1 << 3)
        /** リセット処理が完了したか */
        #define PS_C_PORT_RESET             ((uhs_ubit16_t)1 << 4)
};


//------------------------------------------------------------------------------
//	HUBディスクリプタ構造体
//------------------------------------------------------------------------------
struct hub_descriptor{      // __st__
    uhs_ubit8_t     bDescLength;
    uhs_ubit8_t     bDescriptorType;
        #define HUB_DESCRIPTOR_TYPE     (0x29)
    uhs_ubit8_t     bNbrPorts;
    uhs_ubit16_t    wHubCharacteristics;
        #define HUB_POWERSWITCH_MASK    (0x03 << 0)
            #define GANGED_POWER_SWITCH         (0x00 << 0)
            #define INDIVIDUAL_POWER_SWITCH     (0x01 << 0)
        
        #define HUB_COMPDEVICE_MASK     (1 << 2)
            #define NOT_COMPOUND_DEVICE         (0x00 << 2)
            #define COMPOUND_DEVICE             (0x01 << 2)
        
        #define HUB_OVERCURRENT_MASK    (0x03 << 3)
            #define GLOBAL_OVERCURRENT_PROTECTION       (0x00 << 3)
            #define INDIVIDUAL_OVERCURRENT_PROTECTION   (0x01 << 3)
            #define NOT_OVERCURRENT_PROTECTION          (0x10 << 3)
    
        #define HUB_TTTHINKTIME_MASK    (0x03 << 5)
            #define TTTHINKTIME_8FS          (0x00 << 5)
            #define TTTHINKTIME_16FS         (0x01 << 5)
            #define TTTHINKTIME_24FS         (0x10 << 5)
            #define TTTHINKTIME_32FS         (0x11 << 5)
    
        #define HUB_INDICATORSUPPORT_MASK    (0x01 << 7)
            #define INDICATORSUPPORT_OFF       (0x00 << 7)
            #define INDICATORSUPPORT_ON        (0x01 << 7)
    
    uhs_ubit8_t     bPwrOn2PwrGood;
    uhs_ubit8_t     bHubContrCurrent;
    uhs_ubit8_t     DeviceRemovable;
    uhs_ubit8_t     PortPwrCtlMask;
};


/**	接続されたHUBに関する情報を保存する為の構造体。<p>
    取得したHUBデスクリプタ情報も展開されます。<p>
    生成タイミング ： HUB接続時<p>
    削除タイミング ： HUB切断時 */
struct usb_hub_info{

    struct usbd_usb_deviceinfo *usbdev;		/** ハブ自身のUSBデバイス構造体 */

    struct hub_descriptor    *hub_desc;		/** ハブディスクリプタ格納用バッファポインタ */

	//	HUB DESCRIPTORの展開情報
    uhs_ubit8_t     port_num;				/** ハブが持っているダウンストリームポート数 */
    uhs_ubit16_t    PwrOnWait;				/**	PORT_POWER後の待ち時間(ms)	元値は2ms分解能だが、代入時にms分解能に変換する */
    uhs_ubit8_t     current;				/**	HUB Controllerの必要な電流(mA) */
    uhs_ubit8_t     power_switch;			/**	wHubCharacteristics：パワーSW (00=GANG/01=INDIVIDUAL_PORT/1X=Reserved) */
    uhs_ubit8_t     compound_device;		/**	wHubCharacteristics：コンパウンドデバイスかどうか */
    uhs_ubit8_t     current_protect;		/**	wHubCharacteristics：オーバカレント保護モード(00=Global/01=IndividualPort/1X=NO OverCurrent) */
    uhs_ubit8_t     tt_thinktime;			/**	wHubCharacteristics：TT Think Time */
    uhs_ubit8_t     indicator_support;		/**	wHubCharacteristics：ポートインジケータ(LED)のサポート有無 */
    uhs_ubit8_t     dev_removal;			/**	Device Removable (B1-B7が各ポートに対応) */

	//	INTERRUPT_IN 用情報
    uhs_ubit8_t     intr_epnum;				/** インタラプト用エンドポイント番号 */
    uhs_ubit8_t     intr_interval;			/** インタラプト用インターバル時間 */
    uhs_ubit8_t     hub_intr_buf_size;		/** インタラプト転送受信データバッファサイズ */
    void            *hub_intr_buf;			/** インタラプト転送受信データバッファポインタ */

	//	HUB自体のアクセス用UCB領域
    struct usb_control_block* control_ucb;	/** クラスリクエスト用 コントロールブロックポインタ */
    struct usb_control_block* intr_ucb;		/** クラスリクエスト用 インタラプトブロックポインタ */

    kernel_context_t    hub_info_sem;		/** ハブデバイス構造体ロック用 */
};


//------------------------------------------------------------------------------
//	HUBスレッドの管理情報
//------------------------------------------------------------------------------
struct usb_hub_driver {     // __st__
    kernel_context_t    mbx_osc;												//	HUBスレッド用MailBox
    kernel_context_t    evt_osc;												//	HUBスレッド用EventFlag（終了同期用）
    kernel_context_t    thread_info;											//	HUBスレッド用タスク情報
};

//------------------------------------------------------------------------------
//	Message Format : HUB_Thread終了通知
//------------------------------------------------------------------------------
typedef	struct	{

	UHS_MSG_COMMON		msg_common;												//	共通領域

}	UHS_MSG_HUB_NOTIFY_EXIT_FMT;

//------------------------------------------------------------------------------
//	Message Format : Interrupt_in通知
//------------------------------------------------------------------------------
typedef	struct	{

	UHS_MSG_COMMON			msg_common;											//	共通領域
	struct usb_hub_info		*hub_info;											//	HUB情報のポインタ

}	UHS_MSG_HUB_NOTIFY_INTR_IN_FMT;

//------------------------------------------------------------------------------
//	Message Format : SUSPEND要求
//	Message Format : RESUME要求
//	Message Format : 再ATT/DET許可要求
//	Message Format : ATT/DET禁止要求
//------------------------------------------------------------------------------
typedef	struct	{

	UHS_MSG_COMMON		msg_common;												//	共通領域
	void				*mbox_context;											//	応答用Mboxコンテキストポインタ

}	UHS_MSG_HUB_REQ_SUSPEND_FMT , UHS_MSG_HUB_REQ_RESUME_FMT , UHS_MSG_HUB_REQ_RE_ATTDET_FMT, UHS_MSG_HUB_REQ_DIS_ATTDET_FMT;

//------------------------------------------------------------------------------
//	Message Format : HUB_PORT_SUSPEND要求
//	Message Format : HUB_PORT_RESUME要求
//------------------------------------------------------------------------------
typedef	struct	{

	UHS_MSG_COMMON		msg_common;												//	共通領域
	void				*mbox_context;											//	応答用Mboxコンテキストポインタ
	struct usb_hub_info	*hub_info;												//	HUB情報のポインタ
	uhs_ubit32_t		hub_port;												//	対象ポート番号(1~)

}	UHS_MSG_HUB_REQ_PORT_SUSPEND , UHS_MSG_HUB_REQ_PORT_RESUME;

//------------------------------------------------------------------------------
//	Message Format : SUSPEND応答
//	Message Format : RESUME応答
//	Message Format : 再ATT/DET許可応答
//	Message Format : HUB_PORT_SUSPEND応答
//	Message Format : HUB_PORT_RESUME応答
//------------------------------------------------------------------------------
typedef	struct	{

	UHS_MSG_COMMON		msg_common;												//	共通領域
	uhs_status_t		result;													//	処理結果

}	UHS_MSG_HUB_ANS_SUSPEND_FMT ,UHS_MSG_HUB_ANS_RESUME_FMT ,UHS_MSG_HUB_ANS_RE_ATTDET_FMT ,UHS_MSG_HUB_ANS_PORT_SUSPEND ,UHS_MSG_HUB_ANS_PORT_RESUME;

//------------------------------------------------------------------------------
//	Port Attach/Detach排他	(定義時排他有り)
//------------------------------------------------------------------------------
#define		USBH_HUB_EXCLUSIVE


// *************************************************************************************************
//	extern
// *************************************************************************************************
extern uhs_status_t Usb_HubApi_Init( void );
extern void Usb_HubApi_Exit( void );
extern uhs_status_t Usb_HubApi_PortDevDetach( struct usbd_usb_deviceinfo* usbdev );
extern uhs_status_t Usb_HubApi_ClearFeature( struct usb_hub_info* hub_info, uhs_ubit8_t feature, uhs_ubit16_t port_num );
extern uhs_status_t Usb_HubApi_SetFeature( struct usb_hub_info* hub_info, uhs_ubit8_t feature, uhs_ubit16_t port_num );
extern uhs_status_t Usb_HubApi_GetStatus( struct usb_hub_info* hub_info, void* buf, uhs_ubit16_t port_num );
extern	uhs_status_t Usb_HubApi_ClearTTBuffer( struct usb_hub_info* hub_info, uhs_ubit16_t tt_port, struct	usbd_usb_spliterrinfo *split_err_info);
extern	uhs_status_t Usb_HubApi_RESET_TT( struct usb_hub_info* hub_info, uhs_ubit16_t tt_port );
extern	uhs_status_t Usb_Hub_SendPortReset( struct usb_hub_info* hub_info, uhs_ubit8_t port_num );
extern	void Usb_Hub_ReportStatus( const char*  pFileName, uhs_ubit32_t nLine, usb_msglevel level, uhs_ubit16_t msgdata, uhs_ubit8_t  port_num , uhs_ubit8_t hub_adr );
extern	uhs_status_t	Usb_Hub_AddHubInfo_List( struct usb_hub_info* hub_info );
extern	uhs_status_t	Usb_Hub_DelHubInfo_List( struct usb_hub_info* hub_info );
extern	uhs_status_t	Usb_Hub_ChkHubInfo_List( struct usb_hub_info* hub_info , uhs_ubit8_t *chk_result );
extern	uhs_status_t	Usb_Hub_SendMsg_exit( void );
extern	uhs_status_t	Usb_Hub_SendMsg_intr_in( struct usb_hub_info *hub_info );
extern	uhs_status_t	Usb_Hub_SendMsg_with_mbx( void *resp_mbox_context , uhs_ubit32_t mess_id );
extern	uhs_status_t	Usb_Hub_SendMsg_with_hubinfo_mbx( void *resp_mbox_context , uhs_ubit32_t mess_id , struct usb_hub_info *hub_info , uhs_ubit32_t hub_port );
extern	uhs_status_t	Usb_Hub_SendMsg_result( void *mbox_context , uhs_ubit32_t mess_id , uhs_status_t result );
extern	uhs_ubit32_t	Usb_Hub_get_suspend_flg( void );

#endif /* __USBC_HUB_H__ */
