xref: /drivers/peripheral/usb/net/include/cdc_ether.h (revision 094332d3)
1/*
2 * Copyright (c) 2021 Huawei Device Co., Ltd.
3 * Licensed under the Apache License, Version 2.0 (the "License");
4 * you may not use this file except in compliance with the License.
5 * You may obtain a copy of the License at
6 *
7 *     http://www.apache.org/licenses/LICENSE-2.0
8 *
9 * Unless required by applicable law or agreed to in writing, software
10 * distributed under the License is distributed on an "AS IS" BASIS,
11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 * See the License for the specific language governing permissions and
13 * limitations under the License.
14 */
15
16#ifndef HDF_USB_CDC_ETHER_H
17#define HDF_USB_CDC_ETHER_H
18
19#include "hdf_base.h"
20#include "hdf_device_desc.h"
21#include "osal_atomic.h"
22#include "usb_session.h"
23#include "usb_interface_pool.h"
24#include "data_fifo.h"
25
26#define ECM_NW  16
27#define ECM_NR  16
28#define TARGET_MASK             0x3
29#define REQUEST_TYPE_MASK       0x3
30#define DIRECTION_MASK          0x1
31#define USB_CTRL_SET_TIMEOUT    5000
32#define READ_BUF_SIZE           8192
33#define USB_MAX_INTERFACES      32
34#define ETHER_SLEEP_TIME        100000
35#define ETHER_SLEEP_MS_TIME     2
36
37enum EcmCmd {
38    CMD_ECM_OPEN = 0,
39    CMD_ECM_CLOSE,
40    CMD_ECM_READ,
41    CMD_ECM_WRITE,
42    CMD_ECM_GET_MAC,
43    CMD_ECM_ADD_INTERFACE = 14,
44    CMD_ECM_REMOVE_INTERFACE,
45};
46
47typedef enum {
48    HOST_ECM_OPEN = 0,
49    HOST_ECM_CLOSE,
50    HOST_ECM_READ,
51    HOST_ECM_WRITE,
52    HOST_ECM_GET_MAC,
53    HOST_ECM_ADD_INTERFACE = 16,
54    HOST_ECM_REMOVE_INTERFACE,
55} EcmModuleTestCmdType;
56
57struct EcmDevice;
58struct EcmWb {
59    struct UsbRequest *request;
60    struct EcmDevice *instance;
61    uint8_t *buf;
62    int32_t    len;
63    int32_t    use;
64    struct EcmDevice *ecm;
65};
66
67struct EcmRb {
68    uint8_t *base;
69    int32_t size;
70    int32_t index;
71    int32_t use;
72    struct EcmDevice *instance;
73};
74
75struct EcmControlParams {
76    uint8_t request;
77    uint8_t requestType;
78    uint16_t value;
79    uint16_t index;
80    void *data;
81    uint16_t size;
82};
83
84struct EcmDevice {
85    struct IDeviceIoService service;
86    struct HdfDeviceObject *device;
87    struct UsbInterface *ctrIface;
88    struct UsbPipeInfo  *ctrPipe;
89    struct UsbPipeInfo  *intPipe;
90    struct UsbPipeInfo  *dataInPipe;
91    struct UsbPipeInfo  *dataOutPipe;
92    struct EcmWb wb[ECM_NW];
93    struct EcmRb  rb[ECM_NR];
94    struct UsbPipeInfo wPipeInfo;
95    struct OsalMutex writeLock;
96    struct OsalMutex readLock;
97    struct UsbRequest *notifyReq;
98    struct UsbRequest *readReq[ECM_NR];
99    struct UsbRequest *writeReq;
100    struct UsbRequest *ctrlReq;
101    struct UsbInterface *itface;
102    UsbInterfaceHandle *devHandle[USB_MAX_INTERFACES];
103    UsbInterfaceHandle *ctrDevHandle;
104    struct UsbSession *session;
105    struct DataFifo readFifo;
106    uint32_t nbIndex;
107    uint32_t nbSize;
108    int32_t transmitting;
109    int32_t ctrlReqNum;
110    uint8_t busNum;
111    uint8_t devAddr;
112    uint8_t interfaceCnt;
113    uint8_t *notificationBuffer;
114    uint8_t interfaceIndex[USB_MAX_INTERFACES];
115    struct UsbInterface *iface[USB_MAX_INTERFACES];
116    uint32_t ctrlSize;
117    uint32_t intSize;
118    uint32_t writeSize;
119    uint32_t readSize;
120    struct UsbCdcLineCoding   lineCoding;
121    bool   openFlag;
122    uint32_t readReqNum;
123    uint32_t writeReqNum;
124    bool initFlag;
125};
126
127#endif
128