USBD ROM Stack  2.0
ROM based USB device stack
mw_usbd_core.h
Go to the documentation of this file.
1 /***********************************************************************
2  * $Id:: mw_usbd_core.h 2221 2015-12-17 23:28:25Z usb00423 $
3  *
4  * Project: USB device ROM Stack
5  *
6  * Description:
7  * USB core controller structure definitions and function prototypes.
8  *
9  ***********************************************************************
10  * Copyright(C) 2011, NXP Semiconductor
11  * All rights reserved.
12  *
13  * Software that is described herein is for illustrative purposes only
14  * which provides customers with programming information regarding the
15  * products. This software is supplied "AS IS" without any warranties.
16  * NXP Semiconductors assumes no responsibility or liability for the
17  * use of the software, conveys no license or title under any patent,
18  * copyright, or mask work right to the product. NXP Semiconductors
19  * reserves the right to make changes in the software without
20  * notification. NXP Semiconductors also make no representation or
21  * warranty that such application will be suitable for the specified
22  * use without further testing or modification.
23  **********************************************************************/
24 #ifndef __MW_USBD_CORE_H__
25 #define __MW_USBD_CORE_H__
26 
27 #include "error.h"
28 #include "mw_usbd.h"
29 #include "usbd_cfg.h"
30 
47 /* function pointer types */
48 
64 
80 typedef ErrorCode_t (*USB_PARAM_CB_T) (USBD_HANDLE_T hUsb, uint32_t param1);
81 
105 typedef ErrorCode_t (*USB_EP_HANDLER_T)(USBD_HANDLE_T hUsb, void *data, uint32_t event);
106 
119 typedef struct _USB_CORE_DESCS_T {
120  uint8_t *device_desc;
121  uint8_t *string_desc;
122  uint8_t *full_speed_desc;
128  uint8_t *high_speed_desc;
136  uint8_t *device_qualifier;
140  uint8_t *bos_descriptor;
143 
151 typedef struct USBD_API_INIT_PARAM {
152  uint32_t usb_reg_base;
153  uint32_t mem_base;
158  uint32_t mem_size;
161  uint8_t max_num_ep;
167  uint8_t double_buffer;
168  uint8_t pad0[1];
169  /* USB Device Events Callback Functions */
179 
188 
199 
202 
216 
233 
236 
246 
247  /* USB Core Events Callback Functions */
258 
269 
280 
281  /* cache and MMU translation functions */
283  uint32_t (*virt_to_phys)(void *vaddr);
285  void (*cache_flush)(uint32_t *start_adr, uint32_t *end_adr);
286  uint32_t lpm_setting;
307  ErrorCode_t (*USB_ReqGetStringDesc)(USBD_HANDLE_T hUsb, USB_SETUP_PACKET* setupPacket, uint8_t** pD);
309 
321 typedef struct USBD_CORE_API {
342  ErrorCode_t (*RegisterClassHandler)(USBD_HANDLE_T hUsb, USB_EP_HANDLER_T pfn, void *data);
343 
366  ErrorCode_t (*RegisterEpHandler)(USBD_HANDLE_T hUsb, uint32_t ep_index, USB_EP_HANDLER_T pfn, void *data);
367 
384  void (*SetupStage )(USBD_HANDLE_T hUsb);
385 
402  void (*DataInStage)(USBD_HANDLE_T hUsb);
403 
420  void (*DataOutStage)(USBD_HANDLE_T hUsb);
421 
438  void (*StatusInStage)(USBD_HANDLE_T hUsb);
455  void (*StatusOutStage)(USBD_HANDLE_T hUsb);
456 
473  void (*StallEp0)(USBD_HANDLE_T hUsb);
474 
494  ErrorCode_t (*GetEpHandler)(USBD_HANDLE_T hUsb, uint32_t ep_index, USB_EP_HANDLER_T *ep_handler, void * *data);
495 
497 
498 /*-----------------------------------------------------------------------------
499  * Private functions & structures prototypes
500  *-----------------------------------------------------------------------------*/
501 
504 /* Abstract declaration to avoid circular includes */
505 struct _USB_CORE_CTRL_T;
506 
507 typedef struct _USB_CORE_CTRL_T USB_CORE_CTRL_T;
508 
509 /* For declaration below */
510 struct USBD_HW_API;
511 
512 /* USB device Speed status defines */
513 #define USB_FULL_SPEED 0
514 #define USB_HIGH_SPEED 1
515 
516 /* USB Endpoint Data Structure */
517 typedef struct _USB_EP_DATA {
518  uint8_t *pData;
519  uint16_t Count;
520  uint16_t pad0;
521 } USB_EP_DATA;
522 
523 /* USB core controller data structure */
524 struct _USB_CORE_CTRL_T {
525  /* override-able function pointers ~ c++ style virtual functions*/
526  USB_CB_T USB_EvtSetupHandler;
527  USB_CB_T USB_EvtOutHandler;
528  USB_PARAM_CB_T USB_ReqVendor;
529  USB_CB_T USB_ReqGetStatus;
530  USB_CB_T USB_ReqGetDescriptor;
531  USB_CB_T USB_ReqGetConfiguration;
532  USB_CB_T USB_ReqSetConfiguration;
533  USB_CB_T USB_ReqGetInterface;
534  USB_CB_T USB_ReqSetInterface;
535  USB_PARAM_CB_T USB_ReqSetClrFeature;
536 
537  /* USB Device Events Callback Functions */
538  USB_CB_T USB_Reset_Event;
539  USB_CB_T USB_Suspend_Event;
540  USB_CB_T USB_Resume_Event;
541  USB_CB_T USB_SOF_Event;
542  USB_PARAM_CB_T USB_Power_Event;
543  USB_PARAM_CB_T USB_Error_Event;
544  USB_PARAM_CB_T USB_WakeUpCfg;
545 
546  /* USB Core Events Callback Functions */
547  USB_CB_T USB_Configure_Event;
548  USB_CB_T USB_Interface_Event;
549  USB_CB_T USB_Feature_Event;
550 
551  /* cache and MMU translation functions */
552  uint32_t (*virt_to_phys)(void *vaddr);
553  void (*cache_flush)(uint32_t *start_adr, uint32_t *end_adr);
554 
555  /* event handlers for endpoints. */
556  USB_EP_HANDLER_T ep_event_hdlr[2 * USB_MAX_EP_NUM];
557  void *ep_hdlr_data[2 * USB_MAX_EP_NUM];
558 
559  /* USB class handlers */
560  USB_EP_HANDLER_T ep0_hdlr_cb[USB_MAX_IF_NUM];
561  void *ep0_cb_data[USB_MAX_IF_NUM];
562  uint8_t num_ep0_hdlrs;
563  /* USB Core data Variables */
564  uint8_t max_num_ep; /* max number of endpoints supported by the HW */
565  uint8_t device_speed;/* actually USB speed running on the bus after CHIRP. */
566  uint8_t num_interfaces;
567  uint8_t device_addr;
568  uint8_t config_value;
569  uint16_t device_status;
570  uint8_t *device_desc;
571  uint8_t *string_desc;
572  uint8_t *full_speed_desc;
573  uint8_t *high_speed_desc;
574  uint8_t *device_qualifier;
575  uint32_t ep_mask;
576  uint32_t ep_halt;
577  uint32_t ep_stall;
578  /* Current selected alt intf number. Upper 4 bits store number of alt interface present for given interface */
579  uint8_t alt_setting[USB_MAX_IF_NUM];
580  /* HW driver data pointer */
581  void *hw_data;
582 
583  /* USB Endpoint 0 Data Info */
584  USB_EP_DATA EP0Data;
585 
586  /* USB Endpoint 0 Buffer */
587  // ALIGNED(4)
588  uint8_t EP0Buf[64];
589 
590  /* USB Setup Packet */
591  // ALIGNED(4)
592  USB_SETUP_PACKET SetupPacket;
593  uint32_t lpm_setting;
594  ErrorCode_t (*USB_ReqGetStringDesc)(USBD_HANDLE_T hUsb, USB_SETUP_PACKET* setupPacket, uint8_t** pData);
595  uint8_t *bos_descriptor;
596 
597  const struct USBD_HW_API *hw_api;
598 };
599 
600 /* USB Core Functions */
601 extern void mwUSB_InitCore(USB_CORE_CTRL_T *pCtrl, USB_CORE_DESCS_T *pdescr, USBD_API_INIT_PARAM_T *param);
602 
603 extern void mwUSB_ResetCore(USBD_HANDLE_T hUsb);
604 
605 /* inline functions */
606 static INLINE uint32_t USB_IsConfigured(USBD_HANDLE_T hUsb)
607 {
608  USB_CORE_CTRL_T *pCtrl = (USB_CORE_CTRL_T *) hUsb;
609  return (pCtrl->config_value != 0);
610 }
611 
613 /* midleware API */
614 extern ErrorCode_t mwUSB_RegisterClassHandler(USBD_HANDLE_T hUsb, USB_EP_HANDLER_T pfn, void *data);
615 
616 extern ErrorCode_t mwUSB_RegisterEpHandler(USBD_HANDLE_T hUsb, uint32_t ep_index, USB_EP_HANDLER_T pfn, void *data);
617 
618 extern void mwUSB_SetupStage (USBD_HANDLE_T hUsb);
619 
620 extern void mwUSB_DataInStage(USBD_HANDLE_T hUsb);
621 
622 extern void mwUSB_DataOutStage(USBD_HANDLE_T hUsb);
623 
624 extern void mwUSB_StatusInStage(USBD_HANDLE_T hUsb);
625 
626 extern void mwUSB_StatusOutStage(USBD_HANDLE_T hUsb);
627 
628 extern void mwUSB_StallEp0(USBD_HANDLE_T hUsb);
629 
630 extern ErrorCode_t mwUSB_RegisterClassHandler(USBD_HANDLE_T hUsb, USB_EP_HANDLER_T pfn, void *data);
631 
632 extern ErrorCode_t mwUSB_RegisterEpHandler(USBD_HANDLE_T hUsb, uint32_t ep_index, USB_EP_HANDLER_T pfn, void *data);
633 
634 extern ErrorCode_t mwUSB_GetEpHandler(USBD_HANDLE_T hUsb, uint32_t ep_index, USB_EP_HANDLER_T *ep_handler,
635  void * *data);
636 
637 extern void mwUSB_SetupStage (USBD_HANDLE_T hUsb);
638 
639 extern void mwUSB_DataInStage(USBD_HANDLE_T hUsb);
640 
641 extern void mwUSB_DataOutStage(USBD_HANDLE_T hUsb);
642 
643 extern void mwUSB_StatusInStage(USBD_HANDLE_T hUsb);
644 
645 extern void mwUSB_StatusOutStage(USBD_HANDLE_T hUsb);
646 
647 extern void mwUSB_StallEp0(USBD_HANDLE_T hUsb);
648 
653 #endif /* __MW_USBD_CORE_H__ */
ErrorCode_t
Definition: error.h:38
ErrorCode_t(* USB_PARAM_CB_T)(USBD_HANDLE_T hUsb, uint32_t param1)
USB device stack's event callback function type.
Definition: mw_usbd_core.h:80
uint8_t * full_speed_desc
Definition: mw_usbd_core.h:122
USB_CB_T USB_Feature_Event
Definition: mw_usbd_core.h:279
uint32_t lpm_setting
Definition: mw_usbd_core.h:286
uint32_t mem_size
Definition: mw_usbd_core.h:158
USB_CB_T USB_Reset_Event
Definition: mw_usbd_core.h:178
USB descriptors data structure.
Definition: mw_usbd_core.h:119
uint8_t high_speed_capable
Definition: mw_usbd_core.h:165
Error code returned by Boot ROM drivers/library functions.This file contains unified error codes to b...
USB_PARAM_CB_T USB_WakeUpCfg
Definition: mw_usbd_core.h:232
uint8_t * string_desc
Definition: mw_usbd_core.h:121
ErrorCode_t(* USB_EP_HANDLER_T)(USBD_HANDLE_T hUsb, void *data, uint32_t event)
USBD setup request and endpoint event handler type.
Definition: mw_usbd_core.h:105
USB_PARAM_CB_T USB_Power_Event
Definition: mw_usbd_core.h:235
uint32_t mem_base
Definition: mw_usbd_core.h:153
ErrorCode_t(* USB_CB_T)(USBD_HANDLE_T hUsb)
USB device stack's event callback function type.
Definition: mw_usbd_core.h:63
USBD stack Core API functions structure.
Definition: mw_usbd_core.h:321
USB_CB_T reserved_sbz
Definition: mw_usbd_core.h:201
USB_CB_T USB_Resume_Event
Definition: mw_usbd_core.h:198
USB_CB_T USB_Configure_Event
Definition: mw_usbd_core.h:257
USB_CB_T USB_SOF_Event
Definition: mw_usbd_core.h:215
Common definitions and declarations for the USB stack.
uint8_t * bos_descriptor
Definition: mw_usbd_core.h:140
uint8_t * device_desc
Definition: mw_usbd_core.h:120
uint8_t * device_qualifier
Definition: mw_usbd_core.h:136
uint8_t max_num_ep
Definition: mw_usbd_core.h:161
USB_PARAM_CB_T USB_Error_Event
Definition: mw_usbd_core.h:245
uint32_t usb_reg_base
Definition: mw_usbd_core.h:152
USB_CB_T USB_Interface_Event
Definition: mw_usbd_core.h:268
uint8_t double_buffer
Definition: mw_usbd_core.h:167
uint8_t * high_speed_desc
Definition: mw_usbd_core.h:128
void * USBD_HANDLE_T
Definition: mw_usbd.h:704
USB device stack initialization parameter data structure.
Definition: mw_usbd_core.h:151
USB_CB_T USB_Suspend_Event
Definition: mw_usbd_core.h:187