Quellcodebibliothek Statistik Leitseite products/Sources/formale Sprachen/C/Linux/include/linux/usb/   (Open Source Betriebssystem Version 6.17.9©)  Datei vom 24.10.2025 mit Größe 2 kB image not shown  

Quellcode-Bibliothek func_utils.h   Sprache: C

 
// SPDX-License-Identifier: GPL-2.0
/*
 * func_utils.h
 *
 * Utility definitions for USB functions
 *
 * Copyright (c) 2013 Samsung Electronics Co., Ltd.
 * http://www.samsung.com
 *
 * Author: Andrzej Pietrasiewicz <andrzejtp2010@gmail.com>
 */


#ifndef _FUNC_UTILS_H_
#define _FUNC_UTILS_H_

#include <linux/usb/gadget.h>
#include <linux/overflow.h>

/* Variable Length Array Macros **********************************************/
#define vla_group(groupname) size_t groupname##__next = 0
#define vla_group_size(groupname) groupname##__next

#define vla_item(groupname, type, name, n) \
 size_t groupname##_##name##__offset = ({          \
  size_t offset = 0;            \
  if (groupname##__next != SIZE_MAX) {          \
   size_t align_mask = __alignof__(type) - 1;        \
   size_t size = array_size(n, sizeof(type));        \
   offset = (groupname##__next + align_mask) &        \
      ~align_mask;           \
   if (check_add_overflow(offset, size,         \
            &groupname##__next)) {          \
    groupname##__next = SIZE_MAX;         \
    offset = 0;           \
   }             \
  }              \
  offset;              \
 })

#define vla_item_with_sz(groupname, type, name, n) \
 size_t groupname##_##name##__sz = array_size(n, sizeof(type));         \
 size_t groupname##_##name##__offset = ({           \
  size_t offset = 0;      \
  if (groupname##__next != SIZE_MAX) {    \
   size_t align_mask = __alignof__(type) - 1;  \
   offset = (groupname##__next + align_mask) &  \
      ~align_mask;     \
   if (check_add_overflow(offset, groupname##_##name##__sz,\
       &groupname##__next)) { \
    groupname##__next = SIZE_MAX;   \
    offset = 0;     \
   }       \
  }        \
  offset;        \
 })

#define vla_ptr(ptr, groupname, name) \
 ((void *) ((char *)ptr + groupname##_##name##__offset))

struct usb_ep;
struct usb_request;

/**
 * alloc_ep_req - returns a usb_request allocated by the gadget driver and
 * allocates the request's buffer.
 *
 * @ep: the endpoint to allocate a usb_request
 * @len: usb_requests's buffer suggested size
 *
 * In case @ep direction is OUT, the @len will be aligned to ep's
 * wMaxPacketSize. In order to avoid memory leaks or drops, *always* use
 * usb_requests's length (req->length) to refer to the allocated buffer size.
 * Requests allocated via alloc_ep_req() *must* be freed by free_ep_req().
 */

struct usb_request *alloc_ep_req(struct usb_ep *ep, size_t len);

/* Frees a usb_request previously allocated by alloc_ep_req() */
static inline void free_ep_req(struct usb_ep *ep, struct usb_request *req)
{
 WARN_ON(req->buf == NULL);
 kfree(req->buf);
 req->buf = NULL;
 usb_ep_free_request(ep, req);
}

#endif /* _FUNC_UTILS_H_ */

Messung V0.5
C=94 H=100 G=96

¤ Die Informationen auf dieser Webseite wurden nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit, noch Qualität der bereit gestellten Informationen zugesichert.0.20Bemerkung:  (vorverarbeitet)  ¤

*Bot Zugriff






Wurzel

Suchen

Beweissystem der NASA

Beweissystem Isabelle

NIST Cobol Testsuite

Cephes Mathematical Library

Wiener Entwicklungsmethode

Haftungshinweis

Die Informationen auf dieser Webseite wurden nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit, noch Qualität der bereit gestellten Informationen zugesichert.

Bemerkung:

Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.