1 /*
2  * Copyright (c) 2021-2023 Huawei Device Co., Ltd.
3  *
4  * HDF is dual licensed: you can use it either under the terms of
5  * the GPL, or the BSD license, at your option.
6  * See the LICENSE file in the root of this repository for complete details.
7  */
8 
9 #ifndef HDF_IBUS_INTF_H
10 #define HDF_IBUS_INTF_H
11 
12 #include "hdf_wlan_config.h"
13 
14 #ifdef __cplusplus
15 #if __cplusplus
16 extern "C" {
17 #endif
18 #endif
19 
20 struct BusDev;
21 typedef void IrqHandler(void *);
22 typedef int32_t MapHandler(void *);
23 struct SdioConfigInfo {
24     uint32_t maxBlockNum;
25     uint32_t maxBlockSize;
26     uint32_t maxRequestSize;
27     uint32_t funcNumSize;
28     uint32_t irqCap;
29     void *data;
30 };
31 
32 union BusInfo {
33     struct SdioConfigInfo sdioInfo;
34 };
35 
36 struct BusConfig {
37     uint8_t busType;
38     union BusInfo busInfo;
39 };
40 
41 struct PrivateData {
42     void *data;
43     const char *driverName;
44     int32_t (*release)(void *data);
45 };
46 
47 struct DevOps {
48     int32_t (*getBusInfo)(struct BusDev *dev, struct BusConfig *busCfg);
49     void (*deInit)(struct BusDev *dev);
50     int32_t (*init)(struct BusDev *dev, const struct HdfConfigWlanBus *busCfg);
51 
52     int32_t (*readData)(struct BusDev *dev, uint32_t addr, uint32_t cnt, uint8_t *buf);
53     int32_t (*writeData)(struct BusDev *dev, uint32_t addr, uint32_t cnt, uint8_t *buf);
54 
55     int32_t (*bulkRead)(struct BusDev *dev, uint32_t addr, uint32_t cnt, uint8_t *buf, uint32_t sg_len);
56     int32_t (*bulkWrite)(struct BusDev *dev, uint32_t addr, uint32_t cnt, uint8_t *buf, uint32_t sg_len);
57 
58     int32_t (*readFunc0)(struct BusDev *dev, uint32_t addr, uint32_t cnt, uint8_t *buf);
59     int32_t (*writeFunc0)(struct BusDev *dev, uint32_t addr, uint32_t cnt, uint8_t *buf);
60 
61     int32_t (*disableBus)(struct BusDev *dev);
62     int32_t (*claimIrq)(struct BusDev *dev, IrqHandler *handler, void *data);
63     int32_t (*releaseIrq)(struct BusDev *dev);
64     int32_t (*reset)(struct BusDev *dev);
65 
66     void (*claimHost)(struct BusDev *dev);
67     void (*releaseHost)(struct BusDev *dev);
68 
69     // dma map/unmap
70     int32_t (*dmaMap)(struct BusDev *dev, MapHandler* cb, uintptr_t addr, uint32_t len, uint8_t dir);
71     int32_t (*dmaUnmap)(struct BusDev *dev, uintptr_t addr, uint32_t len, uint8_t dir);
72     // io read/write
73     int32_t (*ioRead)(struct BusDev *dev, uint32_t addr, uint32_t cnt, uint8_t *buf);
74     int32_t (*ioWrite)(struct BusDev *dev, uint32_t addr, uint32_t cnt, uint8_t *buf);
75 };
76 
77 struct BusDev {
78     void *devBase;
79     struct DevOps ops;
80     struct PrivateData priData;
81 };
82 
83 struct BusDev *HdfWlanCreateBusManager(const struct HdfConfigWlanBus *busConfig);
84 int32_t HdfWlanBusAbsInit(struct BusDev *dev, const struct HdfConfigWlanBus *busConfig);
85 int32_t HdfWlanConfigBusAbs(uint8_t busId);
86 
87 
88 #ifdef __cplusplus
89 #if __cplusplus
90 }
91 #endif
92 #endif
93 
94 #endif
95