| 335 | | char *buffer; unsigned int i; |
|---|
| 336 | | extern unsigned char X86; |
|---|
| 337 | | unsigned char *ptr=&X86; |
|---|
| 338 | | extern unsigned char *udp_packet_r; |
|---|
| 339 | | extern char lbsname[]; |
|---|
| 340 | | int sz=0, port; |
|---|
| 341 | | |
|---|
| 342 | | udp_init(); |
|---|
| 343 | | |
|---|
| 344 | | /* tell the LBS that we have booted */ |
|---|
| 345 | | udp_send_lbs("L0", 2); |
|---|
| 346 | | |
|---|
| 347 | | /* begin */ |
|---|
| 348 | | buffer=(char *)PASSWORD_BUF; |
|---|
| 349 | | *buffer++=0xAA; |
|---|
| 350 | | grub_sprintf(buffer,"M:%x,U:%x\n",mbi.mem_lower,mbi.mem_upper); while (*buffer) buffer++; |
|---|
| 351 | | eth_pci_init(buffer); while (*buffer) buffer++; |
|---|
| 352 | | grub_sprintf(buffer,"C:"); while (*buffer) buffer++; |
|---|
| 353 | | cpuinfo(); for(i=0;i<24;i++) {grub_sprintf(buffer,"%x,",ptr[i]); while (*buffer) buffer++;} |
|---|
| 354 | | *(buffer-1)='\n'; |
|---|
| 355 | | grub_sprintf(buffer,"F:%d\n",cpuspeed()); while (*buffer) buffer++; |
|---|
| 356 | | |
|---|
| 357 | | drive_info(buffer); |
|---|
| 358 | | |
|---|
| 359 | | /* smbios infos */ |
|---|
| 360 | | if ( smbios_init() ) |
|---|
| 361 | | { |
|---|
| 362 | | unsigned char *p1, *p2, *p3, *p4, *p; |
|---|
| 363 | | int i; |
|---|
| 364 | | char hex[]="0123456789ABCDEF"; |
|---|
| 365 | | |
|---|
| 366 | | smbios_get_sysinfo(&p1, &p2, &p3, &p4, &p); |
|---|
| 367 | | while (*buffer) buffer++; |
|---|
| 368 | | grub_sprintf(buffer, "S1:%s|%s|%s|%s|",p1, p2, p3, p4); |
|---|
| 369 | | |
|---|
| 370 | | while (*buffer) buffer++; |
|---|
| 371 | | for (i = 0; i<16; i++) /* UUID */ |
|---|
| 372 | | { |
|---|
| 373 | | *buffer++ = hex[p[i]>>4]; |
|---|
| 374 | | *buffer++ = hex[p[i]&15]; |
|---|
| 375 | | } |
|---|
| 376 | | *buffer++ = '\n'; |
|---|
| 377 | | |
|---|
| 378 | | smbios_get_biosinfo(&p1, &p2, &p3); |
|---|
| 379 | | grub_sprintf(buffer, "S0:%s|%s|%s\n",p1, p2, p3); |
|---|
| 380 | | while (*buffer) buffer++; |
|---|
| 381 | | |
|---|
| 382 | | smbios_get_enclosure(&p1, &p2); |
|---|
| 383 | | grub_sprintf(buffer, "S3:%s|%d\n",p1, *p2); |
|---|
| 384 | | |
|---|
| 385 | | } |
|---|
| 386 | | |
|---|
| 387 | | /* send inventory */ |
|---|
| 388 | | buffer=(char *)PASSWORD_BUF; |
|---|
| 389 | | udp_send_withmac((char *)PASSWORD_BUF,strlen(buffer)+1,1001,1001); |
|---|
| 390 | | |
|---|
| 391 | | /* I want my name */ |
|---|
| 392 | | /* Some buggy PXE bioses need a read before sending... (SMC cards) */ |
|---|
| 393 | | udp_get(NULL, &sz, 1001, &port); |
|---|
| 394 | | udp_send_lbs("\x1A", 1); |
|---|
| 395 | | i = currticks(); |
|---|
| 396 | | while (i+15 > currticks()) { |
|---|
| 397 | | sz = 0; |
|---|
| 398 | | udp_get(NULL, &sz, 1001, &port); |
|---|
| 399 | | if (sz) break; |
|---|
| 400 | | }; |
|---|
| 401 | | |
|---|
| 402 | | if (sz) { |
|---|
| 403 | | /* grub_strcpy does not work here ?!? */ |
|---|
| 404 | | for (i = 0; i < 32; i++) { |
|---|
| 405 | | lbsname[i] = udp_packet_r[i]; |
|---|
| 406 | | } |
|---|
| 407 | | lbsname[sz] = 0; |
|---|
| 408 | | lbsname[31] = 0; |
|---|
| 409 | | } |
|---|
| 410 | | udp_close(); |
|---|
| | 334 | char *buffer; unsigned int i; |
|---|
| | 335 | extern unsigned char X86; |
|---|
| | 336 | unsigned char *ptr=&X86; |
|---|
| | 337 | extern unsigned char *udp_packet_r; |
|---|
| | 338 | extern char lbsname[]; |
|---|
| | 339 | int sz=0, port; |
|---|
| | 340 | |
|---|
| | 341 | udp_init(); |
|---|
| | 342 | |
|---|
| | 343 | /* tell the LBS that we have booted */ |
|---|
| | 344 | udp_send_lbs("L0", 2); |
|---|
| | 345 | |
|---|
| | 346 | /* begin */ |
|---|
| | 347 | buffer=(char *)PASSWORD_BUF; |
|---|
| | 348 | *buffer++=0xAA; |
|---|
| | 349 | buffer += grub_sprintf(buffer,"M:%x,U:%x\n",mbi.mem_lower,mbi.mem_upper); |
|---|
| | 350 | eth_pci_init(buffer); while (*buffer) buffer++; |
|---|
| | 351 | |
|---|
| | 352 | drive_info(buffer); |
|---|
| | 353 | while (*buffer) buffer++; |
|---|
| | 354 | |
|---|
| | 355 | /* smbios infos */ |
|---|
| | 356 | if ( smbios_init() ) |
|---|
| | 357 | { |
|---|
| | 358 | unsigned char *p1, *p2, *p3, *p4, *p; |
|---|
| | 359 | int i, i1, i2, i3, i4; |
|---|
| | 360 | char hex[]="0123456789ABCDEF"; |
|---|
| | 361 | |
|---|
| | 362 | smbios_get_biosinfo(&p1, &p2, &p3); |
|---|
| | 363 | buffer += grub_sprintf(buffer, "S0:%s|%s|%s\n",p1, p2, p3); |
|---|
| | 364 | |
|---|
| | 365 | smbios_get_sysinfo(&p1, &p2, &p3, &p4, &p); |
|---|
| | 366 | buffer += grub_sprintf(buffer, "S1:%s|%s|%s|%s|",p1, p2, p3, p4); |
|---|
| | 367 | |
|---|
| | 368 | /* while (*buffer) buffer++; */ |
|---|
| | 369 | for (i = 0; i<16; i++) /* UUID */ |
|---|
| | 370 | { |
|---|
| | 371 | *buffer++ = hex[p[i]>>4]; |
|---|
| | 372 | *buffer++ = hex[p[i]&15]; |
|---|
| | 373 | } |
|---|
| | 374 | |
|---|
| | 375 | smbios_get_enclosure(&p1, &p2); |
|---|
| | 376 | buffer += grub_sprintf(buffer, "\nS3:%s|%d\n",p1, *p2 & 0x7F); |
|---|
| | 377 | |
|---|
| | 378 | while (smbios_get_memory(&i1, &i2, &p1, &i3, &i4)) { |
|---|
| | 379 | buffer += grub_sprintf(buffer, "SM:%d:%x:%s:%x:%d\n", i1, i2, p1, i3, i4); |
|---|
| | 380 | } |
|---|
| | 381 | buffer += grub_sprintf(buffer, "S4:%d\n", smbios_get_numcpu()); |
|---|
| | 382 | } |
|---|
| | 383 | |
|---|
| | 384 | buffer += grub_sprintf(buffer,"C:"); |
|---|
| | 385 | cpuinfo(); |
|---|
| | 386 | for (i=0;i<24;i++) { |
|---|
| | 387 | buffer += grub_sprintf(buffer,"%x,",ptr[i]); |
|---|
| | 388 | } |
|---|
| | 389 | buffer--; |
|---|
| | 390 | buffer += grub_sprintf(buffer,"\nF:%d\n",cpuspeed()); |
|---|
| | 391 | |
|---|
| | 392 | /* send inventory */ |
|---|
| | 393 | buffer=(char *)PASSWORD_BUF; |
|---|
| | 394 | udp_send_withmac((char *)PASSWORD_BUF,strlen(buffer)+1,1001,1001); |
|---|
| | 395 | |
|---|
| | 396 | /* I want my name */ |
|---|
| | 397 | /* Some buggy PXE bioses need a read before sending... (SMC cards) */ |
|---|
| | 398 | udp_get(NULL, &sz, 1001, &port); |
|---|
| | 399 | udp_send_lbs("\x1A", 1); |
|---|
| | 400 | i = currticks(); |
|---|
| | 401 | /* wait one sec */ |
|---|
| | 402 | while (i+15 > currticks()) { |
|---|
| | 403 | sz = 0; |
|---|
| | 404 | udp_get(NULL, &sz, 1001, &port); |
|---|
| | 405 | if (sz) break; |
|---|
| | 406 | }; |
|---|
| | 407 | |
|---|
| | 408 | if (sz) { |
|---|
| | 409 | /* grub_strcpy does not work here ?!? */ |
|---|
| | 410 | for (i = 0; i < 32; i++) { |
|---|
| | 411 | lbsname[i] = udp_packet_r[i]; |
|---|
| | 412 | } |
|---|
| | 413 | lbsname[sz] = 0; |
|---|
| | 414 | lbsname[31] = 0; |
|---|
| | 415 | } |
|---|
| | 416 | udp_close(); |
|---|
| | 417 | done_inventory = 1; |
|---|