GCC Code Coverage Report
Directory: ./ Exec Total Coverage
File: core/src/ux_host_stack_endpoint_instance_delete.c Lines: 11 11 100.0 %
Date: 2024-12-12 17:16:36 Branches: 4 4 100.0 %

Line Branch Exec Source
1
/***************************************************************************
2
 * Copyright (c) 2024 Microsoft Corporation
3
 *
4
 * This program and the accompanying materials are made available under the
5
 * terms of the MIT License which is available at
6
 * https://opensource.org/licenses/MIT.
7
 *
8
 * SPDX-License-Identifier: MIT
9
 **************************************************************************/
10
11
12
/**************************************************************************/
13
/**************************************************************************/
14
/**                                                                       */
15
/** USBX Component                                                        */
16
/**                                                                       */
17
/**   Host Stack                                                          */
18
/**                                                                       */
19
/**************************************************************************/
20
/**************************************************************************/
21
22
23
/* Include necessary system files.  */
24
25
#define UX_SOURCE_CODE
26
27
#include "ux_api.h"
28
#include "ux_host_stack.h"
29
30
31
/**************************************************************************/
32
/*                                                                        */
33
/*  FUNCTION                                               RELEASE        */
34
/*                                                                        */
35
/*    _ux_host_stack_endpoint_instance_delete             PORTABLE C      */
36
/*                                                           6.1.10       */
37
/*  AUTHOR                                                                */
38
/*                                                                        */
39
/*    Chaoqiong Xiao, Microsoft Corporation                               */
40
/*                                                                        */
41
/*  DESCRIPTION                                                           */
42
/*                                                                        */
43
/*    This function will delete an endpoint instance. It does not delete  */
44
/*    the endpoint container but it removes the HCD endpoint and reclaims */
45
/*    the bandwidth.                                                      */
46
/*                                                                        */
47
/*  INPUT                                                                 */
48
/*                                                                        */
49
/*    endpoint                              Endpoint to delete            */
50
/*                                                                        */
51
/*  OUTPUT                                                                */
52
/*                                                                        */
53
/*    None                                                                */
54
/*                                                                        */
55
/*  CALLS                                                                 */
56
/*                                                                        */
57
/*    _ux_host_stack_bandwidth_release      Release bandwidth             */
58
/*    _ux_utility_semaphore_delete          Semaphore delete              */
59
/*    (ux_hcd_entry_function)               HCD entry function            */
60
/*                                                                        */
61
/*  CALLED BY                                                             */
62
/*                                                                        */
63
/*    USBX Components                                                     */
64
/*                                                                        */
65
/*  RELEASE HISTORY                                                       */
66
/*                                                                        */
67
/*    DATE              NAME                      DESCRIPTION             */
68
/*                                                                        */
69
/*  05-19-2020     Chaoqiong Xiao           Initial Version 6.0           */
70
/*  09-30-2020     Chaoqiong Xiao           Modified comment(s),          */
71
/*                                            optimized based on compile  */
72
/*                                            definitions,                */
73
/*                                            resulting in version 6.1    */
74
/*  06-02-2021     Chaoqiong Xiao           Modified comment(s),          */
75
/*                                            fixed trace enabled error,  */
76
/*                                            resulting in version 6.1.7  */
77
/*  01-31-2022     Chaoqiong Xiao           Modified comment(s),          */
78
/*                                            added standalone support,   */
79
/*                                            resulting in version 6.1.10 */
80
/*                                                                        */
81
/**************************************************************************/
82
1979
VOID  _ux_host_stack_endpoint_instance_delete(UX_ENDPOINT *endpoint)
83
{
84
85
UX_HCD          *hcd;
86
87
88
    /* Obtain the HCD for this endpoint.  */
89
1979
    hcd = UX_DEVICE_HCD_GET(endpoint -> ux_endpoint_device);
90
91
    /* If trace is enabled, insert this event into the trace buffer.  */
92
    UX_TRACE_IN_LINE_INSERT(UX_TRACE_HOST_STACK_ENDPOINT_INSTANCE_DELETE, endpoint -> ux_endpoint_device, endpoint, 0, 0, UX_TRACE_HOST_STACK_EVENTS, 0, 0)
93
94
    /* Ensure the endpoint had its physical ED allocated.  */
95
1979
    if (endpoint -> ux_endpoint_ed != UX_NULL)
96
    {
97
98
        /* Destroy this endpoint.  */
99
1707
        hcd -> ux_hcd_entry_function(hcd, UX_HCD_DESTROY_ENDPOINT, (VOID *) endpoint);
100
101
        /* Free the semaphore previously attached to the transfer_request of this endpoint.  */
102
1707
        _ux_host_semaphore_delete(&endpoint -> ux_endpoint_transfer_request.ux_transfer_request_semaphore);
103
    }
104
105
    /* If the endpoint requested guaranteed bandwidth, free it now.  */
106
1979
    switch ((endpoint -> ux_endpoint_descriptor.bmAttributes) & UX_MASK_ENDPOINT_TYPE)
107
    {
108
109
840
    case UX_CONTROL_ENDPOINT:
110
    case UX_BULK_ENDPOINT:
111
112
840
        break;
113
114
1139
    default:
115
116
        /* Reclaim its bandwidth.  */
117
1139
        _ux_host_stack_bandwidth_release(hcd, endpoint);
118
    }
119
120
    /* If trace is enabled, register this object.  */
121
    UX_TRACE_OBJECT_UNREGISTER(endpoint);
122
123
    /* Return to caller.  */
124
1979
    return;
125
}
126