66 lines
2.1 KiB
C++
66 lines
2.1 KiB
C++
/*---------------------------------------------------------*\
|
|
| i2c_smbus_piix4.h |
|
|
| |
|
|
| PIIX4 SMBUS driver for Windows |
|
|
| |
|
|
| Adam Honse (CalcProgrammer1) 08 Aug 2018 |
|
|
| Portions based on Linux source code |
|
|
| |
|
|
| This file is part of the OpenRGB project |
|
|
| SPDX-License-Identifier: GPL-2.0-only |
|
|
\*---------------------------------------------------------*/
|
|
|
|
#pragma once
|
|
|
|
#include "i2c_smbus.h"
|
|
#ifdef _WIN32
|
|
#include "windows.h"
|
|
#endif
|
|
|
|
// PIIX4 SMBus address offsets
|
|
#define SMBHSTSTS (0 + piix4_smba)
|
|
#define SMBHSLVSTS (1 + piix4_smba)
|
|
#define SMBHSTCNT (2 + piix4_smba)
|
|
#define SMBHSTCMD (3 + piix4_smba)
|
|
#define SMBHSTADD (4 + piix4_smba)
|
|
#define SMBHSTDAT0 (5 + piix4_smba)
|
|
#define SMBHSTDAT1 (6 + piix4_smba)
|
|
#define SMBBLKDAT (7 + piix4_smba)
|
|
#define SMBSLVCNT (8 + piix4_smba)
|
|
#define SMBSHDWCMD (9 + piix4_smba)
|
|
#define SMBSLVEVT (0xA + piix4_smba)
|
|
#define SMBSLVDAT (0xC + piix4_smba)
|
|
|
|
#define MAX_TIMEOUT 5000
|
|
#define RETRY_DELAY_US 250
|
|
|
|
// PIIX4 constants
|
|
#define PIIX4_QUICK 0x00
|
|
#define PIIX4_BYTE 0x04
|
|
#define PIIX4_BYTE_DATA 0x08
|
|
#define PIIX4_WORD_DATA 0x0C
|
|
#define PIIX4_BLOCK_DATA 0x14
|
|
|
|
#ifdef _WIN32
|
|
#define GLOBAL_SMBUS_MUTEX_NAME "Global\\Access_SMBUS.HTP.Method"
|
|
#endif
|
|
|
|
class i2c_smbus_piix4 : public i2c_smbus_interface
|
|
{
|
|
public:
|
|
u16 piix4_smba = 0x0B00;
|
|
i2c_smbus_piix4();
|
|
~i2c_smbus_piix4();
|
|
|
|
private:
|
|
int piix4_transaction();
|
|
s32 piix4_access(u16 addr, char read_write, u8 command, int size, i2c_smbus_data *data);
|
|
s32 i2c_smbus_xfer(u8 addr, char read_write, u8 command, int size, i2c_smbus_data* data);
|
|
s32 i2c_xfer(u8 addr, char read_write, int* size, u8* data);
|
|
#ifdef _WIN32
|
|
HANDLE delay_timer = NULL;
|
|
HANDLE global_smbus_access_handle = NULL;
|
|
#else
|
|
bool delay_timer;
|
|
#endif
|
|
};
|