summaryrefslogtreecommitdiff
path: root/Board/IO/F81866/BSP/F81866SmartFan.c
diff options
context:
space:
mode:
Diffstat (limited to 'Board/IO/F81866/BSP/F81866SmartFan.c')
-rw-r--r--Board/IO/F81866/BSP/F81866SmartFan.c347
1 files changed, 236 insertions, 111 deletions
diff --git a/Board/IO/F81866/BSP/F81866SmartFan.c b/Board/IO/F81866/BSP/F81866SmartFan.c
index 674a73e..23a7cc8 100644
--- a/Board/IO/F81866/BSP/F81866SmartFan.c
+++ b/Board/IO/F81866/BSP/F81866SmartFan.c
@@ -54,46 +54,70 @@ typedef struct _S3_SAVE_DATA{
//----------------------------------------------------------------------------------------------
// smart system fan registers need init AfterActivate. !!!AfterActivate
//----------------------------------------------------------------------------------------------
+#define IDX_FAN_MODE 0
+#define IDX_TEMP_HYS 1
+#define IDX_FAN_SPEED_MSB 2
+#define IDX_FAN_SPEED_LSB 3
+#define IDX_TEMP_BOUND1 4
+#define IDX_TEMP_BOUND2 5
+#define IDX_TEMP_BOUND3 6
+#define IDX_TEMP_BOUND4 7
+#define IDX_SPEED_SEG1 8
+#define IDX_SPEED_SEG2 9
+#define IDX_SPEED_SEG3 10
+#define IDX_SPEED_SEG4 11
+#define IDX_SPEED_SEG5 12
+#define IDX_TEMP_SRCSEL 13
+
DXE_SMF_INIT_DATA DXE_FAN1_INIT_TABLE[] = {
- {0x96, 0xFC, 0x00},
- {0xA2, 0xFF, 0x00},
- {0xA3, 0xFF, 0x00},
- {0xA6, 0xFF, 0x00},
- {0xA7, 0xFF, 0x00},
- {0xA8, 0xFF, 0x00},
- {0xA9, 0XFF, 0x00},
- {0xAB, 0xFF, 0x00},
- {0xAC, 0xFF, 0x00},
- {0xAD, 0xFF, 0x00},
- {0xAE, 0xFF, 0x00},
+ {0x96, 0xFC, 0x00},
+ {0x98, 0xF0, 0x02},
+ {0xA2, 0xFF, 0x00},
+ {0xA3, 0xFF, 0x00},
+ {0xA6, 0xFF, 0x00},
+ {0xA7, 0xFF, 0x00},
+ {0xA8, 0xFF, 0x00},
+ {0xA9, 0XFF, 0x00},
+ {0xAA, 0xFF, 0xFF},
+ {0xAB, 0xFF, 0x00},
+ {0xAC, 0xFF, 0x00},
+ {0xAD, 0xFF, 0x00},
+ {0xAE, 0xFF, 0x00},
+ {0xAF, 0xFC, 0x00},
};
DXE_SMF_INIT_DATA DXE_FAN2_INIT_TABLE[] = {
{0x96, 0xF3, 0x00},
+ {0x98, 0x0F, 0x20},
{0xB2, 0xFF, 0x00},
{0xB3, 0xFF, 0x00},
{0xB6, 0xFF, 0x00},
{0xB7, 0xFF, 0x00},
{0xB8, 0xFF, 0x00},
{0xB9, 0XFF, 0x00},
+ {0xBA, 0xFF, 0xFF},
{0xBB, 0xFF, 0x00},
{0xBC, 0xFF, 0x00},
{0xBD, 0xFF, 0x00},
{0xBE, 0xFF, 0x00},
+ {0xBF, 0xFC, 0x00},
};
DXE_SMF_INIT_DATA DXE_FAN3_INIT_TABLE[] = {
{0x96, 0xCF, 0x00},
+ {0x99, 0xF0, 0x02},
{0xC2, 0xFF, 0x00},
{0xC3, 0xFF, 0x00},
{0xC6, 0xFF, 0x00},
{0xC7, 0xFF, 0x00},
{0xC8, 0xFF, 0x00},
{0xC9, 0XFF, 0x00},
+ {0xCA, 0xFF, 0xFF},
{0xCB, 0xFF, 0x00},
{0xCC, 0xFF, 0x00},
{0xCD, 0xFF, 0x00},
{0xCE, 0xFF, 0x00},
+ {0xCF, 0xFC, 0x00},
};
S3_SAVE_DATA HwmS3SaveRegisterTbl[] = {
@@ -102,36 +126,43 @@ S3_SAVE_DATA HwmS3SaveRegisterTbl[] = {
// ----------------------
{0x00,0x94},
{0x00,0x96},
+ {0x00,0x98},
{0x00,0xA2},
{0x00,0xA3},
{0x00,0xA6},
{0x00,0xA7},
{0x00,0xA8},
{0x00,0xA9},
+ {0x00,0xAA},
{0x00,0xAB},
{0x00,0xAC},
{0x00,0xAD},
{0x00,0xAE},
+ {0x00,0xAF},
{0x00,0xB2},
{0x00,0xB3},
{0x00,0xB6},
{0x00,0xB7},
{0x00,0xB8},
{0x00,0xB9},
+ {0x00,0xBA},
{0x00,0xBB},
{0x00,0xBC},
{0x00,0xBD},
{0x00,0xBE},
+ {0x00,0xBF},
{0x00,0xC2},
{0x00,0xC3},
{0x00,0xC6},
{0x00,0xC7},
{0x00,0xC8},
{0x00,0xC9},
+ {0x00,0xCA},
{0x00,0xCB},
{0x00,0xCC},
{0x00,0xCD},
{0x00,0xCE},
+ {0x00,0xCF},
};
//--------------------------------------------------------------------------
// Definition of smart fan functions
@@ -141,6 +172,7 @@ static VOID SmartFanFuncStart(VOID);
static VOID F81866_SMF1_INIT(void);
static VOID F81866_SMF2_INIT(void);
static VOID F81866_SMF3_INIT(void);
+VOID F81866_FAN_Full();
static void F81866_SMF_WRITE_CFG(DXE_SMF_INIT_DATA DXE_SMF_MODEx_Table);
static EFI_STATUS HwmCallbackReadyToBoot(
IN EFI_EVENT Event,
@@ -200,7 +232,9 @@ static VOID SmartFanFuncStart(VOID)
//--------------------------------------------------------------------------
F81866_SMF1_INIT();
F81866_SMF2_INIT();
- F81866_SMF3_INIT();
+// F81866_SMF3_INIT(); // Zprj Not Suported FAN3
+ F81866_FAN_Full();
+
//Create event for boot script
Status = CreateReadyToBootEvent(
TPL_NOTIFY,
@@ -228,39 +262,49 @@ void F81866_SMF1_INIT(VOID)
{
UINT8 i, temp;
switch (SetupData.Fan1SmartFanMode) {
- case 0:
- DXE_FAN1_INIT_TABLE[0].OrData8 = 0x02;//mode
- DXE_FAN1_INIT_TABLE[1].OrData8 = (UINT8)(1500000/SetupData.Fan1Mode0FixedSpeed >> 8);//mode
- DXE_FAN1_INIT_TABLE[2].OrData8 = (UINT8)(1500000/SetupData.Fan1Mode0FixedSpeed & 0xFF);//mode
- break;
- case 1:
- DXE_FAN1_INIT_TABLE[0].OrData8 = 0x03;//mode
- DXE_FAN1_INIT_TABLE[2].OrData8 = (UINT8)SetupData.Fan1Mode1FixedDuty*0xFF/100;//mode
- break;
- case 2:
- DXE_FAN1_INIT_TABLE[0].OrData8 = 0x00;//mode
- DXE_FAN1_INIT_TABLE[3].OrData8 = SetupData.Fan1Mode2AutoRpmT1;
- DXE_FAN1_INIT_TABLE[4].OrData8 = SetupData.Fan1Mode2AutoRpmT2;
- DXE_FAN1_INIT_TABLE[5].OrData8 = SetupData.Fan1Mode2AutoRpmT3;
- DXE_FAN1_INIT_TABLE[6].OrData8 = SetupData.Fan1Mode2AutoRpmT4;
- DXE_FAN1_INIT_TABLE[7].OrData8 = (UINT8)((100-SetupData.Fan1Mode2AutoRpmF1)*32/60);
- DXE_FAN1_INIT_TABLE[8].OrData8 = (UINT8)((100-SetupData.Fan1Mode2AutoRpmF2)*32/60);
- DXE_FAN1_INIT_TABLE[9].OrData8 = (UINT8)((100-SetupData.Fan1Mode2AutoRpmF3)*32/60);
- DXE_FAN1_INIT_TABLE[10].OrData8 = (UINT8)((100-SetupData.Fan1Mode2AutoRpmF4)*32/60);
- break;
- case 3:
- DXE_FAN1_INIT_TABLE[0].OrData8 = 0x01;//mode
- DXE_FAN1_INIT_TABLE[3].OrData8 = SetupData.Fan1Mode3AutoDutyT1;
- DXE_FAN1_INIT_TABLE[4].OrData8 = SetupData.Fan1Mode3AutoDutyT2;
- DXE_FAN1_INIT_TABLE[5].OrData8 = SetupData.Fan1Mode3AutoDutyT3;
- DXE_FAN1_INIT_TABLE[6].OrData8 = SetupData.Fan1Mode3AutoDutyT4;
- DXE_FAN1_INIT_TABLE[7].OrData8 = (UINT8)(SetupData.Fan1Mode3AutoDutyF1*0xFF/100);
- DXE_FAN1_INIT_TABLE[8].OrData8 = (UINT8)(SetupData.Fan1Mode3AutoDutyF2*0xFF/100);
- DXE_FAN1_INIT_TABLE[9].OrData8 = (UINT8)(SetupData.Fan1Mode3AutoDutyF3*0xFF/100);
- DXE_FAN1_INIT_TABLE[10].OrData8 = (UINT8)(SetupData.Fan1Mode3AutoDutyF4*0xFF/100);
- break;
- default:
- break;
+ case 0:
+ // Manual RPM Mode
+ DXE_FAN1_INIT_TABLE[ IDX_FAN_MODE ].OrData8 = 0x02;//mode
+ DXE_FAN1_INIT_TABLE[ IDX_FAN_SPEED_MSB ].OrData8 = (UINT8)(1500000/SetupData.Fan1Mode0FixedSpeed >> 8);//mode
+ DXE_FAN1_INIT_TABLE[ IDX_FAN_SPEED_LSB ].OrData8 = (UINT8)(1500000/SetupData.Fan1Mode0FixedSpeed & 0xFF);//mode
+ break;
+ case 1:
+ // Manual Duty Mode
+ DXE_FAN1_INIT_TABLE[ IDX_FAN_MODE ].OrData8 = 0x03;//mode
+ DXE_FAN1_INIT_TABLE[ IDX_FAN_SPEED_LSB ].OrData8 = (UINT8)SetupData.Fan1Mode1FixedDuty*0xFF/100;//mode
+ break;
+ case 2:
+ // Auto RPM Mode
+ DXE_FAN1_INIT_TABLE[ IDX_FAN_MODE ].OrData8 = 0x00;//mode
+ DXE_FAN1_INIT_TABLE[ IDX_TEMP_HYS ].OrData8 = 0x02; // Set hysteresis as 2
+ DXE_FAN1_INIT_TABLE[ IDX_TEMP_BOUND1 ].OrData8 = SetupData.Fan1Mode2AutoRpmT1;
+ DXE_FAN1_INIT_TABLE[ IDX_TEMP_BOUND2 ].OrData8 = SetupData.Fan1Mode2AutoRpmT2;
+ DXE_FAN1_INIT_TABLE[ IDX_TEMP_BOUND3 ].OrData8 = SetupData.Fan1Mode2AutoRpmT3;
+ DXE_FAN1_INIT_TABLE[ IDX_TEMP_BOUND4 ].OrData8 = SetupData.Fan1Mode2AutoRpmT4;
+ DXE_FAN1_INIT_TABLE[ IDX_SPEED_SEG1 ].OrData8 = (UINT8)((100-SetupData.Fan1Mode2AutoRpmF1)*32/SetupData.Fan1Mode2AutoRpmF1);
+ DXE_FAN1_INIT_TABLE[ IDX_SPEED_SEG2 ].OrData8 = (UINT8)((100-SetupData.Fan1Mode2AutoRpmF2)*32/SetupData.Fan1Mode2AutoRpmF2);
+ DXE_FAN1_INIT_TABLE[ IDX_SPEED_SEG3 ].OrData8 = (UINT8)((100-SetupData.Fan1Mode2AutoRpmF3)*32/SetupData.Fan1Mode2AutoRpmF3);
+ DXE_FAN1_INIT_TABLE[ IDX_SPEED_SEG4 ].OrData8 = (UINT8)((100-SetupData.Fan1Mode2AutoRpmF4)*32/SetupData.Fan1Mode2AutoRpmF4);
+ DXE_FAN1_INIT_TABLE[ IDX_SPEED_SEG5 ].OrData8 = (UINT8)((100-SetupData.Fan1Mode2AutoRpmF5)*32/SetupData.Fan1Mode2AutoRpmF5);
+ DXE_FAN1_INIT_TABLE[ IDX_TEMP_SRCSEL ].OrData8 = SetupData.Fan1TempSrc;
+ break;
+ case 3:
+ // Auto Duty-Cycle Mode
+ DXE_FAN1_INIT_TABLE[ IDX_FAN_MODE ].OrData8 = 0x01;//mode
+ DXE_FAN1_INIT_TABLE[ IDX_TEMP_HYS ].OrData8 = 0x02; // Set hysteresis as 2
+ DXE_FAN1_INIT_TABLE[ IDX_TEMP_BOUND1 ].OrData8 = SetupData.Fan1Mode3AutoDutyT1;
+ DXE_FAN1_INIT_TABLE[ IDX_TEMP_BOUND2 ].OrData8 = SetupData.Fan1Mode3AutoDutyT2;
+ DXE_FAN1_INIT_TABLE[ IDX_TEMP_BOUND3 ].OrData8 = SetupData.Fan1Mode3AutoDutyT3;
+ DXE_FAN1_INIT_TABLE[ IDX_TEMP_BOUND4 ].OrData8 = SetupData.Fan1Mode3AutoDutyT4;
+ DXE_FAN1_INIT_TABLE[ IDX_SPEED_SEG1 ].OrData8 = (UINT8)(SetupData.Fan1Mode3AutoDutyF1*0xFF/100);
+ DXE_FAN1_INIT_TABLE[ IDX_SPEED_SEG2 ].OrData8 = (UINT8)(SetupData.Fan1Mode3AutoDutyF2*0xFF/100);
+ DXE_FAN1_INIT_TABLE[ IDX_SPEED_SEG3 ].OrData8 = (UINT8)(SetupData.Fan1Mode3AutoDutyF3*0xFF/100);
+ DXE_FAN1_INIT_TABLE[ IDX_SPEED_SEG4 ].OrData8 = (UINT8)(SetupData.Fan1Mode3AutoDutyF4*0xFF/100);
+ DXE_FAN1_INIT_TABLE[ IDX_SPEED_SEG5 ].OrData8 = (UINT8)(SetupData.Fan1Mode3AutoDutyF5*0xFF/100);
+ DXE_FAN1_INIT_TABLE[ IDX_TEMP_SRCSEL ].OrData8 = SetupData.Fan1TempSrc;
+ break;
+ default:
+ break;
}
for(i=0; i<( (sizeof(DXE_FAN1_INIT_TABLE))/(sizeof(DXE_SMF_INIT_DATA)) ); i++) {
IoWrite8(HWM_CONFIG_INDEX, DXE_FAN1_INIT_TABLE[i].Reg8 );
@@ -292,39 +336,49 @@ void F81866_SMF2_INIT(VOID)
{
UINT8 i, temp;
switch (SetupData.Fan2SmartFanMode) {
- case 0:
- DXE_FAN2_INIT_TABLE[0].OrData8 = 0x02 << 2;//mode
- DXE_FAN2_INIT_TABLE[1].OrData8 = (UINT8)(1500000/SetupData.Fan2Mode0FixedSpeed >> 8);//mode
- DXE_FAN2_INIT_TABLE[2].OrData8 = (UINT8)(1500000/SetupData.Fan2Mode0FixedSpeed & 0xFF);//mode
- break;
- case 1:
- DXE_FAN2_INIT_TABLE[0].OrData8 = 0x03 << 2;//mode
- DXE_FAN2_INIT_TABLE[2].OrData8 = (UINT8)(SetupData.Fan2Mode1FixedDuty*0xFF/100);//mode
- break;
- case 2:
- DXE_FAN2_INIT_TABLE[0].OrData8 = 0x00 << 2;//mode
- DXE_FAN2_INIT_TABLE[3].OrData8 = SetupData.Fan2Mode2AutoRpmT1;
- DXE_FAN2_INIT_TABLE[4].OrData8 = SetupData.Fan2Mode2AutoRpmT2;
- DXE_FAN2_INIT_TABLE[5].OrData8 = SetupData.Fan2Mode2AutoRpmT3;
- DXE_FAN2_INIT_TABLE[6].OrData8 = SetupData.Fan2Mode2AutoRpmT4;
- DXE_FAN2_INIT_TABLE[7].OrData8 = (UINT8)((100-SetupData.Fan2Mode2AutoRpmF1)*32/60);
- DXE_FAN2_INIT_TABLE[8].OrData8 = (UINT8)((100-SetupData.Fan2Mode2AutoRpmF2)*32/60);
- DXE_FAN2_INIT_TABLE[9].OrData8 = (UINT8)((100-SetupData.Fan2Mode2AutoRpmF3)*32/60);
- DXE_FAN2_INIT_TABLE[10].OrData8 = (UINT8)((100-SetupData.Fan2Mode2AutoRpmF4)*32/60);
- break;
- case 3:
- DXE_FAN2_INIT_TABLE[0].OrData8 = 0x01 << 2;//mode
- DXE_FAN2_INIT_TABLE[3].OrData8 = SetupData.Fan2Mode3AutoDutyT1;
- DXE_FAN2_INIT_TABLE[4].OrData8 = SetupData.Fan2Mode3AutoDutyT2;
- DXE_FAN2_INIT_TABLE[5].OrData8 = SetupData.Fan2Mode3AutoDutyT3;
- DXE_FAN2_INIT_TABLE[6].OrData8 = SetupData.Fan2Mode3AutoDutyT4;
- DXE_FAN2_INIT_TABLE[7].OrData8 = (UINT8)(SetupData.Fan2Mode3AutoDutyF1*0xFF/100);
- DXE_FAN2_INIT_TABLE[8].OrData8 = (UINT8)(SetupData.Fan2Mode3AutoDutyF2*0xFF/100);
- DXE_FAN2_INIT_TABLE[9].OrData8 = (UINT8)(SetupData.Fan2Mode3AutoDutyF3*0xFF/100);
- DXE_FAN2_INIT_TABLE[10].OrData8 = (UINT8)(SetupData.Fan2Mode3AutoDutyF4*0xFF/100);
- break;
- default:
- break;
+ case 0:
+ // Manual RPM Mode
+ DXE_FAN2_INIT_TABLE[ IDX_FAN_MODE ].OrData8 = (0x02 << 2);//mode
+ DXE_FAN2_INIT_TABLE[ IDX_FAN_SPEED_MSB ].OrData8 = (UINT8)(1500000/SetupData.Fan2Mode0FixedSpeed >> 8);//mode
+ DXE_FAN2_INIT_TABLE[ IDX_FAN_SPEED_LSB ].OrData8 = (UINT8)(1500000/SetupData.Fan2Mode0FixedSpeed & 0xFF);//mode
+ break;
+ case 1:
+ // Manual Duty Mode
+ DXE_FAN2_INIT_TABLE[ IDX_FAN_MODE ].OrData8 = (0x03 << 2);//mode
+ DXE_FAN2_INIT_TABLE[ IDX_FAN_SPEED_LSB ].OrData8 = (UINT8)SetupData.Fan2Mode1FixedDuty*0xFF/100;//mode
+ break;
+ case 2:
+ // Auto RPM Mode
+ DXE_FAN2_INIT_TABLE[ IDX_FAN_MODE ].OrData8 = 0x00;//mode
+ DXE_FAN2_INIT_TABLE[ IDX_TEMP_HYS ].OrData8 = (0x02 << 4); // Set hysteresis as 2
+ DXE_FAN2_INIT_TABLE[ IDX_TEMP_BOUND1 ].OrData8 = SetupData.Fan2Mode2AutoRpmT1;
+ DXE_FAN2_INIT_TABLE[ IDX_TEMP_BOUND2 ].OrData8 = SetupData.Fan2Mode2AutoRpmT2;
+ DXE_FAN2_INIT_TABLE[ IDX_TEMP_BOUND3 ].OrData8 = SetupData.Fan2Mode2AutoRpmT3;
+ DXE_FAN2_INIT_TABLE[ IDX_TEMP_BOUND4 ].OrData8 = SetupData.Fan2Mode2AutoRpmT4;
+ DXE_FAN2_INIT_TABLE[ IDX_SPEED_SEG1 ].OrData8 = (UINT8)((100-SetupData.Fan2Mode2AutoRpmF1)*32/SetupData.Fan2Mode2AutoRpmF1);
+ DXE_FAN2_INIT_TABLE[ IDX_SPEED_SEG2 ].OrData8 = (UINT8)((100-SetupData.Fan2Mode2AutoRpmF2)*32/SetupData.Fan2Mode2AutoRpmF2);
+ DXE_FAN2_INIT_TABLE[ IDX_SPEED_SEG3 ].OrData8 = (UINT8)((100-SetupData.Fan2Mode2AutoRpmF3)*32/SetupData.Fan2Mode2AutoRpmF3);
+ DXE_FAN2_INIT_TABLE[ IDX_SPEED_SEG4 ].OrData8 = (UINT8)((100-SetupData.Fan2Mode2AutoRpmF4)*32/SetupData.Fan2Mode2AutoRpmF4);
+ DXE_FAN2_INIT_TABLE[ IDX_SPEED_SEG5 ].OrData8 = (UINT8)((100-SetupData.Fan2Mode2AutoRpmF5)*32/SetupData.Fan2Mode2AutoRpmF5);
+ DXE_FAN2_INIT_TABLE[ IDX_TEMP_SRCSEL ].OrData8 = SetupData.Fan2TempSrc;
+ break;
+ case 3:
+ // Auto Duty-Cycle Mode
+ DXE_FAN2_INIT_TABLE[ IDX_FAN_MODE ].OrData8 = (0x01 << 2);//mode
+ DXE_FAN2_INIT_TABLE[ IDX_TEMP_HYS ].OrData8 = (0x02 << 4); // Set hysteresis as 2
+ DXE_FAN2_INIT_TABLE[ IDX_TEMP_BOUND1 ].OrData8 = SetupData.Fan2Mode3AutoDutyT1;
+ DXE_FAN2_INIT_TABLE[ IDX_TEMP_BOUND2 ].OrData8 = SetupData.Fan2Mode3AutoDutyT2;
+ DXE_FAN2_INIT_TABLE[ IDX_TEMP_BOUND3 ].OrData8 = SetupData.Fan2Mode3AutoDutyT3;
+ DXE_FAN2_INIT_TABLE[ IDX_TEMP_BOUND4 ].OrData8 = SetupData.Fan2Mode3AutoDutyT4;
+ DXE_FAN2_INIT_TABLE[ IDX_SPEED_SEG1 ].OrData8 = (UINT8)(SetupData.Fan2Mode3AutoDutyF1*0xFF/100);
+ DXE_FAN2_INIT_TABLE[ IDX_SPEED_SEG2 ].OrData8 = (UINT8)(SetupData.Fan2Mode3AutoDutyF2*0xFF/100);
+ DXE_FAN2_INIT_TABLE[ IDX_SPEED_SEG3 ].OrData8 = (UINT8)(SetupData.Fan2Mode3AutoDutyF3*0xFF/100);
+ DXE_FAN2_INIT_TABLE[ IDX_SPEED_SEG4 ].OrData8 = (UINT8)(SetupData.Fan2Mode3AutoDutyF4*0xFF/100);
+ DXE_FAN2_INIT_TABLE[ IDX_SPEED_SEG5 ].OrData8 = (UINT8)(SetupData.Fan2Mode3AutoDutyF5*0xFF/100);
+ DXE_FAN2_INIT_TABLE[ IDX_TEMP_SRCSEL ].OrData8 = SetupData.Fan2TempSrc;
+ break;
+ default:
+ break;
}
for(i=0; i<( (sizeof(DXE_FAN2_INIT_TABLE))/(sizeof(DXE_SMF_INIT_DATA)) ); i++) {
IoWrite8(HWM_CONFIG_INDEX, DXE_FAN2_INIT_TABLE[i].Reg8 );
@@ -356,39 +410,49 @@ void F81866_SMF3_INIT(VOID)
{
UINT8 i, temp;
switch (SetupData.Fan3SmartFanMode) {
- case 0:
- DXE_FAN3_INIT_TABLE[0].OrData8 = 0x02 << 4;//mode
- DXE_FAN3_INIT_TABLE[1].OrData8 = (UINT8)(1500000/SetupData.Fan3Mode0FixedSpeed >> 8);//mode
- DXE_FAN3_INIT_TABLE[2].OrData8 = (UINT8)(1500000/SetupData.Fan3Mode0FixedSpeed & 0xFF);//mode
- break;
- case 1:
- DXE_FAN3_INIT_TABLE[0].OrData8 = 0x03 << 4;//mode
- DXE_FAN3_INIT_TABLE[2].OrData8 = (UINT8)(SetupData.Fan3Mode1FixedDuty*0xFF/100);//mode
- break;
- case 2:
- DXE_FAN3_INIT_TABLE[0].OrData8 = 0x00 << 4;//mode
- DXE_FAN3_INIT_TABLE[3].OrData8 = SetupData.Fan3Mode2AutoRpmT1;
- DXE_FAN3_INIT_TABLE[4].OrData8 = SetupData.Fan3Mode2AutoRpmT2;
- DXE_FAN3_INIT_TABLE[5].OrData8 = SetupData.Fan3Mode2AutoRpmT3;
- DXE_FAN3_INIT_TABLE[6].OrData8 = SetupData.Fan3Mode2AutoRpmT4;
- DXE_FAN3_INIT_TABLE[7].OrData8 = (UINT8)((100-SetupData.Fan3Mode2AutoRpmF1)*32/60);
- DXE_FAN3_INIT_TABLE[8].OrData8 = (UINT8)((100-SetupData.Fan3Mode2AutoRpmF2)*32/60);
- DXE_FAN3_INIT_TABLE[9].OrData8 = (UINT8)((100-SetupData.Fan3Mode2AutoRpmF3)*32/60);
- DXE_FAN3_INIT_TABLE[10].OrData8 = (UINT8)((100-SetupData.Fan3Mode2AutoRpmF4)*32/60);
- break;
- case 3:
- DXE_FAN3_INIT_TABLE[0].OrData8 = 0x01 << 4;//mode
- DXE_FAN3_INIT_TABLE[3].OrData8 = SetupData.Fan3Mode3AutoDutyT1;
- DXE_FAN3_INIT_TABLE[4].OrData8 = SetupData.Fan3Mode3AutoDutyT2;
- DXE_FAN3_INIT_TABLE[5].OrData8 = SetupData.Fan3Mode3AutoDutyT3;
- DXE_FAN3_INIT_TABLE[6].OrData8 = SetupData.Fan3Mode3AutoDutyT4;
- DXE_FAN3_INIT_TABLE[7].OrData8 = (UINT8)(SetupData.Fan3Mode3AutoDutyF1*0xFF/100);
- DXE_FAN3_INIT_TABLE[8].OrData8 = (UINT8)(SetupData.Fan3Mode3AutoDutyF2*0xFF/100);
- DXE_FAN3_INIT_TABLE[9].OrData8 = (UINT8)(SetupData.Fan3Mode3AutoDutyF3*0xFF/100);
- DXE_FAN3_INIT_TABLE[10].OrData8 = (UINT8)(SetupData.Fan3Mode3AutoDutyF4*0xFF/100);
- break;
- default:
- break;
+ case 0:
+ // Manual RPM Mode
+ DXE_FAN3_INIT_TABLE[ IDX_FAN_MODE ].OrData8 = (0x02 << 4);//mode
+ DXE_FAN3_INIT_TABLE[ IDX_FAN_SPEED_MSB ].OrData8 = (UINT8)(1500000/SetupData.Fan3Mode0FixedSpeed >> 8);//mode
+ DXE_FAN3_INIT_TABLE[ IDX_FAN_SPEED_LSB ].OrData8 = (UINT8)(1500000/SetupData.Fan3Mode0FixedSpeed & 0xFF);//mode
+ break;
+ case 1:
+ // Manual Duty Mode
+ DXE_FAN3_INIT_TABLE[ IDX_FAN_MODE ].OrData8 = (0x03 << 4);//mode
+ DXE_FAN3_INIT_TABLE[ IDX_FAN_SPEED_LSB ].OrData8 = (UINT8)SetupData.Fan3Mode1FixedDuty*0xFF/100;//mode
+ break;
+ case 2:
+ // Auto RPM Mode
+ DXE_FAN3_INIT_TABLE[ IDX_FAN_MODE ].OrData8 = 0x00;//mode
+ DXE_FAN3_INIT_TABLE[ IDX_TEMP_HYS ].OrData8 = 0x02; // Set hysteresis as 2
+ DXE_FAN3_INIT_TABLE[ IDX_TEMP_BOUND1 ].OrData8 = SetupData.Fan3Mode2AutoRpmT1;
+ DXE_FAN3_INIT_TABLE[ IDX_TEMP_BOUND2 ].OrData8 = SetupData.Fan3Mode2AutoRpmT2;
+ DXE_FAN3_INIT_TABLE[ IDX_TEMP_BOUND3 ].OrData8 = SetupData.Fan3Mode2AutoRpmT3;
+ DXE_FAN3_INIT_TABLE[ IDX_TEMP_BOUND4 ].OrData8 = SetupData.Fan3Mode2AutoRpmT4;
+ DXE_FAN3_INIT_TABLE[ IDX_SPEED_SEG1 ].OrData8 = (UINT8)((100-SetupData.Fan3Mode2AutoRpmF1)*32/SetupData.Fan3Mode2AutoRpmF1);
+ DXE_FAN3_INIT_TABLE[ IDX_SPEED_SEG2 ].OrData8 = (UINT8)((100-SetupData.Fan3Mode2AutoRpmF2)*32/SetupData.Fan3Mode2AutoRpmF2);
+ DXE_FAN3_INIT_TABLE[ IDX_SPEED_SEG3 ].OrData8 = (UINT8)((100-SetupData.Fan3Mode2AutoRpmF3)*32/SetupData.Fan3Mode2AutoRpmF3);
+ DXE_FAN3_INIT_TABLE[ IDX_SPEED_SEG4 ].OrData8 = (UINT8)((100-SetupData.Fan3Mode2AutoRpmF4)*32/SetupData.Fan3Mode2AutoRpmF4);
+ DXE_FAN3_INIT_TABLE[ IDX_SPEED_SEG5 ].OrData8 = (UINT8)((100-SetupData.Fan3Mode2AutoRpmF5)*32/SetupData.Fan3Mode2AutoRpmF5);
+ DXE_FAN3_INIT_TABLE[ IDX_TEMP_SRCSEL ].OrData8 = SetupData.Fan3TempSrc;
+ break;
+ case 3:
+ // Auto Duty-Cycle Mode
+ DXE_FAN3_INIT_TABLE[ IDX_FAN_MODE ].OrData8 = (0x01 << 4);//mode
+ DXE_FAN3_INIT_TABLE[ IDX_TEMP_HYS ].OrData8 = 0x02; // Set hysteresis as 2
+ DXE_FAN3_INIT_TABLE[ IDX_TEMP_BOUND1 ].OrData8 = SetupData.Fan3Mode3AutoDutyT1;
+ DXE_FAN3_INIT_TABLE[ IDX_TEMP_BOUND2 ].OrData8 = SetupData.Fan3Mode3AutoDutyT2;
+ DXE_FAN3_INIT_TABLE[ IDX_TEMP_BOUND3 ].OrData8 = SetupData.Fan3Mode3AutoDutyT3;
+ DXE_FAN3_INIT_TABLE[ IDX_TEMP_BOUND4 ].OrData8 = SetupData.Fan3Mode3AutoDutyT4;
+ DXE_FAN3_INIT_TABLE[ IDX_SPEED_SEG1 ].OrData8 = (UINT8)(SetupData.Fan3Mode3AutoDutyF1*0xFF/100);
+ DXE_FAN3_INIT_TABLE[ IDX_SPEED_SEG2 ].OrData8 = (UINT8)(SetupData.Fan3Mode3AutoDutyF2*0xFF/100);
+ DXE_FAN3_INIT_TABLE[ IDX_SPEED_SEG3 ].OrData8 = (UINT8)(SetupData.Fan3Mode3AutoDutyF3*0xFF/100);
+ DXE_FAN3_INIT_TABLE[ IDX_SPEED_SEG4 ].OrData8 = (UINT8)(SetupData.Fan3Mode3AutoDutyF4*0xFF/100);
+ DXE_FAN3_INIT_TABLE[ IDX_SPEED_SEG5 ].OrData8 = (UINT8)(SetupData.Fan3Mode3AutoDutyF5*0xFF/100);
+ DXE_FAN3_INIT_TABLE[ IDX_TEMP_SRCSEL ].OrData8 = SetupData.Fan3TempSrc;
+ break;
+ default:
+ break;
}
for(i=0; i<( (sizeof(DXE_FAN3_INIT_TABLE))/(sizeof(DXE_SMF_INIT_DATA)) ); i++) {
IoWrite8(HWM_CONFIG_INDEX, DXE_FAN3_INIT_TABLE[i].Reg8 );
@@ -403,6 +467,67 @@ void F81866_SMF3_INIT(VOID)
}
}
+void F81866_FAN_Full(VOID)
+{
+ // Full Speed
+ // Manual Duty Mode
+#if defined(F81866_SMF_SUPPORT) && (F81866_SMF_SUPPORT == 1)
+ UINT8 i, temp;
+#endif
+
+//#if defined(F81866_SMF1_SUPPORT) && (F81866_SMF1_SUPPORT == 1)
+ DXE_FAN1_INIT_TABLE[ IDX_FAN_MODE ].OrData8 = 0x03;//mode
+ DXE_FAN1_INIT_TABLE[ IDX_FAN_SPEED_LSB ].OrData8 = 0xFF;
+
+ for(i=0; i<( (sizeof(DXE_FAN1_INIT_TABLE))/(sizeof(DXE_SMF_INIT_DATA)) ); i++) {
+ IoWrite8(HWM_CONFIG_INDEX, DXE_FAN1_INIT_TABLE[i].Reg8 );
+ if(DXE_FAN1_INIT_TABLE[i].AndData8 == 0xFF) {
+ temp = DXE_FAN1_INIT_TABLE[i].OrData8;
+ } else {
+ temp = IoRead8(HWM_CONFIG_DATA);
+ temp &= DXE_FAN1_INIT_TABLE[i].AndData8;
+ temp |= DXE_FAN1_INIT_TABLE[i].OrData8;
+ }
+ IoWrite8(HWM_CONFIG_DATA, temp);
+ }
+//#endif
+
+//#if defined(F81866_SMF2_SUPPORT) && (F81866_SMF2_SUPPORT == 1)
+ DXE_FAN2_INIT_TABLE[ IDX_FAN_MODE ].OrData8 = 0x0C;//mode
+ DXE_FAN2_INIT_TABLE[ IDX_FAN_SPEED_LSB ].OrData8 = 0xFF;
+
+ for(i=0; i<( (sizeof(DXE_FAN2_INIT_TABLE))/(sizeof(DXE_SMF_INIT_DATA)) ); i++) {
+ IoWrite8(HWM_CONFIG_INDEX, DXE_FAN2_INIT_TABLE[i].Reg8 );
+ if(DXE_FAN2_INIT_TABLE[i].AndData8 == 0xFF) {
+ temp = DXE_FAN2_INIT_TABLE[i].OrData8;
+ } else {
+ temp = IoRead8(HWM_CONFIG_DATA);
+ temp &= DXE_FAN2_INIT_TABLE[i].AndData8;
+ temp |= DXE_FAN2_INIT_TABLE[i].OrData8;
+ }
+ IoWrite8(HWM_CONFIG_DATA, temp);
+ }
+//#endif
+
+// Zprj Not Supported FAN3
+//#if defined(F81866_SMF3_SUPPORT) && (F81866_SMF3_SUPPORT == 1)
+// DXE_FAN3_INIT_TABLE[ IDX_FAN_MODE ].OrData8 = 0x30;//mode
+// DXE_FAN3_INIT_TABLE[ IDX_FAN_SPEED_LSB ].OrData8 = 0xFF;
+//
+// for(i=0; i<( (sizeof(DXE_FAN3_INIT_TABLE))/(sizeof(DXE_SMF_INIT_DATA)) ); i++) {
+// IoWrite8(HWM_CONFIG_INDEX, DXE_FAN3_INIT_TABLE[i].Reg8 );
+// if(DXE_FAN3_INIT_TABLE[i].AndData8 == 0xFF) {
+// temp = DXE_FAN3_INIT_TABLE[i].OrData8;
+// } else {
+// temp = IoRead8(HWM_CONFIG_DATA);
+// temp &= DXE_FAN3_INIT_TABLE[i].AndData8;
+// temp |= DXE_FAN3_INIT_TABLE[i].OrData8;
+// }
+// IoWrite8(HWM_CONFIG_DATA, temp);
+// }
+//#endif
+}
+
//<AMI_PHDR_START>
//---------------------------------------------------------------------------
// Procedure: HwmCallbackReadyToBoot