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