1/* ---------------------------------------------------------------------------- 2 * Copyright (c) Huawei Technologies Co., Ltd. 2021-2021. All rights reserved. 3 * Description: LiteOS USB Driver Config Data Stream HeadFile 4 * Author: Yannik Li 5 * Create: 2021-02-21 6 * Redistribution and use in source and binary forms, with or without modification, 7 * are permitted provided that the following conditions are met: 8 * 1. Redistributions of source code must retain the above copyright notice, this list of 9 * conditions and the following disclaimer. 10 * 2. Redistributions in binary form must reproduce the above copyright notice, this list 11 * of conditions and the following disclaimer in the documentation and/or other materials 12 * provided with the distribution. 13 * 3. Neither the name of the copyright holder nor the names of its contributors may be used 14 * to endorse or promote products derived from this software without specific prior written 15 * permission. 16 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 17 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, 18 * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 19 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR 20 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 21 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 22 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; 23 * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 24 * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR 25 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF 26 * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 27 * --------------------------------------------------------------------------- */ 28/* ---------------------------------------------------------------------------- 29 * Notice of Export Control Law 30 * =============================================== 31 * Huawei LiteOS may be subject to applicable export control laws and regulations, which might 32 * include those applicable to Huawei LiteOS of U.S. and the country in which you are located. 33 * Import, export and usage of Huawei LiteOS in any manner by you shall be in compliance with such 34 * applicable export control laws and regulations. 35 * --------------------------------------------------------------------------- */ 36 37#ifndef LITEOS_USB_OBJ_H 38#define LITEOS_USB_OBJ_H 39 40/************************************************************************************ 41 * Included Files 42 ************************************************************************************/ 43 44#include "obj_ref.h" 45#include <linux/spinlock.h> 46#include <linux/list.h> 47 48/************************************************************************************ 49 * Public Functions 50 ************************************************************************************/ 51 52struct usb_obj { 53 const char *name; 54 struct list_head entry; 55 struct usb_obj *parent; 56 struct list_head children; 57 spinlock_t lock; 58 struct obj_ref ref; 59 struct list_head objres_head; 60 spinlock_t objres_lock; 61 void (*release)(struct usb_obj *obj); 62}; 63 64typedef int (*usbobj_match_t)(struct usb_obj *obj, void *match_data); 65 66extern int usbobj_add(struct usb_obj *obj, struct usb_obj *parent); 67extern int usbobj_remove(struct usb_obj *obj); 68extern struct usb_obj *usbobj_find(struct usb_obj *obj, usbobj_match_t match, void *match_data); 69extern int usbobj_init(struct usb_obj *obj, const char *name, void (*release)(struct usb_obj *obj)); 70extern void usbobj_get(struct usb_obj *obj); 71extern void usbobj_put(struct usb_obj *obj); 72extern void usbobj_for_each_child(struct usb_obj *obj, 73 usbobj_match_t match, void *match_data, 74 void (*fn)(struct usb_obj *, void *), 75 void *data); 76extern void objres_release_all(struct usb_obj *obj); 77 78extern void *usbm_malloc(struct usb_obj *obj, size_t size); 79extern void *usbm_zalloc(struct usb_obj *obj, size_t size); 80extern void usbm_free(struct usb_obj *obj, void *p); 81extern char *usbm_strdup(struct usb_obj *obj, const char *s); 82 83static inline int usbobj_default_match(struct usb_obj *obj, void *match_data) 84{ 85 return !strcmp(obj->name, (char *)match_data); 86} 87 88/* the obj has to be the first memter */ 89static inline void usbobj_default_release(struct usb_obj *obj) 90{ 91 usbm_free(obj->parent, obj); 92} 93 94#endif /* LITEOS_USB_OBJ_H */ 95