Changeset 2934
- Timestamp:
- 03/19/05 03:50:35 (8 years ago)
- Files:
-
- 1 modified
-
lm-sensors/trunk/kernel/chips/bmcsensors.c (modified) (8 diffs)
Legend:
- Unmodified
- Added
- Removed
-
lm-sensors/trunk/kernel/chips/bmcsensors.c
r2817 r2934 153 153 154 154 #define IPMI_SDR_SIZE 67 155 static int ipmi_sdr_partial_size = IPMI_SDR_SIZE; 155 #define IPMI_CHUNK_SIZE 16 156 static int ipmi_sdr_partial_size = IPMI_CHUNK_SIZE; 156 157 static struct ipmi_msg tx_message; /* send message */ 157 158 static unsigned char tx_msg_data[IPMI_MAX_MSG_LENGTH + 50]; … … 464 465 int i; 465 466 int rstate = STATE_SDR; 467 int ipmi_ver = 0; 466 468 unsigned char * data; 467 469 u8 id[SDR_MAX_UNPACKED_ID_LENGTH]; … … 517 519 init = data[13]; 518 520 */ 519 stype = data[ 15];521 stype = data[(ipmi_ver == 0x90?16:15)]; 520 522 if(stype <= STYPE_MAX) { /* known sensor type */ 521 523 if(bmcs_count[stype] >= bmcs_max[stype]) { … … 535 537 MAX_SDR_ENTRIES); 536 538 nextrecord = 0xffff; 537 } else if(data[ 16] != 0x01) {539 } else if(data[(ipmi_ver == 0x90?17:16)] != 0x01) { 538 540 if(type == 1) 539 541 ipmi_sprintf(id, &data[51], data[50] >> 6, data[50] & 0x1f); 540 542 else 541 ipmi_sprintf(id, &data[ 35], data[34] >> 6, data[34] & 0x1f);543 ipmi_sprintf(id, &data[(ipmi_ver == 0x90?30:35)], data[(ipmi_ver == 0x90?29:34)] >> 6, data[(ipmi_ver == 0x90?29:34)] & 0x1f); 542 544 printk(KERN_INFO 543 545 "bmcsensors.o: skipping non-threshold sensor \"%s\"\n", … … 547 549 sdrd[sdrd_count].stype = stype; 548 550 sdrd[sdrd_count].number = data[10]; 549 sdrd[sdrd_count].capab = data[ 14];550 sdrd[sdrd_count].thresh_mask = (((u16) data[ 22]) << 8) | data[21];551 sdrd[sdrd_count].capab = data[(ipmi_ver == 0x90?15:14)]; 552 sdrd[sdrd_count].thresh_mask = (((u16) data[(ipmi_ver == 0x90?21:22)]) << 8) | data[21]; 551 553 if(type == 1) { 552 sdrd[sdrd_count].format = data[ 24] >> 6;553 sdrd[sdrd_count].linear = data[ 26] & 0x7f;554 sdrd[sdrd_count].m = data[ 27];555 sdrd[sdrd_count].m |= ((u16) (data[ 28] & 0xc0)) << 2;554 sdrd[sdrd_count].format = data[(ipmi_ver == 0x90?22:24)] >> 6; 555 sdrd[sdrd_count].linear = data[(ipmi_ver == 0x90?25:26)] & 0x7f; 556 sdrd[sdrd_count].m = data[(ipmi_ver == 0x90?26:27)]; 557 sdrd[sdrd_count].m |= ((u16) (data[(ipmi_ver == 0x90?27:28)] & 0xc0)) << 2; 556 558 if(sdrd[sdrd_count].m & 0x0200) 557 559 sdrd[sdrd_count].m |= 0xfc00; /* sign extend */ 558 sdrd[sdrd_count].b = data[ 29];559 sdrd[sdrd_count].b |= ((u16) (data[ 30] & 0xc0)) << 2;560 sdrd[sdrd_count].b = data[(ipmi_ver == 0x90?28:29)]; 561 sdrd[sdrd_count].b |= ((u16) (data[(ipmi_ver == 0x90?29:30)] & 0xc0)) << 2; 560 562 if(sdrd[sdrd_count].b & 0x0200) 561 563 sdrd[sdrd_count].b |= 0xfc00; /* sign extend */ 562 sdrd[sdrd_count].k = data[ 32];563 sdrd[sdrd_count].nominal = data[ 34];564 sdrd[sdrd_count].k = data[(ipmi_ver == 0x90?31:32)]; 565 sdrd[sdrd_count].nominal = data[(ipmi_ver == 0x90?33:34)]; 564 566 for(i = 0; i < SDR_LIMITS; i++) /* assume readable */ 565 sdrd[sdrd_count].limits[i] = data[ 39+ i];567 sdrd[sdrd_count].limits[i] = data[(ipmi_ver == 0x90?40:39) + i]; 566 568 sdrd[sdrd_count].string_type = data[50] >> 6; 567 569 id_length = data[50] & 0x1f; … … 572 574 sdrd[sdrd_count].b = 0; 573 575 sdrd[sdrd_count].k = 0; 574 sdrd[sdrd_count].string_type = data[ 34] >> 6;576 sdrd[sdrd_count].string_type = data[(ipmi_ver == 0x90?29:34)] >> 6; 575 577 id_length = data[34] & 0x1f; 576 578 if(id_length > 0) 577 memcpy(sdrd[sdrd_count].id, &data[ 35], id_length);579 memcpy(sdrd[sdrd_count].id, &data[(ipmi_ver == 0x90?30:35)], id_length); 578 580 sdrd[sdrd_count].id_length = id_length; 579 581 /* limits?? */ 582 if(ipmi_ver == 0x90){ 583 memcpy(sdrd[sdrd_count].id, &data[30], id_length); 584 sdrd[sdrd_count].id_length = id_length; 585 } 580 586 } 581 587 bmcs_count[stype]++; … … 612 618 nextrecord = 0xffff; /*YJ stop sensor scan on poweredge 1750 */ 613 619 } 614 620 if (ipmi_ver != 0x90) { 621 if (nextrecord>=6224) { 622 nextrecord = 0xffff; /*YJ stop sensor scan on poweredge 1750 */ 623 } 624 } 625 615 626 if(nextrecord == 0xFFFF) { 616 627 if(sdrd_count == 0) { … … 822 833 rx_msg_data_offset = 0; 823 834 errorcount = 0; 824 ipmi_sdr_partial_size = IPMI_ SDR_SIZE;835 ipmi_sdr_partial_size = IPMI_CHUNK_SIZE; 825 836 for(i = 0; i <= STYPE_MAX; i++) 826 837 bmcs_count[i] = 0;
