52 lines
1.5 KiB
C++
52 lines
1.5 KiB
C++
#ifndef _QUALCOMMWIRELESS_HPP
|
|
#define _QUALCOMMWIRELESS_HPP
|
|
|
|
#pragma clang diagnostic push
|
|
#pragma clang diagnostic ignored "-Wdeprecated-declarations"
|
|
|
|
#include <IOKit/IOService.h>
|
|
#include <IOKit/usb/IOUSBHostDevice.h>
|
|
#include <IOKit/usb/IOUSBHostInterface.h>
|
|
#include <IOKit/usb/IOUSBHostPipe.h>
|
|
#include <IOKit/IOBufferMemoryDescriptor.h>
|
|
|
|
#define QCA_GET_TARGET_VERSION 0x09
|
|
#define QCA_CHECK_STATUS 0x05
|
|
#define QCA_DFU_DOWNLOAD 0x01
|
|
#define QCA_DFU_PACKET_LEN 4096
|
|
|
|
struct qca_version {
|
|
uint32_t rom_version;
|
|
uint32_t patch_version;
|
|
uint32_t ram_version;
|
|
uint8_t chip_id;
|
|
uint8_t platform_id;
|
|
uint16_t flag;
|
|
uint8_t reserved[4];
|
|
} __attribute__((packed));
|
|
|
|
class QualcommWireless : public IOService {
|
|
OSDeclareDefaultStructors(QualcommWireless)
|
|
|
|
private:
|
|
IOUSBHostDevice *fDevice;
|
|
IOUSBHostInterface *fInterface;
|
|
IOUSBHostPipe *fBulkOutPipe;
|
|
IOUSBHostPipe *fIntrInPipe;
|
|
IOBufferMemoryDescriptor *fBulkBuffer;
|
|
|
|
uint8_t checkStatus(void);
|
|
bool queryTargetVersion(struct qca_version *verOut);
|
|
bool downloadFirmware(const uint8_t *data, size_t size, size_t hdrSize);
|
|
bool sendHciReset(void);
|
|
|
|
public:
|
|
virtual bool init(OSDictionary *dictionary = 0) override;
|
|
virtual void free(void) override;
|
|
virtual IOService *probe(IOService *provider, SInt32 *score) override;
|
|
virtual bool start(IOService *provider) override;
|
|
virtual void stop(IOService *provider) override;
|
|
};
|
|
|
|
#endif
|