Changeset 409 for branches/branch-1-0/src/helpers/acpih.c
- Timestamp:
- Mar 1, 2012, 9:19:16 AM (13 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/branch-1-0/src/helpers/acpih.c
r408 r409 128 128 else 129 129 { 130 char cTmp; // Required to ensure code not optimized away 131 ULONG ulMemSize, ulMemFlags; 132 130 133 G_ulCount++; 134 /* Force the shutdown function to be in memory. 135 * This is probably not the best place to do this, but it is the easiest. 136 * The function code may or may not cross page boundary and older versions 137 * of acpi32.dll placed the function as the last function in the DLL, 138 * so we need to check if the page exists before attempting to force it 139 * into memory. 140 * @@added V1.0.9 (2012-02-23) [dazarewicz]: additional ACPI support 141 */ 142 cTmp = *((volatile char *)pAcpiGoToSleep); /* Ensure paged in */ 143 144 ulMemSize = 1; 145 if (DosQueryMem(((char *)pAcpiGoToSleep) + 4096, &ulMemSize, &ulMemFlags) == NO_ERROR) 146 { 147 if (ulMemFlags & PAG_COMMIT) 148 cTmp = *(((volatile char *)pAcpiGoToSleep) + 4096); /* Ensure paged in */ 149 } 131 150 return(pAcpiStartApi(phACPI)); 132 151 } … … 244 263 # ifdef INCL_LONGLONG // VAC 3.6.5 - compiler supports long long 245 264 # define OBJECT_VALUE(index) (Object[index].Integer.Value) 265 # define OBJ_VALUE(index) (Obj[index].Integer.Value) 246 266 # else // VAC 3.08 - compiler does not support long long 247 267 # define OBJECT_VALUE(index) (Object[index].Integer.Value.ulLo) 268 # define OBJ_VALUE(index) (Obj[index].Integer.Value.ulLo) 248 269 # endif 249 270 250 271 if (G_ahAC) 251 272 { 273 // Have _PSR 252 274 Result.Length = sizeof(Object); 253 275 Result.Pointer = Object; 254 276 Status = pAcpiTkEvaluateObject(G_ahAC, NULL, NULL, &Result); 255 if (Status != AE_OK) ulTmp = 2; 256 if (Object[0].Type != ACPI_TYPE_INTEGER) ulTmp = 2; 257 258 ulTmp = OBJECT_VALUE(0); 259 if (pApm->fUsingAC != ulTmp) 260 { 261 pApm->fUsingAC = ulTmp; 277 if (Status != AE_OK) 278 ulTmp = 2; 279 else if (Object[0].Type != ACPI_TYPE_INTEGER) 280 ulTmp = 2; 281 else 282 ulTmp = (UINT32)OBJECT_VALUE(0); 283 if (pApm->fUsingAC != (BYTE)ulTmp) 284 { 285 pApm->fUsingAC = (BYTE)ulTmp; 262 286 fChanged = TRUE; 263 287 } … … 278 302 279 303 Obj = Result.Pointer; 280 Obj = (ACPI_OBJECT *)Obj[0].Package.Elements; 281 LastFull = (UINT32)OBJ ECT_VALUE(2);304 Obj = (ACPI_OBJECT *)Obj[0].Package.Elements; // _BIF package 305 LastFull = (UINT32)OBJ_VALUE(2); 282 306 if (LastFull == 0xffffffff) 283 307 { … … 296 320 297 321 Obj = Result.Pointer; 298 Obj = (ACPI_OBJECT *)Obj[0].Package.Elements; 299 300 if (OBJECT_VALUE(2) != 0xffffffff)301 {302 BRemaining = (UINT32)OBJ ECT_VALUE(2);303 } 304 305 if ( OBJECT_VALUE(0) != 0xffffffff)322 Obj = (ACPI_OBJECT *)Obj[0].Package.Elements; // Battery status package 323 324 // If voltage known 325 if ((UINT32)OBJ_VALUE(2) != 0xffffffff) 326 BRemaining = (UINT32)OBJ_VALUE(2); 327 328 // If battery units are mWh or mAh 329 if ((UINT32)OBJ_VALUE(0) != 0xffffffff) 306 330 { 307 331 if (BRemaining > (LastFull >> 1)) // > 50% is high. < 50% is low 308 {309 332 ulTmp = 1; // High 310 }311 333 else 312 {313 334 ulTmp = 2; // Low 314 } 315 316 if (OBJECT_VALUE(0) & 4) 317 { 335 336 if (OBJ_VALUE(0) & 4) 318 337 ulTmp = 2; // Critical 319 } 338 320 339 // If battery charging - it can't be critical 321 if (OBJECT_VALUE(0) & 2) 322 { 340 if (OBJ_VALUE(0) & 2) 323 341 ulTmp = 3; // Charging 324 } 342 325 343 if (pApm->bBatteryStatus != ulTmp) 326 344 { 327 pApm->bBatteryStatus = ulTmp;345 pApm->bBatteryStatus = (BYTE)ulTmp; 328 346 fChanged = TRUE; 329 347 } … … 334 352 if (pApm->bBatteryLife != ulTmp) 335 353 { 336 pApm->bBatteryLife = ulTmp;354 pApm->bBatteryLife = (BYTE)ulTmp; 337 355 fChanged = TRUE; 338 356 } … … 345 363 346 364 # undef OBJECT_VALUE 365 # undef OBJ_VALUE 347 366 } 348 367
Note:
See TracChangeset
for help on using the changeset viewer.