Index: linuxfirmwarekit/dsdt.c =================================================================== --- linuxfirmwarekit/dsdt.c (revision 0) +++ linuxfirmwarekit/dsdt.c (revision 218) @@ -0,0 +1,413 @@ +/* + * Copyright (C) 2006, Intel Corporation + * + * This file is part of the Linux-ready Firmware Developer Kit + * + * This program file is free software; you can redistribute it and/or modify it + * under the terms of the GNU Lesser General Public License as published by the + * Free Software Foundation;version 2.1 of the License. + * + * This library is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License + * for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program in a file named COPYING; if not, write to the + * Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, + * Boston, MA 02110-1301 USA + */ + +#include +#include +#include +#include +#include + +#include + +#include +#include + +#include + + +struct dsdt_line { + char *line; /* actual line in dsdt */ + char *locator; /* parsed and cleaned locator (e.g. \GPE._L01) */ + char *untranslated; /* non-parsed locator (e.g. @\_GPE{_L01) */ + int lineno; /* line # in dsdt */ +}; + +#define SCOPE 1 +#define DEVICE 2 +#define METHOD 3 + +GList *ssdt[MAX_SSDTS]; /* holds the list of available dsdt and ssdt* tables */ +int ssdt_size[MAX_SSDTS] = {4,4,4,4,4,4,4,4,4,4,4}; +static int current_ssdt; /* current pointer to which dsdt or ssdt table we're accessing */ + +/* extract_dsdt_ssdts () -- Obtain the dsdt and ssdt acpi tables */ +void extract_dsdt_ssdts() +{ + + int ret; + + /* create hex-dump format of all acpi tables in file 'acpidump' */ + system("plugins/acpidump > acpi.dump &> /dev/null"); + if (access("acpi.dump", R_OK)) + fprintf(stderr,"WARN (acpidump): failed to create acpi.dump.\n"); + + /* use 'acpidump' file to extract dsdt and ssdt tables + * in binary format, creates DSDT.dat and SSDT*.dat */ + system("plugins/acpixtract acpi.dump &> /dev/null"); + if (access("DSDT.dat", R_OK)) { + ret = system("cat /proc/acpi/dsdt > DSDT.dat"); + if (ret != EXIT_SUCCESS) { + fprintf(stderr,"WARN (acpixtract: failed to create DSDT.dat.\n"); + return; + } + } + + /* Disassemble DSDT.dat with iasl, will create DSDT.dsl */ + system("plugins/iasl -d DSDT.dat &>/dev/null"); + if (access("DSDT.dsl", R_OK)) + fprintf(stderr,"WARN (iasl): failed to create DSDT.dsl.\n"); + + /* Include ACPI table for external symbol resolution (if they exist) */ + system("plugins/iasl -d -e DSDT.dat SSDT.dat &>/dev/null"); + system("plugins/iasl -d -e DSDT.dat SSDT1.dat &>/dev/null"); + system("plugins/iasl -d -e DSDT.dat SSDT2.dat &>/dev/null"); + system("plugins/iasl -d -e DSDT.dat SSDT3.dat &>/dev/null"); + system("plugins/iasl -d -e DSDT.dat SSDT4.dat &>/dev/null"); + system("plugins/iasl -d -e DSDT.dat SSDT5.dat &>/dev/null"); + system("plugins/iasl -d -e DSDT.dat SSDT6.dat &>/dev/null"); + system("plugins/iasl -d -e DSDT.dat SSDT7.dat &>/dev/null"); + system("plugins/iasl -d -e DSDT.dat SSDT8.dat &>/dev/null"); + system("plugins/iasl -d -e DSDT.dat SSDT9.dat &>/dev/null"); + + /* current iasl has an issue with arugment counts in SSDT's, work around this */ + system("sed -i -e \"s/^ACPI Error.*Argument count mismatch for method.*//g\" SSDT*.dsl &> /dev/null"); + +} + +/* push () -- adds a '{' to locator string */ +static void push(char *s) +{ + if (strlen(s)>8000) { + printf("FATAL: locator overflow\n"); + return; + } + strcat(s, "{"); +} + +/* push_name() -- adds label name to locator string */ +static void push_name(char *s, char *name) +{ + if (strlen(s)+strlen(name)>8000) { + printf("FATAL: locator overflow\n"); + return; + } + strcat(s,name); +} + +/* push_name_scope() -- adds '@' . 'scope name' + * to locator string (using @ to diff between scope + * and label like Method, Device, etc.) */ +static void push_name_scope(char *s, char *name) +{ + if (strlen(s)+strlen(name)>8000) { + printf("FATAL: locator overflow\n"); + return; + } + strcat(s,"@"); + strcat(s,name); +} + +/* pop () - chops chars until we reach a '{' */ +static void pop(char *s) +{ + if (strlen(s)<1) + return; + if (s[strlen(s)-1]!='{') + return; + chop_lastchar(s); + while (strlen(s)>0 && s[strlen(s)-1]!='{') + chop_lastchar(s); +} + +/* translate_locator() -- parses the locator and cleans it up to + * produce the actual AML path. (e.g. @\GPE{_L01 becomes + * \GPE.L01) */ +static void translate_locator(char *locator, char *target) +{ + char *c; + char *l; + int prevbracket = 1; + + if (target == NULL) + return; + + target[0] = 0; + + if (locator == NULL) + return; + + c = target; + + l=locator; + + while (*l) { + if (*l=='{' && !prevbracket) { + *c = '.'; + c++; + *c = 0; + prevbracket = 1; + } + if (*l!='{') { + *c = *l; + c++; + *c = 0; + prevbracket = 0; + } + if (*l=='@') { + c = target; + *c=0; + prevbracket = 1; + } + + l++; + } +} + +/* parse_dsdt () -- parses dsdt.dsl file. Saves the info of each line as + * a list of struct* dsdt_line. + * This makes it easy later on when we recompile the + * DSDT with iasl to identify which line the + * warnings/errors are, and which methods/ + * devices/scope they're located in. + * + * + * Parameters + * filename - usually dsdt.dsl file to parse + * Returns + * void +*/ + +static void parse_dsdt(char *filename) +{ + FILE *file; + char line[4096]; + int lineno = 0; + + char locator[8192]; + char translated[8192]; + + memset(locator, 0, 8192); + + /* open dsdt.dsl or ssdt*.dsl */ + file = fopen(filename, "r"); + if (file==NULL) { + printf("Failed to open file %s \n", filename); + return; + } + + /* Parse through the .dsl file */ + while (!feof(file)) { + char *c; + char name[256]; + struct dsdt_line *ds; + int label = 0; + + memset(name, 0, 256); + memset(line, 0, 4096); + if (fgets(line, 4095, file)==NULL) + break; + lineno++; + + ds = malloc(sizeof(struct dsdt_line)); + assert(ds!=NULL); + memset(ds, 0, sizeof(struct dsdt_line)); + ds->line = strdup(line); + ds->lineno = lineno; + + /* We hit a Device label */ + c = strstr(line, "Device ("); + if (c) { + + /* get the name of the device */ + label = DEVICE; + c+=8; + while (*c) { + if (*c!=')' && *c!=',') + name[strlen(name)]=*c; + else + break; + c++; + } + push_name(&locator[0], name); + } + + /* We hit a Method label */ + c = strstr(line, "Method ("); + if (c) { + + label = METHOD; + c+=8; + while (*c) { + if (*c!=')' && *c!=',') + name[strlen(name)]=*c; + else + break; + c++; + } + push_name(&locator[0], name); + } + + /* We hit a Scope label */ + c = strstr(line, "Scope ("); + if (c) { + + label = SCOPE; + c+=7; + while (*c) { + if (*c!=')' && *c!=',') + name[strlen(name)]=*c; + else + break; + c++; + } + push_name_scope(&locator[0], name); + } + + /* Else if we didn't hit a label */ + if (label == 0) { + c = line; + while (c && *c) { + if (*c=='{') + push(&locator[0]); + if (*c=='}') + pop(&locator[0]); + c++; + } + } + + translate_locator(locator, translated); + ds->locator = strdup(translated); + ds->untranslated = strdup(locator); + ssdt[current_ssdt] = g_list_append(ssdt[current_ssdt], ds); + ssdt_size[current_ssdt] += strlen(ds->line); + } + fclose(file); +} + + +/* do_new_resource() -- goes through our list of available dsdt and ssdt* + * tables, and calls the function to announce the resources + * within them. + * Parameters + * list - pointer to the current dsdt or ssdt* table held by + * Returns + * void +*/ +static void do_new_resource(GList *lst) +{ + GList *list; + struct dsdt_line *line; + char *buffer = NULL; + char *ptr; + int state = 0; + char uri[2048]; + char parent[2048]; + int skip = 100; + + if (!lst) + return; + + line = (struct dsdt_line*)lst->data; + + ptr =buffer = malloc(ssdt_size[current_ssdt]); + + ptr += sprintf(ptr,"--=[ %s ]=--\n\n", line->locator); + + list = lst; + while (list) { + struct dsdt_line *this; + + this = (struct dsdt_line*) list->data; + + if (strlen(line->locator)>3) { + int Q; + Q = space_count(this->line); + if (Qline[skip]); + } + + if (!is_prefix(line->untranslated, this->untranslated)) + break; + + if (state==0 && strcmp(line->untranslated, this->untranslated)!=0) { + state=1; + do_new_resource(list); + } + if (strcmp(line->untranslated, this->untranslated)==0) + state = 0; + list = g_list_next(list); + } + + AML_to_uri(line->locator, uri); + + strcpy(parent,uri); + while (strlen(parent)>0 && parent[strlen(parent)-1]!='.') + parent[strlen(parent)-1] = 0; + + chop_lastchar(parent); + + if (strlen(line->locator)>=2 && line->locator[strlen(line->locator)-1]!='.') + announce_resource(uri, buffer, parent); + + free(buffer); +} + +/* announce_aml_resources() -- goes through our list of available dsdt and ssdt* + * tables, and calls the function to announce the resources + * within them. */ +static void announce_aml_resources(void) +{ + if (ssdt[current_ssdt]) + do_new_resource(ssdt[current_ssdt]); + current_ssdt++; +} + + +/* get_dsdt_resources() -- obtains the dsdt and ssdt* tables, parses the resources + * within, announces the resources, and saves the information. + * + * Parameters + * void + * Returns + * void +*/ + +void get_dsdt_resources(void) +{ + int i; + char filen[1024]; + + extract_dsdt_ssdts(); + + parse_dsdt("DSDT.dsl"); + announce_aml_resources(); + + for (i=1; i<10; i++) { + sprintf(filen, "SSDT%i.dsl", i); + if (!access(filen, R_OK)) { + parse_dsdt(filen); + announce_aml_resources(); + } + } + + +} Index: linuxfirmwarekit/usbports/usbports.info =================================================================== --- linuxfirmwarekit/usbports/usbports.info (revision 0) +++ linuxfirmwarekit/usbports/usbports.info (revision 218) @@ -0,0 +1 @@ +link ../Documentation/TestsInfo/usbports.info \ No newline at end of file Property changes on: linuxfirmwarekit/usbports/usbports.info ___________________________________________________________________ Name: svn:special + * Index: linuxfirmwarekit/biostest.h =================================================================== --- linuxfirmwarekit/biostest.h (revision 137) +++ linuxfirmwarekit/biostest.h (revision 218) @@ -73,25 +73,25 @@ extern int interactive_mode; +/* dsdt.c */ +extern void get_dsdt_resources(); /* dmesg.c */ extern void get_dmesg_buffer(void); -extern void match_dmesg_string(char *line, char *suggested_uri); +extern void dmesg_common_errors(char *line, char *suggested_uri); extern void check_dmesg_updates(char *uri); /* tests.c */ +extern void dump_xml_results(void); extern void dump_results(void); +extern void show_results(void); extern void sort_results(void); extern void register_interactive_test(char *name, voidvoidfunc *func); extern void register_hw_poke(char *name, voidvoidfunc *func); - - - - /* plugins.c */ extern void execute_plugins(char *directory); @@ -112,10 +112,16 @@ /* dumpxml.c */ extern void dump_xml(GList *all_tests, char *filename); +extern void dump_text(GList *all_tests, char *filename); /* usb.c */ extern void save_on_usb(void); +/* ssh.c */ + +extern void save_via_ssh(void); +extern int copy_via_ssh(const char *dest); + /* serial.c */ extern void init_serial(int enable, int tty, unsigned long speed); @@ -128,6 +134,7 @@ /* acpitable.c */ extern unsigned long RSDP_ADDRESS; +extern void extract_dsdt_ssdts(); extern int locate_acpi_table(char *name, unsigned long *address, unsigned long *size); extern int locate_acpi_table32(char *name, unsigned long *address, unsigned long *size); extern int locate_acpi_table64(char *name, unsigned long *address, unsigned long *size); Index: linuxfirmwarekit/todo.txt =================================================================== --- linuxfirmwarekit/todo.txt (revision 137) +++ linuxfirmwarekit/todo.txt (revision 218) @@ -1,47 +1,26 @@ - hpet test - basic DMI identifier sanity check - cpu model/family/stepping -> minimum microcode level check - memtest86? - have a list of pci id -> resources to validate bios setup resources - show the progress dialog again briefly during manual testing - howto for writing plugins - /proc/acpi/processor/CPU2/throttling has throttling performance aims - fan status - allow abort of lmbench +======== +Priority +======== +- fan: done +- Make acpi list global: done +- network upload: done +- FADT 32/64 - done +- microcode evel check: done +- Test list w/ detailed desc. of errors/warns/passes: done +- Readable results: done +- known/kb list: in progress +- ia64: release 3 +- EFI release 3 +- AML method call: release 3 +- _SUN AML method call: release 3 +- TPM: will not do for now - -done ----- -tone test -"success" dialog to "save to usb" option -disable clockmod in the kernel -hyperterminal interoperability ... just works. Unlike minicom. -recreate initramfs image from makefile -USB keys without partition tables [1/2] -pass through kernel parameters from bootloader - check for disabled irqs in general, not just acpi - "incremental dmesg" should go into the resource database as well - resource hierarchy; allow "parent is" property. - resource hierarchy hyperlinking in the dialog - investigate battery crash - dynamic updating of results list to allow interactive tests to report there - make xml valid - usb image - mmconfig test - e820 table storage + validation of acpi tables against this table - refactor acpi code to have a generic "copy table" operation - acpi checksum checks for all tables we're walking - make sure that table found via RDST and XSDT point to the same place - E820 resource URI - xml stylesheet - MTRR - suspend/resume - test for non-overlapping pci resources and for sane lengths - increase portability: static link newt and glib -> done via chroot-able - jail instead - - -not going to do ---------------- -allow custom DSDT to make bios testing easier +============ +Nice to have +============ +- 100% auto mode: done +- abort lmbench: done +- Results comparison tool: in progress +- EDID DDC (video probing): release 3 +- Improve suspend: release 3 Index: linuxfirmwarekit/ia64_mce_inject/mce_inject.c =================================================================== --- linuxfirmwarekit/ia64_mce_inject/mce_inject.c (revision 137) +++ linuxfirmwarekit/ia64_mce_inject/mce_inject.c (revision 218) @@ -40,16 +40,69 @@ static char *errors[][2] = { - {"First test", "./err_injection_tool foo bar baz"}, + // On cpu2, inject only total 0x1 error, interval 5 seconds + // working on Montecito latest PAL. + {"First test: inject only, corrected, data cache, hier-2, physical addr(assigned by tool code).", + "rm *.log -f;./err_inject_tool -i -e 2,1,5,4101,95>/dev/null 2>&1;result=0;result=`grep successful *.log|wc -l`;exit $result"}, + // On cpu4, inject and consume total 0x1 error, interval 5 seconds + // working on Montecito latest PAL. + {"Second test: inject and consume, corrected, data cache, hier-2, physical addr(assigned by tool code).", + "rm *.log -f;./err_inject_tool -i -e 4,1,5,4109,95>/dev/null 2>&1;result=0;result=`grep successful *.log|wc -l`;exit $result"}, + // On cpu15, inject and consume total 0x1 error, interval 5 seconds + // working on Montecito latest PAL. + {"Third test: recoverable, DTR0, hier-2.", + "rm *.log -f;./err_inject_tool -i -e 0xf,1,5,4249,15>/dev/null 2>&1;result=0;result=`grep successful *.log|wc -l`;exit $result"}, {NULL,NULL} }; static void inject_error(char *command) { - system(command); + int myHelloWin; + newtComponent myHelloText, myHelloForm, myOk, myScales; + int W,H; + int result=0; + + + newtGetScreenSize(&W,&H); + + myHelloWin = newtOpenWindow(1+(W-55)/2, 1+(H-11)/2, 55, 11,"PC speaker test"); + myHelloForm = newtForm(NULL,NULL,0); + myHelloText = newtTextbox(3,2,52,1, 0); + newtFormAddComponent(myHelloForm, myHelloText); + + newtTextboxSetText(myHelloText, + "Error Injection Testing. \n"); + + myScales = newtScale(3,4,49, 100); + newtFormAddComponent(myHelloForm, myScales); + + + myOk = newtButton(40,6, "Back"); + newtFormAddComponent(myHelloForm, myOk); + + newtDrawForm(myHelloForm); + newtRefresh(); + + result=system(command); + newtScaleSet(myScales, 100); + + if (result) + newtTextboxSetText(myHelloText, + "Error Injection Testing succeeds. \n"); + else + newtTextboxSetText(myHelloText, + "Error Injection Testing fails. \n"); + + newtRefresh(); + + newtDrawForm(myHelloForm); + newtRefresh(); + + newtRunForm(myHelloForm); + + newtPopWindow(); } - static void mci_inject(void) { int win; Index: linuxfirmwarekit/ia64_mce_inject/err_inject_tool.c =================================================================== --- linuxfirmwarekit/ia64_mce_inject/err_inject_tool.c (revision 0) +++ linuxfirmwarekit/ia64_mce_inject/err_inject_tool.c (revision 218) @@ -0,0 +1,995 @@ +/* + +IPF Machine Check (MC) error inject tool +======================================== + +IPF Machine Check (MC) error inject tool is used to inject MC +errors from Linux. The tool is a test bed for IPF MC work flow including +hardware correctable error handling, OS recoverable error handling, MC +event logging, etc. + +The tool includes two parts: a kernel driver and a user application +sample. The driver provides BIOS interface to inject error +and query error injection capabilities. The driver code is in +arch/ia64/kernel/err_inject.c. The application sample (shown below) +provides a combination of various errors and calls the driver's interface +(sysfs interface) to inject errors or query error injection capabilities. + +The tool can be used to test Intel IPF machine MC handling capabilities. +It's especially useful for people who can not access hardware MC injection +tool to inject error. It's also very useful to integrate with other +software test suits to do stressful testing on IPF. + +Below is a sample application as part of the whole tool. The sample +can be used as a working test tool. Or it can be expanded to include +more features. It also can be a integrated into a libary or other user +application to have more thorough test. The sample is GPL licensed code. +Please follow GPL license for any usage of the code. + +The sample application takes err.conf as error configuation input. Gcc +compiles the code. After you install err_inject driver, you can run +this sample application to inject errors. + +Errata: According to Itanium 2 Processors Specification Update, there +are bugs in pal_mc_error_inject PAL procedure. The sample application +is working with the error combinations in the following err.conf on +latest Montecito PAL. + +err.conf: + +#This is configuration file for err_inject_tool. +#The format of the each line is: +#cpu, loop, interval, err_type_info, err_struct_info, err_data_buffer +#where +# cpu: logical cpu number the error will be inject in. +# loop: times the error will be injected. +# interval: In second. every so often one error is injected. +# err_type_info, err_struct_info: PAL parameters. +# +#Note: All values are hex w/o or w/ 0x prefix. + + +#On cpu2, inject only total 0x10 errors, interval 5 seconds +#corrected, data cache, hier-2, physical addr(assigned by tool code). +#working on Montecito latest PAL. +2, 10, 5, 4101, 95 + +#On cpu4, inject and consume total 0x10 errors, interval 5 seconds +#corrected, data cache, hier-2, physical addr(assigned by tool code). +#working on Montecito latest PAL. +4, 10, 5, 4109, 95 + +#On cpu15, inject and consume total 0x10 errors, interval 5 seconds +#recoverable, DTR0, hier-2. +#working on Montecito latest PAL. +0xf, 0x10, 5, 4249, 15 + +The sample application source code: + +err_injection_tool.c: + +*/ + +/* + * Copyright + * --------- + * The sampel application is free software. It is protected by the GNU General Public + * License (GPL). Please read the GPL license, before using this code. + * + * Note: The GNU GPL says also something about warranty and liability. + * Please be aware the following: While we do my best to provide a working and + * reliable code, there is a chance, that it will kill your valuable data. + * We refuse to take any responsibility for that. The code is provided as-is + * and YOU USE IT AT YOUR OWN RESPONSIBILITY. + * + * Copyright (C) 2006 Intel Co + * Fenghua Yu + * + */ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#define MAX_FN_SIZE 256 +#define MAX_BUF_SIZE 256 +#define DATA_BUF_SIZE 256 +#define NR_CPUS 512 +#define MAX_TASK_NUM 2048 +#define MIN_INTERVAL 5 // seconds +#define ERR_DATA_BUFFER_SIZE 3 // Three 8-byte. +#define PARA_FIELD_NUM 5 +#define MASK_SIZE (NR_CPUS/64) +#define PATH_FORMAT "/sys/devices/system/node/node0/cpu%d/err_inject/" + +int sched_setaffinity(pid_t pid, unsigned int len, unsigned long *mask); + +int verbose; +#define vbprintf if (verbose) printf + +int log_info(int cpu, const char *fmt, ...) +{ + FILE *log; + char fn[MAX_FN_SIZE]; + char buf[MAX_BUF_SIZE]; + va_list args; + + sprintf(fn, "%d.log", cpu); + log=fopen(fn, "a+"); + if (log==NULL) { + perror("Error open:"); + return -1; + } + + va_start(args, fmt); + vprintf(fmt, args); + memset(buf, 0, MAX_BUF_SIZE); + vsprintf(buf, fmt, args); + va_end(args); + + fwrite(buf, sizeof(buf), 1, log); + fclose(log); + + return 0; +} + +typedef unsigned long u64; + +typedef union err_type_info_u { + struct { + u64 mode : 3, /* 0-2 */ + err_inj : 3, /* 3-5 */ + err_sev : 2, /* 6-7 */ + err_struct : 5, /* 8-12 */ + struct_hier : 3, /* 13-15 */ + reserved : 48; /* 16-63 */ + } err_type_info_u; + u64 err_type_info; +} err_type_info_t; + +typedef union err_struct_info_u { + struct { + u64 siv : 1, /* 0 */ + c_t : 2, /* 1-2 */ + cl_p : 3, /* 3-5 */ + cl_id : 3, /* 6-8 */ + cl_dp : 1, /* 9 */ + reserved1 : 22, /* 10-31 */ + tiv : 1, /* 32 */ + trigger : 4, /* 33-36 */ + trigger_pl : 3, /* 37-39 */ + reserved2 : 24; /* 40-63 */ + } err_struct_info_cache; + struct { + u64 siv : 1, /* 0 */ + tt : 2, /* 1-2 */ + tc_tr : 2, /* 3-4 */ + tr_slot : 8, /* 5-12 */ + reserved1 : 19, /* 13-31 */ + tiv : 1, /* 32 */ + trigger : 4, /* 33-36 */ + trigger_pl : 3, /* 37-39 */ + reserved2 : 24; /* 40-63 */ + } err_struct_info_tlb; + struct { + u64 siv : 1, /* 0 */ + regfile_id : 4, /* 1-4 */ + reg_num : 7, /* 5-11 */ + reserved1 : 20, /* 12-31 */ + tiv : 1, /* 32 */ + trigger : 4, /* 33-36 */ + trigger_pl : 3, /* 37-39 */ + reserved2 : 24; /* 40-63 */ + } err_struct_info_register; + struct { + u64 reserved; + } err_struct_info_bus_processor_interconnect; + u64 err_struct_info; +} err_struct_info_t; + +typedef union err_data_buffer_u { + struct { + u64 trigger_addr; /* 0-63 */ + u64 inj_addr; /* 64-127 */ + u64 way : 5, /* 128-132 */ + index : 20, /* 133-152 */ + : 39; /* 153-191 */ + } err_data_buffer_cache; + struct { + u64 trigger_addr; /* 0-63 */ + u64 inj_addr; /* 64-127 */ + u64 way : 5, /* 128-132 */ + index : 20, /* 133-152 */ + reserved : 39; /* 153-191 */ + } err_data_buffer_tlb; + struct { + u64 trigger_addr; /* 0-63 */ + } err_data_buffer_register; + struct { + u64 reserved; /* 0-63 */ + } err_data_buffer_bus_processor_interconnect; + u64 err_data_buffer[ERR_DATA_BUFFER_SIZE]; +} err_data_buffer_t; + +typedef union capabilities_u { + struct { + u64 i : 1, + d : 1, + rv : 1, + tag : 1, + data : 1, + mesi : 1, + dp : 1, + reserved1 : 3, + pa : 1, + va : 1, + wi : 1, + reserved2 : 20, + trigger : 1, + trigger_pl : 1, + reserved3 : 30; + } capabilities_cache; + struct { + u64 d : 1, + i : 1, + rv : 1, + tc : 1, + tr : 1, + reserved1 : 27, + trigger : 1, + trigger_pl : 1, + reserved2 : 30; + } capabilities_tlb; + struct { + u64 gr_b0 : 1, + gr_b1 : 1, + fr : 1, + br : 1, + pr : 1, + ar : 1, + cr : 1, + rr : 1, + pkr : 1, + dbr : 1, + ibr : 1, + pmc : 1, + pmd : 1, + reserved1 : 3, + regnum : 1, + reserved2 : 15, + trigger : 1, + trigger_pl : 1, + reserved3 : 30; + } capabilities_register; + struct { + u64 reserved; + } capabilities_bus_processor_interconnect; +} capabilities_t; + +typedef struct resources_s { + u64 ibr0 : 1, + ibr2 : 1, + ibr4 : 1, + ibr6 : 1, + dbr0 : 1, + dbr2 : 1, + dbr4 : 1, + dbr6 : 1, + reserved : 48; +} resources_t; + + +long get_page_size(void) +{ + long page_size=sysconf(_SC_PAGESIZE); + return page_size; +} + +#define PAGE_SIZE (get_page_size()==-1?0x4000:get_page_size()) +#define SHM_SIZE (2*PAGE_SIZE*NR_CPUS) +#define SHM_VA 0x2000000100000000 + +int shmid; +void *shmaddr; + +int create_shm(void) +{ + key_t key; + char fn[MAX_FN_SIZE]; + + /* cpu0 is always existing */ + sprintf(fn, PATH_FORMAT, 0); + if ((key = ftok(fn, 's')) == -1) { + perror("ftok"); + return -1; + } + + shmid = shmget(key, SHM_SIZE, 0644 | IPC_CREAT); + if (shmid == -1) { + if (errno==EEXIST) { + shmid = shmget(key, SHM_SIZE, 0); + if (shmid == -1) { + perror("shmget"); + return -1; + } + } + else { + perror("shmget"); + return -1; + } + } + vbprintf("shmid=%d", shmid); + + /* connect to the segment: */ + shmaddr = shmat(shmid, (void *)SHM_VA, 0); + if (shmaddr == (void*)-1) { + perror("shmat"); + return -1; + } + + memset(shmaddr, 0, SHM_SIZE); + mlock(shmaddr, SHM_SIZE); + + return 0; +} + +int free_shm() +{ + munlock(shmaddr, SHM_SIZE); + shmdt(shmaddr); + semctl(shmid, 0, IPC_RMID); + + return 0; +} + +#ifdef _SEM_SEMUN_UNDEFINED +union semun +{ + int val; + struct semid_ds *buf; + unsigned short int *array; + struct seminfo *__buf; +}; +#endif + +int one_lock; +key_t key[NR_CPUS]; +int semid[NR_CPUS]; + +int create_sem(int cpu) +{ + union semun arg; + char fn[MAX_FN_SIZE]; + int sid; + + sprintf(fn, PATH_FORMAT, cpu); + sprintf(fn, "%s/%s", fn, "err_type_info"); + if ((key[cpu] = ftok(fn, 'e')) == -1) { + perror("ftok"); + return -1; + } + + if (semid[cpu]!=0) + return 0; + + /* clear old semaphore */ + if ((sid = semget(key[cpu], 1, 0)) != -1) + semctl(sid, 0, IPC_RMID); + + /* get one semaphore */ + if ((semid[cpu] = semget(key[cpu], 1, IPC_CREAT | IPC_EXCL)) == -1) { + perror("semget"); + printf("Please remove semaphore with key=0x%lx, then run the tool.\n", + (u64)key[cpu]); + return -1; + } + + vbprintf("semid[%d]=0x%lx, key[%d]=%lx\n",cpu,(u64)semid[cpu],cpu, + (u64)key[cpu]); + /* initialize the semaphore to 1: */ + arg.val = 1; + if (semctl(semid[cpu], 0, SETVAL, arg) == -1) { + perror("semctl"); + return -1; + } + + return 0; +} + +static int lock(int cpu) +{ + struct sembuf lock; + + lock.sem_num = cpu; + lock.sem_op = 1; + semop(semid[cpu], &lock, 1); + + return 0; +} + +static int unlock(int cpu) +{ + struct sembuf unlock; + + unlock.sem_num = cpu; + unlock.sem_op = -1; + semop(semid[cpu], &unlock, 1); + + return 0; +} + +void free_sem(int cpu) +{ + semctl(semid[cpu], 0, IPC_RMID); +} + +int wr_multi(char *fn, unsigned long *data, int size) +{ + int fd; + char buf[MAX_BUF_SIZE]; + + if (size==1) + sprintf(buf, "%lx", *data); + else if (size==3) + sprintf(buf, "%lx,%lx,%lx", data[0], data[1], data[2]); + else { + fprintf(stderr,"write to file with wrong size!\n"); + return -1; + } + + fd=open(fn, O_RDWR); + if (!fd) { + perror("Error:"); + return -1; + } + write(fd, buf, sizeof(buf)); + close(fd); + return 0; +} + +int wr(char *fn, unsigned long data) +{ + return wr_multi(fn, &data, 1); +} + +int rd(char *fn, unsigned long *data) +{ + int fd; + char buf[MAX_BUF_SIZE]; + + fd=open(fn, O_RDONLY); + if (fd<0) { + perror("Error:"); + return -1; + } + read(fd, buf, MAX_BUF_SIZE); + *data=strtoul(buf, NULL, 16); + close(fd); + return 0; +} + +int rd_status(char *path, int *status) +{ + char fn[MAX_FN_SIZE]; + sprintf(fn, "%s/status", path); + if (rd(fn, (u64*)status)<0) { + perror("status reading error.\n"); + return -1; + } + + return 0; +} + +int rd_capabilities(char *path, u64 *capabilities) +{ + char fn[MAX_FN_SIZE]; + sprintf(fn, "%s/capabilities", path); + if (rd(fn, capabilities)<0) { + perror("capabilities reading error.\n"); + return -1; + } + + return 0; +} + +int rd_all(char *path) +{ + unsigned long err_type_info, err_struct_info, err_data_buffer; + int status; + unsigned long capabilities, resources; + char fn[MAX_FN_SIZE]; + + sprintf(fn, "%s/err_type_info", path); + if (rd(fn, &err_type_info)<0) { + perror("err_type_info reading error.\n"); + return -1; + } + printf("err_type_info=%lx\n", err_type_info); + + sprintf(fn, "%s/err_struct_info", path); + if (rd(fn, &err_struct_info)<0) { + perror("err_struct_info reading error.\n"); + return -1; + } + printf("err_struct_info=%lx\n", err_struct_info); + + sprintf(fn, "%s/err_data_buffer", path); + if (rd(fn, &err_data_buffer)<0) { + perror("err_data_buffer reading error.\n"); + return -1; + } + printf("err_data_buffer=%lx\n", err_data_buffer); + + sprintf(fn, "%s/status", path); + if (rd("status", (u64*)&status)<0) { + perror("status reading error.\n"); + return -1; + } + printf("status=%d\n", status); + + sprintf(fn, "%s/capabilities", path); + if (rd(fn,&capabilities)<0) { + perror("capabilities reading error.\n"); + return -1; + } + printf("capabilities=%lx\n", capabilities); + + sprintf(fn, "%s/resources", path); + if (rd(fn, &resources)<0) { + perror("resources reading error.\n"); + return -1; + } + printf("resources=%lx\n", resources); + + return 0; +} + +int query_capabilities(char *path, err_type_info_t err_type_info, + u64 *capabilities) +{ + char fn[MAX_FN_SIZE]; + err_struct_info_t err_struct_info; + err_data_buffer_t err_data_buffer; + + err_struct_info.err_struct_info=0; + memset(err_data_buffer.err_data_buffer, -1, ERR_DATA_BUFFER_SIZE*8); + + sprintf(fn, "%s/err_type_info", path); + wr(fn, err_type_info.err_type_info); + sprintf(fn, "%s/err_struct_info", path); + wr(fn, 0x0); + sprintf(fn, "%s/err_data_buffer", path); + wr_multi(fn, err_data_buffer.err_data_buffer, ERR_DATA_BUFFER_SIZE); + + // Fire pal_mc_error_inject procedure. + sprintf(fn, "%s/call_start", path); + wr(fn, 1); + + if (rd_capabilities(path, capabilities)<0) + return -1; + + return 0; +} + +int query_all_capabilities() +{ + int status; + err_type_info_t err_type_info; + int err_sev, err_struct, struct_hier; + int cap=0; + u64 capabilities; + char path[MAX_FN_SIZE]; + + err_type_info.err_type_info=0; // Initial + err_type_info.err_type_info_u.mode=0; // Query mode; + err_type_info.err_type_info_u.err_inj=0; + + printf("All capabilities implemented in pal_mc_error_inject:\n"); + sprintf(path, PATH_FORMAT ,0); + for (err_sev=0;err_sev<3;err_sev++) + for (err_struct=0;err_struct<5;err_struct++) + for (struct_hier=0;struct_hier<5;struct_hier++) + { + status=-1; + capabilities=0; + err_type_info.err_type_info_u.err_sev=err_sev; + err_type_info.err_type_info_u.err_struct=err_struct; + err_type_info.err_type_info_u.struct_hier=struct_hier; + + if (query_capabilities(path, err_type_info, &capabilities)<0) + continue; + + if (rd_status(path, &status)<0) + continue; + + if (status==0) { + cap=1; + printf("For err_sev=%d, err_struct=%d, struct_hier=%d: ", + err_sev, err_struct, struct_hier); + printf("capabilities 0x%lx\n", capabilities); + } + } + if (!cap) { + printf("No capabilities supported.\n"); + return 0; + } + + return 0; +} + +int err_inject(int cpu, char *path, err_type_info_t err_type_info, + err_struct_info_t err_struct_info, + err_data_buffer_t err_data_buffer) +{ + int status; + char fn[MAX_FN_SIZE]; + + log_info(cpu, "err_type_info=%lx, err_struct_info=%lx, ", + err_type_info.err_type_info, + err_struct_info.err_struct_info); + log_info(cpu,"err_data_buffer=[%lx,%lx,%lx]\n", + err_data_buffer.err_data_buffer[0], + err_data_buffer.err_data_buffer[1], + err_data_buffer.err_data_buffer[2]); + sprintf(fn, "%s/err_type_info", path); + wr(fn, err_type_info.err_type_info); + sprintf(fn, "%s/err_struct_info", path); + wr(fn, err_struct_info.err_struct_info); + sprintf(fn, "%s/err_data_buffer", path); + wr_multi(fn, err_data_buffer.err_data_buffer, ERR_DATA_BUFFER_SIZE); + + // Fire pal_mc_error_inject procedure. + sprintf(fn, "%s/call_start", path); + wr(fn,1); + + if (rd_status(path, &status)<0) { + vbprintf("fail: read status\n"); + return -100; + } + + if (status!=0) { + log_info(cpu, "fail: status=%d\n", status); + return status; + } + + return status; +} + +static int construct_data_buf(char *path, err_type_info_t err_type_info, + err_struct_info_t err_struct_info, + err_data_buffer_t *err_data_buffer, + void *va1) +{ + char fn[MAX_FN_SIZE]; + u64 virt_addr=0, phys_addr=0; + + vbprintf("va1=%lx\n", (u64)va1); + memset(&err_data_buffer->err_data_buffer_cache, 0, ERR_DATA_BUFFER_SIZE*8); + + switch (err_type_info.err_type_info_u.err_struct) { + case 1: // Cache + switch (err_struct_info.err_struct_info_cache.cl_id) { + case 1: //Virtual addr + err_data_buffer->err_data_buffer_cache.inj_addr=(u64)va1; + break; + case 2: //Phys addr + sprintf(fn, "%s/virtual_to_phys", path); + virt_addr=(u64)va1; + wr(fn,virt_addr); + rd(fn, &phys_addr); + err_data_buffer->err_data_buffer_cache.inj_addr=phys_addr; + break; + default: + printf("Not supported cl_id\n"); + break; + } + break; + case 2: // TLB + break; + case 3: // Register file + break; + case 4: // Bus/system interconnect + default: + printf("Not supported err_struct\n"); + break; + } + + return 0; +} + +typedef struct { + u64 cpu; + u64 loop; + u64 interval; + u64 err_type_info; + u64 err_struct_info; +} parameters_t; + +parameters_t line_para; +int para; + +int err_inj() +{ + err_type_info_t err_type_info; + err_struct_info_t err_struct_info; + err_data_buffer_t err_data_buffer; + int count; + FILE *fp; + unsigned long cpu, loop, interval, err_type_info_conf, err_struct_info_conf; + int num; + int i; + char path[MAX_FN_SIZE]; + parameters_t parameters[MAX_TASK_NUM]={}; + pid_t child_pid[MAX_TASK_NUM]; + time_t current_time; + int status; + + if (!para) { + fp=fopen("err.conf", "r"); + if (fp==NULL) { + perror("Error open err.conf"); + return -1; + } + + num=0; + while (!feof(fp)) { + char buf[256]; + memset(buf,0,256); + fgets(buf, 256, fp); + count=sscanf(buf, "%lx, %lx, %lx, %lx, %lx\n", + &cpu, &loop, &interval,&err_type_info_conf, + &err_struct_info_conf); + if (count!=PARA_FIELD_NUM) + continue; + + parameters[num].cpu=cpu; + parameters[num].loop=loop; + parameters[num].interval= interval>MIN_INTERVAL + ?interval:MIN_INTERVAL; + parameters[num].err_type_info=err_type_info_conf; + parameters[num++].err_struct_info=err_struct_info_conf; + + if (num>=MAX_TASK_NUM) + break; + } + } + else { + parameters[0].cpu=line_para.cpu; + parameters[0].loop=line_para.loop; + parameters[0].interval= line_para.interval>MIN_INTERVAL + ?line_para.interval:MIN_INTERVAL; + parameters[0].err_type_info=line_para.err_type_info; + parameters[0].err_struct_info=line_para.err_struct_info; + + num=1; + } + + /* Create semaphore: If one_lock, one semaphore for all processors. + Otherwise, one sempaphore for each processor. */ + if (one_lock) { + if (create_sem(0)) { + printf("Can not create semaphore...exit\n"); + free_sem(0); + return -1; + } + } + else { + for (i=0;i #include + +/* main() -- This plugin checks the lspci output for + * the maxreadreq of a device. If it is + * 128 (considered low), it will report + * a warning. + * + * Parameters + * argc & argv + * Returns + * EXIT_SUCCESS upon success of running this plugin + * EXIT_FAILURE upon failure of running this plugin +*/ + int main(int argc, char **argv) { FILE *file; Index: linuxfirmwarekit/_example/Makefile.shelltest =================================================================== --- linuxfirmwarekit/_example/Makefile.shelltest (revision 0) +++ linuxfirmwarekit/_example/Makefile.shelltest (revision 218) @@ -0,0 +1,25 @@ +override CFLAGS += -I.. `pkg-config --cflags glib-2.0` +LDFLAGS = `pkg-config --libs glib-2.0` -L.. -lstandalone + +SCRIPTS = test.sh + +all: install + +install: + chmod a+x $(SCRIPTS) + cp -a $(SCRIPTS) ../plugins + +clean: + rm -rf *~ *.o + +# most of the makefile remains as it was before. +# at the bottom, we add these lines: + +# rule for building dependency lists, and writing them to a file +# named ".depend". +.depend: + rm -f .depend + gccmakedep -f- -- $(CFLAGS) -- *.c > .depend + +# now add a line to include the dependency list. +include .depend Index: linuxfirmwarekit/_example/Makefile.shell =================================================================== --- linuxfirmwarekit/_example/Makefile.shell (revision 0) +++ linuxfirmwarekit/_example/Makefile.shell (revision 218) @@ -0,0 +1,25 @@ +override CFLAGS += -I.. `pkg-config --cflags glib-2.0` +LDFLAGS = `pkg-config --libs glib-2.0` -L.. -lstandalone + +SCRIPTS = example-shell.sh + +all: install + +install: + chmod a+x $(SCRIPTS) + cp -a $(SCRIPTS) ../plugins + +clean: + rm -rf *~ *.o + +# most of the makefile remains as it was before. +# at the bottom, we add these lines: + +# rule for building dependency lists, and writing them to a file +# named ".depend". +.depend: + rm -f .depend + gccmakedep -f- -- $(CFLAGS) -- *.c > .depend + +# now add a line to include the dependency list. +include .depend Index: linuxfirmwarekit/_example/example-shell.sh =================================================================== --- linuxfirmwarekit/_example/example-shell.sh (revision 0) +++ linuxfirmwarekit/_example/example-shell.sh (revision 218) @@ -0,0 +1,24 @@ +#!/bin/sh + +# Example of a shell test. + +# In this case, the name of the shell test is 'example-shell', so the directory it resides in +# should be called 'example-shell', as well as the main file itself. + +# The possible results are: +# +# PASS = successful +# INFO = information given (neither pass nor fail) +# WARN = warning, not severe, but notable +# FAIL = failure, probably something serious or important +# + +# start_test example-shell "This is a shell test" "This is a longer description of the test" + +# report_result example-shell PASS "This is the result msg" + +# report_result example-shell WARN "This is the result msg" "This is the more detailed result msg" + +# report_result example-shell FAIL "This is the result msg" "This is the more detailed result msg related to the dmesg resource" "dmesg://" + +# finish_test example-shell Property changes on: linuxfirmwarekit/_example/example-shell.sh ___________________________________________________________________ Name: svn:executable + * Index: linuxfirmwarekit/_example/example-exe.c =================================================================== --- linuxfirmwarekit/_example/example-exe.c (revision 0) +++ linuxfirmwarekit/_example/example-exe.c (revision 218) @@ -0,0 +1,69 @@ +/* + * Copyright (C) 2006, Intel Corporation + * + * This file is part of the Linux-ready Firmware Developer Kit + * + * This program file is free software; you can redistribute it and/or modify it + * under the terms of the GNU Lesser General Public License as published by the + * Free Software Foundation;version 2.1 of the License. + * + * This library is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License + * for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program in a file named COPYING; if not, write to the + * Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, + * Boston, MA 02110-1301 USA + */ + +#define _GNU_SOURCE + +#include +#include +#include +#include + +#include + +#include + + +/* Example of a standalone exe test. + * + * In this case, the name of the test is 'example-exe', so the directory it resides in + * should be called 'example-exe', as well as the main file itself. + + * The possible results are: + * + * PASS = successful + * INFO = information given (neither pass nor fail) + * WARN = warning, not severe, but notable + * FAIL = failure, probably something serious or important + * + * + * The plugin itself returns: + * EXIT_SUCCESS upon success of running this plugin + * EXIT_FAILURE upon failure of running this plugin +*/ + +int main(int argc, char **argv) +{ + + start_test("example-exe", "Short description of example-exe plugin", + "Here is a little more wordy description about the plugin"); + + report_result("example-exe", PASS, "This is the result msg", NULL, NULL); + + report_result("example-exe", WARN, "This is the result msg", + "This is the more detailed result msg", NULL); + + report_result("example-exe", FAIL, "This is the result msg", + "This is the more detailed result msg related to the pci:// resource", + "pci://"); + + finish_test("example-exe"); + return EXIT_SUCCESS; +} Index: linuxfirmwarekit/_example/example-so.c =================================================================== --- linuxfirmwarekit/_example/example-so.c (revision 0) +++ linuxfirmwarekit/_example/example-so.c (revision 218) @@ -0,0 +1,61 @@ +/* + * Copyright (C) 2006, Intel Corporation + * + * This file is part of the Linux-ready Firmware Developer Kit + * + * This program file is free software; you can redistribute it and/or modify it + * under the terms of the GNU Lesser General Public License as published by the + * Free Software Foundation;version 2.1 of the License. + * + * This library is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License + * for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program in a file named COPYING; if not, write to the + * Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, + * Boston, MA 02110-1301 USA + */ + +#include +#include +#include +#include + +#include + +#include "../biostest.h" + + +/* Example of a non-standalone .so test. + * + * In this case, the name of the test is 'example-so', so the directory it resides in + * should be called 'example-so', as well as the main file itself. + + * The possible results are: + * + * PASS = successful + * INFO = information given (neither pass nor fail) + * WARN = warning, not severe, but notable + * FAIL = failure, probably something serious or important + * +*/ + +void run_test(void) +{ + start_test("example-so", "Short description of example-exe plugin", + "Here is a little more wordy description about the plugin"); + + report_result("example-so", PASS, "This is the result msg", NULL, NULL); + + report_result("example-so", WARN, "This is the result msg", + "This is the more detailed result msg", NULL); + + report_result("example-so", FAIL, "This is the result msg", + "This is the more detailed result msg related to the pci:// resource", + "pci://"); + + finish_test("example-so"); +} Index: linuxfirmwarekit/_example/Makefile.exe =================================================================== --- linuxfirmwarekit/_example/Makefile.exe (revision 0) +++ linuxfirmwarekit/_example/Makefile.exe (revision 218) @@ -0,0 +1,27 @@ +override CFLAGS += `pkg-config --cflags glib-2.0` -I../ +LDFLAGS = `pkg-config --libs glib-2.0` -L.. -lstandalone + + +all: example-exe.exe + +example-exe.exe: example-exe.o .depend + gcc example-exe.o $(LDFLAGS) -o example-exe.exe + cp example-exe.exe ../plugins + +clean: + rm -rf *~ *.o + rm -f example-exe.so example-exe.exe + + +# most of the makefile remains as it was before. +# at the bottom, we add these lines: + +# rule for building dependency lists, and writing them to a file +# named ".depend". +.depend: + rm -f .depend + gccmakedep -f- -- $(CFLAGS) -- *.c > .depend + +# now add a line to include the dependency list. +include .depend + Index: linuxfirmwarekit/_example/Makefile.so =================================================================== --- linuxfirmwarekit/_example/Makefile.so (revision 0) +++ linuxfirmwarekit/_example/Makefile.so (revision 218) @@ -0,0 +1,26 @@ +override CFLAGS += -fPIC `pkg-config --cflags glib-2.0` -I.. +LDFLAGS = `pkg-config --libs glib-2.0` + + +all: example-so.so + +example-so.so: example-so.o .depend + gcc --shared example-so.o $(LDFLAGS) -o example-so.so + cp example-so.so ../plugins + +clean: + rm -rf *~ *.o + rm -f example-so.so + +# most of the makefile remains as it was before. +# at the bottom, we add these lines: + +# rule for building dependency lists, and writing them to a file +# named ".depend". +.depend: + rm -f .depend + gccmakedep -f- -- $(CFLAGS) -- *.c > .depend + +# now add a line to include the dependency list. +include .depend + Index: linuxfirmwarekit/os2gap/os2gap.info =================================================================== --- linuxfirmwarekit/os2gap/os2gap.info (revision 0) +++ linuxfirmwarekit/os2gap/os2gap.info (revision 218) @@ -0,0 +1 @@ +link ../Documentation/TestsInfo/os2gap.info \ No newline at end of file Property changes on: linuxfirmwarekit/os2gap/os2gap.info ___________________________________________________________________ Name: svn:special + * Index: linuxfirmwarekit/os2gap/os2gap.c =================================================================== --- linuxfirmwarekit/os2gap/os2gap.c (revision 137) +++ linuxfirmwarekit/os2gap/os2gap.c (revision 218) @@ -49,7 +49,9 @@ "This test checks if the OS/2 15Mb memory hole is absent"); if (e820_is_reserved(15*1024*1024)) - report_result("os2gap", FAIL, "The memory map has a memory hole between 15Mb and 16Mb", NULL, "e820://"); + report_result("os2gap", FAIL, "The memory map has a memory hole between 15Mb and 16Mb", NULL, "e820://"); + else + report_result("os2gap", PASS, "Successfully found no 15mb memory hole", NULL, NULL); finish_test("os2gap"); } Index: linuxfirmwarekit/ui.c =================================================================== --- linuxfirmwarekit/ui.c (revision 137) +++ linuxfirmwarekit/ui.c (revision 218) @@ -34,6 +34,19 @@ static int myProgressWin=-1; static newtComponent myProgressText, myProgressForm, myScales; +static GList *save_pokes; + +static void register_save_poke(char *name, voidvoidfunc *func) +{ + struct interactive_test *test; + test = malloc(sizeof(struct interactive_test)); + assert(test!=NULL); + memset(test, 0, sizeof(struct interactive_test)); + test->shortname = strdup(name); + test->execute = func; + save_pokes = g_list_append(save_pokes, test); +} + static int longest_string(char *str) { char *c; @@ -55,7 +68,7 @@ newtComponent myHelloText, myHelloForm; newtInit(); newtCls(); - newtDrawRootText(0,0, " Linux-ready Firmware Developer Kit - Release 1 - (C) 2006 Intel Corporation"); + newtDrawRootText(0,0, " Linux-ready Firmware Developer Kit - Release 2 - (C) 2007 Intel Corporation"); newtPushHelpLine( " Linux-ready Firmware Developer Kit"); int W,H; @@ -71,7 +84,7 @@ "testers, support personnel and Linux* kernel developers to help \n" "validate Firmware and the interaction with the Linux operating\n" "system. \n\n" - " Copyright (C) 2006 Intel Corporation \n\n" + " Copyright (C) 2007 Intel Corporation \n\n" "This program is free software; you can redistribute it and/or \n" "modify it under the terms of the GNU Lesser General Public \n" "License version 2.1 as published by the Free Software Foundation\n\n" @@ -501,6 +514,7 @@ } newtPopWindow(); + newtFormDestroy(myForm); } static int nrtotal, nrpass, nrfail, nrwarn; @@ -623,7 +637,7 @@ int win; newtComponent myForm; newtComponent myOkButton; - newtComponent myUSBButton; + newtComponent mySaveButton; newtComponent myIntButton; newtComponent myPokeButton; newtComponent myHelpButton; @@ -662,18 +676,23 @@ myOkButton = newtButton(2,H-8, "Exit"); newtFormAddComponent(myForm, myOkButton); - myUSBButton = newtButton(12,H-8, "Save to USB"); - newtFormAddComponent(myForm, myUSBButton); + mySaveButton = newtButton(12,H-8, "Save"); + newtFormAddComponent(myForm, mySaveButton); - myIntButton = newtButton(29,H-8, "Manual Tests"); + /* Setup save options */ + + register_save_poke("Save to USB", save_on_usb); + register_save_poke("Save via SSH", save_via_ssh); + + myIntButton = newtButton(22,H-8, "Manual Tests"); if (interactive_tests) newtFormAddComponent(myForm, myIntButton); - myPokeButton = newtButton(47,H-8, "Poke HW"); + myPokeButton = newtButton(40,H-8, "Poke HW"); if (hardware_pokes) newtFormAddComponent(myForm, myPokeButton); - myHelpButton = newtButton(61,H-8, "Help"); + myHelpButton = newtButton(54,H-8, "Help"); newtFormAddComponent(myForm, myHelpButton); if (!interactive_mode) { @@ -688,8 +707,8 @@ show_resource_info(result->devuri); else show_result(result); - } else if (resu == myUSBButton) { - save_on_usb(); + } else if (resu == mySaveButton) { + int_poke_dialog("Save results", save_pokes); } else if (resu == myPokeButton) { int_poke_dialog("Poke hardware", hardware_pokes); } else if (resu == myIntButton) { Index: linuxfirmwarekit/BUILD =================================================================== --- linuxfirmwarekit/BUILD (revision 137) +++ linuxfirmwarekit/BUILD (revision 218) @@ -20,10 +20,17 @@ # make clean -For more documentation on running stand-alone tests and creating ISOs, -go to Documentation/ . +Notes +===== Root user note: Running with 'root' privileges will provide best results (especially for scripts such as firmwarekit/initramfs/dev.sh, etc.) Proxy note: make sure your proxy is set correctly for wget commands (set variables http_proxy, ftp_proxy, etc.) +Docs +==== +For more documentation on running stand-alone tests and creating ISOs, +go to Documentation/ . + +See 'Documentation/Build.env' to see an example build environment we use (packages, kernel ver, etc.) It is not necessary to duplicate this env., but helpful info when you are buildling. + Index: linuxfirmwarekit/libstandalone.c =================================================================== --- linuxfirmwarekit/libstandalone.c (revision 137) +++ linuxfirmwarekit/libstandalone.c (revision 218) @@ -30,27 +30,11 @@ #include "biostest.h" -GList *boot_dmesg = NULL; +GList *boot_dmesg = NULL; /* Holds dmesg info, accessed by standalone tests */ +GList *ssdt[MAX_SSDTS]; /* Holds DSDT and SSDT tables, accessed by stndaln tests */ -static void local_get_dmesg_buffer(void) -{ - char line [4096]; - FILE *file; - - memset(line, 0, 4096); - - file = fopen("/tmp/boot_dmesg", "r"); - if (!file) - return; - while (!feof(file)) { - if (fgets(line, 4095, file)==NULL) - break; - boot_dmesg = g_list_append(boot_dmesg, strdup(line)); - } - fclose(file); -} - +/* encode the output of the test results from ascii to hex */ static char *encode(char *string) { char *buf; @@ -84,8 +68,6 @@ char *test_id = encode(testID); char *_name = encode(name); char *_description = encode(description); - if (!boot_dmesg) - local_get_dmesg_buffer(); fprintf(stdout, "S %s %s %s\n", test_id, _name, _description); free(test_id); free(_name); @@ -160,9 +142,123 @@ fflush(stdout); } + +/* Obtains the dmesg kernel buffer. The boot_dmesg here is usually + * accessed by standalone tests (i.e. *.exe) */ void load_boot_dmesg_buffer(void) { - if (!boot_dmesg) - local_get_dmesg_buffer(); + char line [4096]; + FILE *file; + + if(boot_dmesg != NULL) + return; + + memset(line, 0, 4096); + + /* First, try to access the tmp dmesg output that + * get_dmesg_buffer() created. If it doesn't exist, + * we're in standlone mode, and we should access + * the local dmesg file. */ + if (access(DMESG_FILE, R_OK)) + file = fopen(DMESG_LOCAL_FILE, "r"); + else + file = fopen(DMESG_FILE, "r"); + + if (!file) + return; + + while (!feof(file)) { + if (fgets(line, 4095, file)==NULL) + break; + boot_dmesg = g_list_append(boot_dmesg, strdup(line)); + } + + fclose(file); } +void load_dsdt_ssdts(void) { + + int ret, i; + static int current_ssdt = 0; + char cmd_prefix[1024]; + char command[4096]; + char line[4096]; + char filen[1024]; + FILE *file; + + + /* First, find plugins/ directory where acpi tools (acpidump, acpixtract, etc.) + * are located (should exist after compiling "acpicompile" plugin). + * Since we're standalone, we could be called from a few different + * places. */ + if (access("plugins", R_OK)) + sprintf(cmd_prefix, "../plugins/"); + else + sprintf(cmd_prefix, "plugins/"); + + /* create hex-dump format of all acpi tables in file 'acpi.dump' */ + sprintf(command, "%sacpidump > acpi.dump &> /dev/null", cmd_prefix); + system(command); + if (access("acpi.dump", R_OK)) + fprintf(stderr,"WARN (acpidump): failed to create acpi.dump.\n"); + + /* use 'acpidump' file to extract dsdt and ssdt tables + * in binary format, creates DSDT.dat and SSDT*.dat */ + sprintf(command, "%sacpixtract acpi.dump &> /dev/null", cmd_prefix); + system(command); + if (access("DSDT.dat", R_OK)) { + ret = system("cat /proc/acpi/dsdt > DSDT.dat"); + if (ret != EXIT_SUCCESS) { + fprintf(stderr,"WARN (acpixtract): failed to create DSDT.dat.\n"); + return; + } + } + + /* Disassemble DSDT.dat with iasl, will create DSDT.dsl */ + sprintf(command, "%siasl -d DSDT.dat &>/dev/null", cmd_prefix); + system(command); + file = fopen("DSDT.dsl", "r"); + if (!file) + fprintf(stderr,"WARN (iasl): failed to create DSDT.dsl.\n"); + + /* Save the contents of the dsdt in our list */ + while (!feof(file)) { + if (fgets(line, 4095, file)==NULL) + break; + ssdt[current_ssdt] = g_list_append(ssdt[current_ssdt], strdup(line)); + } + fclose(file); + current_ssdt++; + + + /* Now extract the acpi tables for external symbol resolution + * (if they exist, should use SSDT{1-9}.dat to create SSDT{1-9}.dsl) */ + for(i=0;i/dev/null", cmd_prefix, filen); + system(command); + + strcat(filen, ".dsl"); + file = fopen(filen, "r"); + if (!file) + break; + + /* Save the contents of the ssdt in our list */ + while (!feof(file)) { + if (fgets(line, 4095, file)==NULL) + break; + ssdt[current_ssdt] = g_list_append(ssdt[current_ssdt], strdup(line)); + } + fclose(file); + current_ssdt++; + } + + /* current iasl has an issue with arugment counts in SSDT's, work around this */ + system("sed -i -e \"s/^ACPI Error.*Argument count mismatch for method.*//g\" SSDT*.dsl &> /dev/null"); + +} + Index: linuxfirmwarekit/fan/fan.c =================================================================== --- linuxfirmwarekit/fan/fan.c (revision 137) +++ linuxfirmwarekit/fan/fan.c (revision 218) @@ -37,59 +37,80 @@ #include +/* For each fan present, report its current state */ static void do_fan(char *dir, char *name) { FILE *file; - char path[PATH_MAX]; - char uri[1024]; - char *state = NULL; + char path[PATH_MAX]; /* fan's directory */ + char uri[1024]; + char buffer[4096]; /* holds contents of fan's 'state' file */ + char *state = NULL; /* current state of the fan */ if (dir==NULL) return; + /* Open the fan's 'state' directory */ sprintf(path, "%s/state", dir); file = fopen(path, "r"); if (file == NULL) { - report_result("fan", FAIL, "Fan present but undersupported", path, NULL); + report_result("fan", WARN, "Fan present but undersupported - no state present", path, NULL); return; } + + /* Grep for its current state */ + if (fgets(buffer, 4095, file) == NULL) { + report_result("fan", WARN, "Fan present but undersupported - no status information in state file", path, NULL); + return; + } fclose(file); - sprintf(path,"\\_SB.%s",name); - AML_to_uri(path, uri); - sprintf(path,"Fan %s is currently in state %s", name, state); - report_result("fan", INFO, path, NULL, uri); - - free(state); + state = strstr(buffer,"status:"); + if(state == NULL) { + report_result("fan", WARN, "Fan present but undersupported - status format not recognized", path, NULL); + return; + } + state += 8; + while((state[0] == ' ') && (state[0] != '\n')) + state++; + chop_newline(state); - } + sprintf(buffer,"Fan %s status is: %s", name, state); + report_result("fan", PASS, buffer, NULL, NULL); +} + int main(int argc, char **argv) { DIR *dir; struct dirent *entry; + int fandir = 0; - /* --TO DO: Full description-- */ start_test("fan", "Fan tests", "This test reports how many fans there are in the system. " - "It also checks for the states of the fan."); + "It also checks for the current status of the fan(s)."); - /* --TO DO: analyse /proc/acpi/thermal_zone-- */ dir = opendir("/proc/acpi/fan/"); if (!dir) { - report_result("fan", INFO, "No fan information present", NULL, NULL); - return 0; + report_result("fan", WARN, "No fan information present", NULL, NULL); + goto out; } + /* For each fan listed, print out the result of its current state */ do { char fanpath[2048]; entry = readdir(dir); if (entry && strlen(entry->d_name)>2) { sprintf(fanpath, "/proc/acpi/fan/%s", entry->d_name); do_fan(fanpath, entry->d_name); + fandir++; } } while (entry); + /* Directory /proc/acpi/fan/. contains no sub-dirs */ + if(fandir == 0) + report_result("fan", WARN, "No fan information present", NULL, NULL); + +out: finish_test("fan"); - return 0; + return EXIT_SUCCESS; } Index: linuxfirmwarekit/fan/fan.info =================================================================== --- linuxfirmwarekit/fan/fan.info (revision 0) +++ linuxfirmwarekit/fan/fan.info (revision 218) @@ -0,0 +1 @@ +link ../Documentation/TestsInfo/fan.info \ No newline at end of file Property changes on: linuxfirmwarekit/fan/fan.info ___________________________________________________________________ Name: svn:special + * Index: linuxfirmwarekit/SUN/SUN.c =================================================================== --- linuxfirmwarekit/SUN/SUN.c (revision 0) +++ linuxfirmwarekit/SUN/SUN.c (revision 218) @@ -0,0 +1,288 @@ +/* + * Copyright (C) 2006, Intel Corporation + * + * This file is part of the Linux-ready Firmware Developer Kit + * + * This program file is free software; you can redistribute it and/or modify it + * under the terms of the GNU Lesser General Public License as published by the + * Free Software Foundation;version 2.1 of the License. + * + * This library is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License + * for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program in a file named COPYING; if not, write to the + * Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, + * Boston, MA 02110-1301 USA + */ + +#include +#include +#include +#include +#include + +#include + +#include +#include + +#include + +struct SUN_line { + char SUN_hexnum[5]; /* _SUN hex id (e.g. 0x01) */ + int line_num; /* line # in dsdt where Name (_SUN,...) occurs */ +}; + +#define MAX_SUNS 32 +struct SUN_line SUN_list[MAX_SUNS]; + +extern GList *ssdt[]; +extern void load_dsdt_ssdts(); + +static int lineno; +int current_SUN; + + +/* find a certain line in the given dsdt table + * that we represented in the linked-list (ssdt) */ +static char *find_line(int nr) { + GList *list; + + list = g_list_nth(ssdt[0], nr-1); + if(list->data) + return (char *) list->data; + else + return NULL; +} + +/* do_SUN_check() -- check for duplicate hard-coded _SUNs + * + * Parameters + * void + * Returns + * void +*/ +void do_SUN_check() { + + struct SUN_hash { + char SUN_id[5]; /* SUN hex id (e.g. 0x01) */ + int SUN_list_linenums[MAX_SUNS]; /* array of line #s that use this SUN id */ + int list_ptr; /* ptr for SUN_list_linenums to track + how many line #s exist that use this _SUN */ + } SUN_hash_list[MAX_SUNS]; /* hash table indexed by a _SUN id that holds + how many AML Name functions use a certain + _SUN id */ + + int testres = PASS; + int hash_ptr=0; + int i; + + /* Initialize struct values */ + for(i = 0;i < MAX_SUNS;i++) { + SUN_hash_list[i].SUN_id[0] = '\0'; + SUN_hash_list[i].list_ptr = 0; + } + + /* Add our first table entry */ + i=0; + strcpy(SUN_hash_list[0].SUN_id, SUN_list[0].SUN_hexnum); + SUN_hash_list[0].SUN_list_linenums[0] = SUN_list[0].line_num; + SUN_hash_list[0].list_ptr = 1; + i++; + + /* go through our list of Name (_SUN,..) calls and identify + * any duplicates (this list was compiled in parse_dsdt() + * with add_SUN_name() and is contained in SUN_list[]) */ + while(SUN_list[i].line_num) { + int j = 0; + int k = 0; + int dup = 0; + + /* Compare this _SUN with our hash table, see if we have dups */ + for(k = hash_ptr;k>-1;k--) { + /* We have a dup., add to correct hash index */ + if(strcmp(SUN_list[i].SUN_hexnum, SUN_hash_list[j].SUN_id) == 0) { + int cur_ptr = SUN_hash_list[j].list_ptr; + + strcpy(SUN_hash_list[j].SUN_id, SUN_list[i].SUN_hexnum); + SUN_hash_list[j].SUN_list_linenums[cur_ptr] = SUN_list[i].line_num; + SUN_hash_list[j].list_ptr++; + + dup = 1; + break; + } + j++; + } + + /* No dup., create new hash index */ + if(dup == 0) { + hash_ptr++; + strcpy(SUN_hash_list[hash_ptr].SUN_id, SUN_list[i].SUN_hexnum); + SUN_hash_list[hash_ptr].SUN_list_linenums[0] = SUN_list[i].line_num; + SUN_hash_list[hash_ptr].list_ptr++; + } + + + i++; + } + + /* Now go through our hash table and report a warning for every + * duplicate we've encountered */ + i=0; + while(SUN_hash_list[i].list_ptr != 0) { + int j, tmp_num; + char reportmsg[4096]; + char *details; + char* dsdt_line; + + if(SUN_hash_list[i].list_ptr > 1) { + + testres = WARN; + sprintf(reportmsg,"Duplicate hardcoded _SUN \'%s\' found:\n\n", + SUN_hash_list[i].SUN_id); + details = strdup(""); + details = scatprintf(details,"%s",reportmsg); + + for(j=0;j < SUN_hash_list[i].list_ptr;j++) { + + tmp_num = SUN_hash_list[i].SUN_list_linenums[j]; + dsdt_line = find_line(tmp_num); + if(dsdt_line) { + details = scatprintf(details,"At line #%d of DSDT.dsl\n", + tmp_num); + details = scatprintf(details,">>> %s\n", dsdt_line); + } + + } + + report_result("SUN", testres, reportmsg, details, NULL); + } + i++; + } + + if(testres == PASS) { + report_result("SUN", testres, + "Tested _SUN ids, successfully found no duplicates", NULL, NULL); + } +} + +/* add_SUN_name() -- Add a _SUN Name occurance to our list + * (i.e. Name (_SUN, 0x..)) + * + * Parameters + * line - name of table to compile with iasl (usually dsdt.dsl) + * current_SUN - current index for SUN_list[] + * line_no - line # in dsdt where this occurs + * Returns + * void +*/ +void add_SUN_name(char *line, int current_SUN, int line_no) { + + char tline[4096]; + char *x; + + /* So we don't mess with the 'real' line */ + strcpy(tline, line); + x = tline; + + /* Skip , and ' ' until we have the + * the beginning of a hex num (0x..), then + * chop the newline and last chars until we reach ')' + * to get the pure hex num */ + while(*x != '0') + x++; + + chop_newline(x); + while(x[strlen(x) -1] != ')') + chop_lastchar(x); + chop_lastchar(x); + + /* add to our _SUN list */ + SUN_list[current_SUN].line_num = line_no; + strcpy(SUN_list[current_SUN].SUN_hexnum, x); +} + +/* parse_SUN_name () -- parses a dsdt line for the Name method + * using the _SUN parameter i.e the line + * "Name (_SUN" then adds the + * found hex SUN id in our SUN_list. + * + * Parameters + * gpointer data, gpointer user_data + * Returns + * void +*/ + +static void parse_SUN_name(gpointer data, gpointer user_data) +{ + char *line = (char *) data; + char name[256]; + char *c; + lineno++; + + memset(name, 0, 256); + + /* We hit a Name label (looking for _SUN) */ + c = strstr(line, "Name ("); + if (c) { + c+=6; + while (*c) { + if (*c!=')' && *c!=',') + name[strlen(name)]=*c; + else + break; + c++; + } + + if(strcmp(name, "_SUN") == 0) { + add_SUN_name(&c[0], current_SUN, lineno); + current_SUN++; + } + } + +} + +/* main() -- Parses the DSDT for the Name (_SUN, ...) method, and + * ensures that we do not have any duplicate SUN ids + * (Slot Unique Number). + * + * Parameters + * argc & argv + * Returns + * EXIT_SUCCESS upon success of running this plugin + * EXIT_FAILURE upon failure of running this plugin +*/ + +int main(int argc, char **argv) +{ + + start_test("SUN", "SUN duplicate test", + "This makes sure that each SUN (Slot Unique Number) that is " + "called in the DSDT through the Name() method is unique, no " + "duplicates should be found." + ); + + /* Get the dsdt and ssdt tables */ + load_dsdt_ssdts(); + report_testrun_progress(30); + + /* Get all the SUNs used in method Name(_SUN,0x..) */ + lineno = 0; + current_SUN = 0; + if (ssdt[0] != NULL) + g_list_foreach(ssdt[0], parse_SUN_name, NULL); + else + fprintf(stderr, "WARN: No DSDT found.\n"); + report_testrun_progress(60); + + /* List SUN duplicates (if any) */ + do_SUN_check(); + + finish_test("SUN"); + return EXIT_SUCCESS; +} + Index: linuxfirmwarekit/SUN/Makefile =================================================================== --- linuxfirmwarekit/SUN/Makefile (revision 0) +++ linuxfirmwarekit/SUN/Makefile (revision 218) @@ -0,0 +1,26 @@ +override CFLAGS += -I.. -fPIC `pkg-config --cflags glib-2.0` +LDFLAGS = `pkg-config --libs glib-2.0` -L.. -lstandalone -lm + + +all: SUN.exe + +SUN.exe: SUN.o .depend + gcc SUN.o $(LDFLAGS) -o SUN.exe + cp SUN.exe ../plugins + +clean: + rm -rf *~ *.o + rm -rf *.dat *.dsl acpi.dump + rm -f SUN.exe + +# most of the makefile remains as it was before. +# at the bottom, we add these lines: + +# rule for building dependency lists, and writing them to a file +# named ".depend". +.depend: + rm -f .depend + gccmakedep -f- -- $(CFLAGS) -- *.c > .depend + +# now add a line to include the dependency list. +include .depend Index: linuxfirmwarekit/bashshell/bashshell.info =================================================================== --- linuxfirmwarekit/bashshell/bashshell.info (revision 0) +++ linuxfirmwarekit/bashshell/bashshell.info (revision 218) @@ -0,0 +1 @@ +link ../Documentation/TestsInfo/bashshell.info \ No newline at end of file Property changes on: linuxfirmwarekit/bashshell/bashshell.info ___________________________________________________________________ Name: svn:special + * Index: linuxfirmwarekit/cpufreq/cpufreq.info =================================================================== --- linuxfirmwarekit/cpufreq/cpufreq.info (revision 0) +++ linuxfirmwarekit/cpufreq/cpufreq.info (revision 218) @@ -0,0 +1 @@ +link ../Documentation/TestsInfo/cpufreq.info \ No newline at end of file Property changes on: linuxfirmwarekit/cpufreq/cpufreq.info ___________________________________________________________________ Name: svn:special + * Index: linuxfirmwarekit/cpufreq/cpufreq.c =================================================================== --- linuxfirmwarekit/cpufreq/cpufreq.c (revision 137) +++ linuxfirmwarekit/cpufreq/cpufreq.c (revision 218) @@ -232,6 +232,26 @@ return buffer; } + + +static unsigned long long get_claimed_hz(int cpunr) +{ + FILE *file; + char path[PATH_MAX]; + unsigned long long value; + sprintf(path, "/sys/devices/system/cpu/cpu%i/cpufreq/scaling_max_freq",cpunr); + file = fopen(path, "r"); + if (!file) + return 0; + if (!fgets(path, PATH_MAX, file)) { + fclose(file); + return 0; + } + value = strtoull(path, NULL, 10); + fclose(file); + return value; +} + static void do_cpu(int cpunr) { char path[PATH_MAX]; @@ -243,6 +263,7 @@ int speedcount; static int warned=0; char *details = NULL; + int warned_PSS = 0; memset(freqs, 0, sizeof(freqs)); memset(line, 0, 4096); @@ -331,6 +352,12 @@ sprintf(outbuf, "Supposedly higher frequency is slower on CPU %i!", cpunr); report_result("cpufreq", FAIL, outbuf, details,NULL); } + if (freqs[i].Hz > get_claimed_hz(cpunr) && !warned_PSS) { + char outbuf[4096]; + warned_PSS = 1; + sprintf(outbuf, "Frequency %i not achievable; _PSS limit of %i in effect?", freqs[i].Hz, get_claimed_hz(cpunr)); + report_result("cpufreq", WARN, outbuf, NULL, NULL); + } } free(details); Index: linuxfirmwarekit/tonetest/tonetest.info =================================================================== --- linuxfirmwarekit/tonetest/tonetest.info (revision 0) +++ linuxfirmwarekit/tonetest/tonetest.info (revision 218) @@ -0,0 +1 @@ +link ../Documentation/TestsInfo/tonetest.info \ No newline at end of file Property changes on: linuxfirmwarekit/tonetest/tonetest.info ___________________________________________________________________ Name: svn:special + * Index: linuxfirmwarekit/acpitable.c =================================================================== --- linuxfirmwarekit/acpitable.c (revision 137) +++ linuxfirmwarekit/acpitable.c (revision 218) @@ -47,7 +47,7 @@ */ -unsigned long RSDP_ADDRESS; /* filled in by the dmesg parser */ +unsigned long RSDP_ADDRESS; /* filled in by the dmesg parser in e820.c */ static unsigned long rsdt; static unsigned long xsdt; @@ -82,6 +82,7 @@ #define PAGE_MASK (~(getpagesize()-1)) #define PAGE_OFFSET_MASK (getpagesize()-1) + static unsigned char checksum(unsigned char *ptr, int size) { unsigned char sum = 0; Index: linuxfirmwarekit/dumpxml.c =================================================================== --- linuxfirmwarekit/dumpxml.c (revision 137) +++ linuxfirmwarekit/dumpxml.c (revision 218) @@ -31,7 +31,7 @@ #include "biostest.h" - +/* Dump all test results in an xml formatted file */ void dump_xml(GList *all_tests, char *filename) { FILE *file; @@ -84,3 +84,92 @@ fprintf(file, "\n"); fclose(file); } + +/* Dump all test results in a text formatted file */ +void dump_text(GList *all_tests, char *filename) +{ + FILE *file; + GList *list1, *list2; + struct major_test *test; + struct detailed_result *result; + int nrtotal, nrpass, nrwarn, nrfail; + + file = fopen(filename, "w"); + if (!file) + return; + + fprintf(file, "-------------------------------------------------\n" + " Date: %s \n" + "* *\n" + "* Firmwarekit (release 2.0) *\n" + "* http://www.linuxfirmwarekit.org *\n" + "* *\n" + "* *\n" + "* For more information on test descriptions *\n" + "* and details on what the PASS/INFO/WARN/FAIL *\n" + "* results mean, go to: Documentation/TestsInfo. *\n" + "* *\n" + "-------------------------------------------------\n\n", + get_time_stamp()); + + + list1 = g_list_first(all_tests); + + /* Firt get summary of test report */ + nrtotal = 0; + nrpass = 0; + nrfail = 0; + nrwarn = 0; + + while (list1) { + test = (struct major_test *)list1->data; + + nrtotal++; + switch (test->result) { + case PASS: + case INFO: + nrpass++; + break; + case WARN: + nrwarn++; + break; + case FAIL: + nrfail++; + break; + } + + list1 = g_list_next(list1); + } + fprintf(file, "SUMMARY: %d Fails, %d Warns, %d Pass, %d Total\n\n", + nrfail, nrwarn, nrpass, nrtotal); + + list1 = g_list_first(all_tests); + while (list1) { + test = (struct major_test *)list1->data; + + + fprintf(file, "=================================================\n" + "* Plugin name: %s\n\n" + "* Title: %s\n" + "* Description: %s\n" + "* Result: %s\n" + "================================================\n\n", + test->ID, test->name, test->description->details, + result_to_ascii(test->result)); + + + list2 = g_list_first(test->details); + while (list2) { + result = (struct detailed_result*)list2->data; + + fprintf(file, "[%s]-%s\n\n", result_to_ascii(result->result), + result->summary); + if (result->details) + fprintf(file, "%s\n\n", result->details); + + list2 = g_list_next(list2); + } + list1 = g_list_next(list1); + } + fclose(file); +} Index: linuxfirmwarekit/Documentation/Build.env =================================================================== --- linuxfirmwarekit/Documentation/Build.env (revision 0) +++ linuxfirmwarekit/Documentation/Build.env (revision 218) @@ -0,0 +1,1401 @@ +============================================ + Linux-ready firmware developer kit: + BUILD ENV +=========================================== + +Description: +============ +An example build environment that we use to build our code. +It is not necessary to duplicate this environment, but good to know the package versions, etc. for those who are building the code on their own environments. + + + +Linux version 2.6.15-27-386 (buildd@terranova) (gcc version 4.0.3 (Ubuntu 4.0.3-1ubuntu5)) #1 PREEMPT Sat Sep 16 01:51:59 UTC 2006 + +||/ Name Version Description ++++-======================================-======================================-============================================ +acpi 0.09-1 displays information on ACPI devices +acpi-support 0.85 a collection of useful events for acpi +acpid 1.0.4-1ubuntu11 Utilities for using ACPI power management +adduser 3.80ubuntu2 Add and remove users and groups +alacarte 0.8-0ubuntu12 easy menu editing +alsa-base 1.0.10-4ubuntu4 ALSA driver configuration files +alsa-utils 1.0.10-1ubuntu14 ALSA utilities +anacron 2.3-11ubuntu2 a cron-like program that doesn't go by time +apmd 3.2.2-3ubuntu2 Utilities for Advanced Power Management (APM +app-install-data 0.1.33 GNOME Application Installer (data files) +app-install-data-commercial 5 Application Installer (data files for commer +appres 1.0.0-0ubuntu1 X client - appres +apt 0.6.43.3ubuntu2 Advanced front-end for dpkg +apt-utils 0.6.43.3ubuntu2 APT utility programs +aptitude 0.4.0-5ubuntu3 terminal-based apt frontend +aspell 0.60.4-2 GNU Aspell spell-checker +aspell-en 6.0-0-5 English dictionary for GNU Aspell +at 3.1.9ubuntu3 Delayed job execution and batch processing +at-spi 1.7.7-0ubuntu3 Assistive Technology Service Provider Interf +rc base-config 2.67ubuntu19 Debian base system configurator +base-files 3.1.9ubuntu7.1 Debian base system miscellaneous files +base-passwd 3.5.11 Debian base system master password and group +bash 3.1-2ubuntu10 The GNU Bourne Again SHell +bc 1.06-19ubuntu1 The GNU bc arbitrary precision calculator la +beforelight 1.0.1-0ubuntu1 X client - beforelight +belocs-locales-bin 2.3.5-5ubuntu7 tools for compiling locale data files +bicyclerepair 0.9-4ubuntu1 A refactoring tool for python +bind9-host 9.3.2-2ubuntu1.1 Version of 'host' bundled with BIND 9.X +binutils 2.16.1cvs20060117-1ubuntu2.1 The GNU assembler, linker and binary utiliti +binutils-static 2.16.1cvs20060117-1ubuntu2.1 statically linked binutils tools +bison 2.1-0.2ubuntu1 A parser generator that is compatible with Y +bitmap 1.0.1-0ubuntu2 X client - bitmap +bittorrent 3.4.2-6ubuntu2 Scatter-gather network file transfer +blt 2.4z-3ubuntu1 the BLT extension library for Tcl/Tk - run-t +bluez-cups 2.24-0ubuntu6 Bluetooth printer driver for CUPS +bluez-pcmcia-support 2.24-0ubuntu6 PCMCIA support files for BlueZ 2.0 Bluetooth +bluez-pin 0.25-1ubuntu2 Bluetooth PIN helper with D-BUS support +bluez-utils 2.24-0ubuntu6 Bluetooth tools and daemons +bogofilter 1.0.1-1ubuntu1 a fast Bayesian spam filter (dummy package) +bogofilter-bdb 1.0.1-1ubuntu1 a fast Bayesian spam filter (Berkeley DB) +bogofilter-common 1.0.1-1ubuntu1 a fast Bayesian spam filter (common files) +brltty 3.7.2-2ubuntu3 Access software for a blind person using a s +brltty-x11 3.7.2-2ubuntu3 Access software for a blind person using a s +bsdmainutils 6.1.2ubuntu1 collection of more utilities from FreeBSD +bsdutils 2.12r-4ubuntu6 Basic utilities from 4.4BSD-Lite +bsh 2.0b4-2ubuntu2 Java scripting environment (BeanShell) Versi +bug-buddy 2.14.0-0ubuntu3 GNOME Desktop Environment bug reporting tool +busybox-initramfs 1.01-4ubuntu3 Standalone shell setup for initramfs +bzip2 1.0.3-0ubuntu2 high-quality block-sorting file compressor - +ca-certificates 20050804 Common CA Certificates PEM files +capplets-data 2.14.2-0ubuntu1 configuration applets for GNOME 2 - data fil +cdparanoia 3a9.8-11 An audio extraction tool for sampling CDs. +cdrdao 1.2.1-2ubuntu1 Disk-At-Once (DAO) recording of audio and da +cdrecord 2.01+01a01-4ubuntu6 command line CD writing tool +console-common 0.7.55 Basic infrastructure for text console config +console-data 2002.12.04dbs-52.1ubuntu9 Keymaps, fonts, charset maps, fallback table +console-tools 0.2.3dbs-60ubuntu3 Linux console and font utilities +contact-lookup-applet 0.14-0ubuntu1 contact lookup applet for GNOME +coreutils 5.93-5ubuntu4 The GNU core utilities +cpio 2.6-10ubuntu0.2 GNU cpio -- a program to manage archives of +cpp 4.0.3-1 The GNU C preprocessor (cpp) +cpp-3.3 3.3.6-10 The GNU C preprocessor +cpp-4.0 4.0.3-1ubuntu5 The GNU C preprocessor +cron 3.0pl1-92ubuntu1 management of regular background processing +cupsys 1.2.2-0ubuntu0.6.06 Common UNIX Printing System(tm) - server +cupsys-bsd 1.2.2-0ubuntu0.6.06 Common UNIX Printing System(tm) - BSD comman +cupsys-client 1.2.2-0ubuntu0.6.06 Common UNIX Printing System(tm) - client pro +cupsys-driver-gimpprint 5.0.0~rc2-0ubuntu6 printer drivers for CUPS +cupsys-driver-gutenprint 5.0.0~rc2-0ubuntu6 printer drivers for CUPS +dash 0.5.3-1ubuntu1 The Debian Almquist Shell +db4.2-util 4.2.52-24build1 Berkeley v4.2 Database Utilities +dbus 0.60-6ubuntu8 simple interprocess messaging system +dbus-1-utils 0.60-6ubuntu8 simple interprocess messaging system (utilit +dc 1.06-19ubuntu1 The GNU dc arbitrary precision reverse-polis +debconf 1.4.72ubuntu9 Debian configuration management system +debconf-i18n 1.4.72ubuntu9 full internationalization support for debcon +debconf-utils 1.4.72ubuntu9 debconf utilities +debhelper 5.0.7ubuntu13 helper programs for debian/rules +debianutils 2.15.2 Miscellaneous utilities specific to Debian +defoma 0.11.8ubuntu2 Debian Font Manager -- automatic font config +deskbar-applet 2.14.2-0ubuntu1 Gnome panel applet that is similar to Google +desktop-file-utils 0.10-1ubuntu13 Utilities for .desktop files +devscripts 2.9.10 Scripts to make the life of a Debian Package +dhcp3-client 3.0.3-6ubuntu7 DHCP Client +dhcp3-common 3.0.3-6ubuntu7 Common files used by all the dhcp3* packages +dictionaries-common 0.62.5ubuntu2 Common utilities for spelling dictionary too +diff 2.8.1-11ubuntu3 File comparison utilities +discover1 1.7.15ubuntu1 hardware identification system +discover1-data 1.2005.11.25ubuntu9 hardware lists for libdiscover1 +diveintopython 5.4-2ubuntu1 free Python book for experienced programmers +dmidecode 2.7-3 Dump Desktop Management Interface data +dmsetup 1.02.05-1ubuntu1 The Linux Kernel Device Mapper userspace lib +dnsutils 9.3.2-2ubuntu1.1 Clients provided with BIND +doc-base 0.7.20ubuntu7 utilities to manage online documentation +doc-debian 3.1.2 Debian Project documentation, Debian FAQ and +docbook-xml 4.4-4 standard XML documentation system, for softw +dosfstools 2.11-2.1ubuntu1 Utilities to create and check MS-DOS FAT fil +dpkg 1.13.11ubuntu6 package maintenance system for Debian +dpkg-awk 1.0.1.0.0.1 Gawk script to parse /var/lib/dpkg/{status,a +dpkg-cross 1.26 tools for cross compiling Debian packages +dpkg-dev 1.13.11ubuntu6 package building tools for Debian +dselect 1.13.11ubuntu6 user tool to manage Debian packages +dvd+rw-tools 5.21.4.10.8-4ubuntu1 DVD+-RW/R tools +dvdauthor 0.6.11-3 create DVD-Video file system +e2fslibs 1.38-2ubuntu2 ext2 filesystem libraries +e2fsprogs 1.38-2ubuntu2 ext2 file system utilities and libraries +ed 0.2-20 The classic unix line editor +editres 1.0.1-0ubuntu1 X client - editres +eject 2.0.13deb-18ubuntu4 ejects CDs and operates CD-Changers under Li +ekiga 2.0.1-0ubuntu6 Free Your Speech +eog 2.14.3-0ubuntu1 Eye of Gnome graphics viewer program +esound 0.2.36-3ubuntu3 Enlightened Sound Daemon - Support binaries +esound-common 0.2.36-3ubuntu3 Enlightened Sound Daemon - Common files +esvn 0.6.11+1-2 frontend for the Subversion revision system +ethtool 3-1 Display or change ethernet card settings +evince 0.5.2-0ubuntu3 Document (postscript, pdf) viewer +evms 2.5.4-5ubuntu6 Enterprise Volume Management System (core) +evms-ncurses 2.5.4-5ubuntu6 Enterprise Volume Management System (ncurses +evolution 2.6.1-0ubuntu7 The groupware suite +evolution-data-server 1.6.1-0ubuntu5 evolution database backend server +evolution-exchange 2.6.1-0ubuntu2 Exchange plugin for the Evolution groupware +evolution-plugins 2.6.1-0ubuntu7 All bundled plugins for Evolution +evolution-webcal 2.6.0-0ubuntu1 webcal: URL handler for GNOME and Evolution +example-content 21 Ubuntu example content +fakeroot 1.5.6ubuntu2 Gives a fake root environment +fastjar 4.1.0-1ubuntu8 Jar creation utility +fdutils 5.5-20050303-2 Linux floppy utilities +festival 1.4.3-17.1ubuntu1 general multi-lingual speech synthesis syste +festlex-cmu 1.4.0-6 CMU dictionary for Festival +festlex-poslex 1.4.0-5 Part of speech lexicons and ngram from Engli +festvox-kallpc16k 1.4.0-5 American English male speaker for festival, +fetchmail 6.3.2-2ubuntu2 SSL enabled POP3, APOP, IMAP mail gatherer/f +ffmpeg 0.cvs20050918-5ubuntu1.1 multimedia player, server and encoder +file 4.16-0ubuntu3 Determines file type using "magic" numbers +file-roller 2.14.4-0ubuntu1 an archive manager for GNOME +findutils 4.2.27-1ubuntu1 utilities for finding files--find, xargs, an +finger 0.17-9 user information lookup program +firefox 1.5.dfsg+1.5.0.7-ubuntu0.6.06 lightweight web browser based on Mozilla +firefox-gnome-support 1.5.dfsg+1.5.0.7-ubuntu0.6.06 Support for Gnome in Mozilla Firefox +flex-old 2.5.4a-7 The old version of the fast lexical analyzer +fontconfig 2.3.2-1.1ubuntu12 generic font configuration library +foo2zjs 20051220dfsg-1 Support for printing to ZjStream-based print +foomatic-db 20060408-1ubuntu1 linuxprinting.org printer support - database +foomatic-db-engine 3.0.2-20060318-1ubuntu1 linuxprinting.org printer support - programs +foomatic-db-gimp-print 5.0.0~rc2-0ubuntu6 linuxprinting.org printer support - database +foomatic-db-gutenprint 5.0.0~rc2-0ubuntu6 linuxprinting.org printer support - database +foomatic-db-hpijs 1.5-20060318-1 linuxprinting.org printer support - database +foomatic-filters 3.0.2-20060318-2 linuxprinting.org printer support - filters +foomatic-filters-ppds 20060406-0ubuntu1 linuxprinting.org printer support - prebuilt +fortune-mod 1.99.1-3 provides fortune cookies on demand +fortunes-min 1.99.1-3 Data files containing fortune cookies +fping 2.4b2-to-ipv6-13 sends ICMP ECHO_REQUEST packets to network h +freeglut3 2.4.0-4 OpenGL Utility Toolkit +fstobdf 1.0.1-0ubuntu1 X client - fstobdf +ftp 0.17-16 The FTP client +g++ 4.0.3-1 The GNU C++ compiler +g++-4.0 4.0.3-1ubuntu5 The GNU C++ compiler +gaim 1.5.0+1.5.1cvs20051015-1ubuntu10 multi-protocol instant messaging client +gaim-data 1.5.0+1.5.1cvs20051015-1ubuntu10 multi-protocol instant messaging client - da +gamin 0.1.7-2ubuntu1 File and directory monitoring system +gawk 3.1.5-2build1 GNU awk, a pattern scanning and processing l +gcalctool 5.7.32-0ubuntu1 A GTK2 desktop calculator +gcc 4.0.3-1 The GNU C compiler +gcc-3.3-base 3.3.6-10 The GNU Compiler Collection (base package) +gcc-4.0 4.0.3-1ubuntu5 The GNU C compiler +gcc-4.0-base 4.0.3-1ubuntu5 The GNU Compiler Collection (base package) +gcc-4.0-doc 4.0.3-1ubuntu5 Documentation for the GNU compilers (gcc, go +gcc-doc 4.0.3-1 Documentation for the GNU C compilers (gcc, +gcj-4.0-base 4.0.3-1ubuntu4 The GNU Compiler Collection (gcj base packag +gcj-4.1-base 4.1.0-1ubuntu8 The GNU Compiler Collection (gcj base packag +gconf-editor 2.14.0-0ubuntu3 An editor for the GConf configuration system +gconf2 2.14.0-1ubuntu2 GNOME configuration database system (support +gconf2-common 2.14.0-1ubuntu2 GNOME configuration database system (common +gdb 6.4-1ubuntu5.1 The GNU Debugger +gdebi 0.1.4ubuntu13 Simple tool to install deb files +gdm 2.14.10-0ubuntu1 GNOME Display Manager +gedit 2.14.4-0ubuntu1 light-weight text editor +gedit-common 2.14.4-0ubuntu1 light-weight text editor support files +gettext 0.14.5-2ubuntu3 GNU Internationalization utilities +gettext-base 0.14.5-2ubuntu3 GNU Internationalization utilities for the b +gij 4.1.0-1 The GNU Java bytecode interpreter +gij-4.0 4.0.3-1ubuntu4 The GNU Java bytecode interpreter +gij-4.1 4.1.0-1ubuntu8 The GNU Java bytecode interpreter +gimp 2.2.11-1ubuntu3.1 The GNU Image Manipulation Program +gimp-data 2.2.11-1ubuntu3.1 Data files for The GIMP +gimp-print 5.0.0~rc2-0ubuntu6 print plugin for the GIMP +gimp-python 2.2.11-1ubuntu3.1 Python support and plugins for The GIMP +gksu 1.3.7-0ubuntu9 graphical frontend to su +gnome-about 2.14.3-0ubuntu1 The GNOME about box +gnome-accessibility-themes 2.14.3-0ubuntu1 accessibility themes for the GNOME 2 desktop +gnome-app-install 0.1.33 GNOME Application Installer +gnome-applets 2.14.3-0ubuntu1 Various applets for GNOME 2 panel - binary f +gnome-applets-data 2.14.3-0ubuntu1 Various applets for GNOME 2 panel - data fil +gnome-btdownload 0.0.22-1ubuntu7 Gnome interface for 'executing' BitTorrent f +gnome-control-center 2.14.2-0ubuntu1 utilities to configure the GNOME desktop +gnome-cups-manager 0.31-1.1ubuntu13 CUPS printer admin tool for GNOME +gnome-desktop-data 2.14.3-0ubuntu1 Common files for GNOME 2 desktop apps +gnome-doc-utils 0.6.1-0ubuntu1 a collection of documentation utilities for +gnome-games 2.14.3-0ubuntu1 games for the GNOME desktop +gnome-games-data 2.14.3-0ubuntu1 data files for the GNOME games +gnome-icon-theme 2.14.2-0ubuntu2 GNOME Desktop icon theme +gnome-keyring 0.4.9-1ubuntu1 GNOME keyring services (daemon and tools) +gnome-mag 0.12.5-0ubuntu2 a screen magnifier for the GNOME desktop +gnome-media 2.14.2-0ubuntu1 The GNOME Media Utilities +gnome-menus 2.14.3-0ubuntu1 an implementation of the freedesktop menu sp +gnome-mime-data 2.4.2-1 base MIME and Application database for GNOME +gnome-netstatus-applet 2.12.0-5ubuntu4 Network status applet for GNOME 2 +gnome-nettool 2.14.2-0ubuntu1 network information tool for GNOME +gnome-panel 2.14.3-0ubuntu1 launcher and docking facility for GNOME 2 +gnome-panel-data 2.14.3-0ubuntu1 common files for GNOME 2 panel +gnome-pilot 2.0.13-0ubuntu16 A GNOME applet for management of your Palm P +gnome-pilot-conduits 2.0.13-0ubuntu3 conduits for gnome-pilot +gnome-power-manager 2.14.3-0ubuntu11 Power management policy frontend for GNOME +gnome-screensaver 2.14.3-0ubuntu1 a screen saver and locker +gnome-session 2.14.3-0ubuntu1 The GNOME 2 Session Manager +gnome-spell 1.0.7-1ubuntu1 GNOME/Bonobo component for spell checking +gnome-system-monitor 2.14.3-0ubuntu1 Process viewer and system resource monitor f +gnome-system-tools 2.14.0-0ubuntu11 Cross-platform configuration utilities for G +gnome-terminal 2.14.2-0ubuntu1 The GNOME 2 terminal emulator application +gnome-terminal-data 2.14.2-0ubuntu1 Data files for the GNOME terminal emulator +gnome-themes 2.14.3-0ubuntu1 official themes for the GNOME 2 desktop +gnome-utils 2.14.0-0ubuntu5 GNOME desktop utilities +gnome-volume-manager 1.5.15-0ubuntu10 GNOME daemon to auto-mount and manage media +gnome2-user-guide 2.14.2-0ubuntu1 GNOME 2 User's Guide +rc gnomemeeting 1.2.2-1ubuntu1 The GnomeMeeting Voice Over IP Suite +gnopernicus 1.0.4-0ubuntu3 Screen reader for GNOME 2 +gnupg 1.4.2.2-1ubuntu2.2 GNU privacy guard - a free PGP replacement +gok 1.0.10-1ubuntu1 GNOME Onscreen Keyboard +grep 2.5.1.ds2-4 GNU grep, egrep and fgrep +grepmap 1.1.0-1 Parse module map files produced by depmod +groff-base 1.18.1.1-11 GNU troff text-formatting system (base syste +grub 0.97-1ubuntu9 GRand Unified Bootloader +gs-common 0.3.9ubuntu1 Common files for different Ghostscript relea +gs-esp 8.15.2.dfsg.0ubuntu1-0ubuntu1 The Ghostscript PostScript interpreter - ESP +gsfonts 8.14+v8.11+urw-0.2 Fonts for the Ghostscript interpreter(s) +gsfonts-x11 0.17ubuntu4 Make Ghostscript fonts available to X11 +gstreamer0.10-alsa 0.10.7-0ubuntu5 GStreamer plugin for ALSA +gstreamer0.10-esd 0.10.3-0ubuntu4 GStreamer plugin for ESD +gstreamer0.10-gnomevfs 0.10.7-0ubuntu5 GStreamer plugin for GnomeVFS +gstreamer0.10-plugins-base 0.10.7-0ubuntu5 GStreamer plugins from the "base" set +gstreamer0.10-plugins-base-apps 0.10.7-0ubuntu5 GStreamer helper programs from the "base" se +gstreamer0.10-plugins-good 0.10.3-0ubuntu4 GStreamer plugins from the "good" set +gstreamer0.10-tools 0.10.6-0ubuntu2 Tools for use with GStreamer +gstreamer0.10-x 0.10.7-0ubuntu5 GStreamer plugins for X11 and Pango +gstreamer0.8-alsa 0.8.12-1ubuntu2 ALSA plugin for GStreamer +gstreamer0.8-audiofile 0.8.12-1ubuntu2 AudioFile plugin for GStreamer +gstreamer0.8-cdparanoia 0.8.12-1ubuntu2 cdparanoia plugin for GStreamer +gstreamer0.8-dv 0.8.12-1ubuntu2 DV plugin for GStreamer +gstreamer0.8-dvd 0.8.12-1ubuntu2 DVD plugin for GStreamer +gstreamer0.8-esd 0.8.12-1ubuntu2 Enlightened Sound Daemon plugin for GStreame +gstreamer0.8-flac 0.8.12-1ubuntu2 FLAC plugin for GStreamer +gstreamer0.8-gnomevfs 0.8.12-1ubuntu2 Gnome VFS plugin for GStreamer +gstreamer0.8-gsm 0.8.12-1ubuntu2 GSM plugin for GStreamer +gstreamer0.8-hermes 0.8.12-1ubuntu2 colorspace conversion plugin for GStreamer b +gstreamer0.8-jpeg 0.8.12-1ubuntu2 JPEG plugin for GStreamer +gstreamer0.8-misc 0.8.12-1ubuntu2 Collection of various GStreamer plugins +gstreamer0.8-musepack 0.8.12-1ubuntu2 Musepack (MPC) audio decoder plugin for GStr +gstreamer0.8-oss 0.8.12-1ubuntu2 OSS plugin for GStreamer +gstreamer0.8-plugin-apps 0.8.12-1ubuntu2 Simple GStreamer applications +gstreamer0.8-sdl 0.8.12-1ubuntu2 SDL videosink plugin for GStreamer +gstreamer0.8-speex 0.8.12-1ubuntu2 Speex plugin for GStreamer +gstreamer0.8-theora 0.8.12-1ubuntu2 Theora plugin for GStreamer +gstreamer0.8-tools 0.8.12-1ubuntu1 Tools for use with GStreamer +gstreamer0.8-vorbis 0.8.12-1ubuntu2 Vorbis plugin for GStreamer +gstreamer0.8-x 0.8.12-1ubuntu2 X videosink plugin for GStreamer +gthumb 2.7.6-0ubuntu1 an image viewer and browser +gtk2-engines-clearlooks 2.7.4.is.2.6.10-0ubuntu1 Clearlooks GTK+ 2.x engine and theme +gtk2-engines-crux 2.7.4.is.2.6.10-0ubuntu1 the Crux theme engine for GTK+ 2.x +gtk2-engines-highcontrast 2.7.4.is.2.6.10-0ubuntu1 High contrast GTK+ 2.x theme engine +gtk2-engines-industrial 2.7.4.is.2.6.10-0ubuntu1 'industrial' theme for GTK+ 2.x +gtk2-engines-lighthouseblue 2.7.4.is.2.6.10-0ubuntu1 LighthouseBlue theme for GTK+ 2.x +gtk2-engines-mist 2.7.4.is.2.6.10-0ubuntu1 flat theme for GTK+ 2.x +gtk2-engines-pixbuf 2.8.20-0ubuntu1 Pixbuf-based theme for GTK+ 2.x +gtk2-engines-redmond95 2.7.4.is.2.6.10-0ubuntu1 Windows-like theme for GTK+ 2.x +gtk2-engines-smooth 2.7.4.is.2.6.10-0ubuntu1 Smooth engine for GTK+ 2.x +gtk2-engines-thinice 2.7.4.is.2.6.10-0ubuntu1 the ThinIce theme engine for GTK+ 2.x +gtk2-engines-ubuntulooks 0.9.11-1 'ubuntulooks' theme for GTK+ 2.x +gtkhtml3.8 3.10.3-0ubuntu1 HTML rendering/editing library - bonobo comp +gucharmap 1.6.0-0ubuntu2 Unicode character picker and font browser +guile-1.6-libs 1.6.7-2 Main Guile libraries +gzip 1.3.5-12ubuntu0.1 The GNU compression utility +hal 0.5.7-1ubuntu18 Hardware Abstraction Layer +hal-device-manager 0.5.7-1ubuntu18 Hardware Abstraction Layer user interface +hdparm 6.3-3ubuntu1 tune hard disk parameters for high performan +hermes1 1.3.3+really1.3.2-5 The Hermes pixel-format library +hicolor-icon-theme 0.9-0ubuntu4 default fallback theme for FreeDesktop.org i +hostname 2.91.0ubuntu1 utility to set/show the host name or domain +hotkey-setup 0.1-17 auto-configures laptop hotkeys +rc hotplug 0.0.20040329-22ubuntu13 Linux Hotplug Scripts +hpijs 2.1.7+0.9.7-4ubuntu1 HP Linux Printing and Imaging - gs IJS drive +hplip 0.9.7-4ubuntu1 HP Linux Printing and Imaging System (HPLIP) +rc hplip-base 0.9.5-2ubuntu2 HP Linux Printing and Imaging System - base +hplip-data 0.9.7-4ubuntu1 HP Linux Printing and Imaging - data files +hplip-ppds 0.9.7-4ubuntu1 HP Linux Printing and Imaging - PPD files +html2text 1.3.2a-3 An advanced HTML to text converter +hwdata 0.172-1ubuntu1 hardware identification / configuration data +hwdb-client 0.6-0ubuntu10 client programs for the Ubuntu Hardware Data +iceauth 1.0.1-0ubuntu2 X ICE authentication manipulation +ico 1.0.1-0ubuntu1 X client - ico +rc ifrename 27+28pre8-1ubuntu4 Rename network interfaces based on various s +ifupdown 0.6.7ubuntu7 high level tools to configure network interf +ijsgimpprint 5.0.0~rc2-0ubuntu6 printer drivers for CUPS +ijsgutenprint 5.0.0~rc2-0ubuntu6 inkjet server - Ghostscript driver for Guten +imake 1.0.1-0ubuntu3 C preprocessor-based Makefile build system +info 4.8-4ubuntu0.1 Standalone GNU Info documentation browser +initramfs-tools 0.40ubuntu32 tools for generating an initramfs +initscripts 2.86.ds1-6ubuntu32 Standard scripts needed for booting and shut +inputattach 1.23-0ubuntu1 utility to attach serial devices to the inpu +installation-report 2.12ubuntu1 system installation report +intltool-debian 0.34.1+20050828ubuntu1 Help i18n of RFC822 compliant config files +iproute 20041019-4ubuntu5 Professional tools to control the networking +iptables 1.3.3-2ubuntu4 Linux kernel 2.4+ iptables administration to +iputils-arping 20020927-3ubuntu1 Tool to send ICMP echo requests to an ARP ad +iputils-ping 20020927-3ubuntu1 Tools to test the reachability of network ho +iputils-tracepath 20020927-3ubuntu1 Tools to trace the network path to a remote +irssi 0.8.10-1ubuntu1 terminal based IRC client +irssi-text 0.8.10-1ubuntu1 irssi dummy transition package +iso-codes 0.49-1ubuntu2 ISO language, territory, currency codes and +jackd 0.100.0-4 JACK Audio Connection Kit (server and exampl +java-common 0.24ubuntu2 Base of all Java packages +java-gcj-compat 1.0.56-0ubuntu1 Java runtime environment using GIJ +java-package 0.27 utility for building Java(TM) 2 related Debi +jfsutils 1.1.8-1 utilities for managing the JFS filesystem +k3b 0.12.14-0ubuntu7 A sophisticated KDE CD burning application +rc k3blibs 0.12.2-0ubuntu2 The KDE cd burning application library - run +kcontrol 3.5.2-0ubuntu27 control center for KDE +kdebase-bin 3.5.2-0ubuntu27 core binaries for the KDE base module +kdebase-data 3.5.2-0ubuntu27 shared data files for the KDE base module +kdelibs-bin 3.5.2-0ubuntu18.1 core binaries for all KDE applications +kdelibs-data 3.5.2-0ubuntu18.1 core shared data for all KDE applications +rc kdelibs4c2 3.4.3-0ubuntu2 core libraries for all KDE applications +kdelibs4c2a 3.5.2-0ubuntu18.1 core libraries for all KDE applications +kicker 3.5.2-0ubuntu27 desktop panel for KDE +klibc-utils 1.1.16-1ubuntu5 small statically-linked utilities built with +klogd 1.4.1-17ubuntu7 Kernel Logging Daemon +landscape-client 0.1 Placeholder for the Landscape client +language-pack-en 6.06+20061004 translation updates for language English +language-pack-en-base 6.06+20060725 translations for language English +language-pack-gnome-en 6.06+20060927 GNOME translation updates for language Engli +language-pack-gnome-en-base 6.06+20060725 GNOME translations for language English +language-selector 0.1.20.1 Language selector for ubuntu linux +language-selector-common 0.1.20.1 Language selector for ubuntu linux +language-support-en 6.06+20060529 metapackage for English language support +laptop-detect 0.12.1-ubuntu2 attempt to detect a laptop +laptop-mode 0.4 laptop-mode aims to reduce the power consump +laptop-mode-tools 1.11-1ubuntu3 Userland scripts to control "laptop mode" +launchpad-integration 0.1.3 launchpad integration +less 394-1 Pager program similar to more +lftp 3.4.0-1 Sophisticated command-line FTP/HTTP client p +liba52-0.7.4 0.7.4-1 Library for decoding ATSC A/52 streams. +liba52-0.7.4-dev 0.7.4-1 Development library and headers for liba52 +libaa1 1.4p5-30 ascii art library +libacl1 2.2.34-1ubuntu1 Access control list shared library +libadns1 1.1-4 Asynchronous-capable DNS client library and +libao2 0.8.6-1.1ubuntu2 Cross Platform Audio Output Library +libapm1 3.2.2-3ubuntu2 Library for interacting with APM driver in k +libapr0 2.0.55-4ubuntu2.1 the Apache Portable Runtime +libart-2.0-2 2.3.17-1 Library of functions for 2D graphics - runti +rc libarts1c2 1.4.3-0ubuntu1 aRts Sound system +libarts1c2a 1.5.2-0ubuntu1 aRts sound system core components +libartsc0 1.5.2-0ubuntu1 aRts sound system C support library +libasound2 1.0.10-2ubuntu4 ALSA library +libaspell15 0.60.4-2 GNU Aspell spell-checker runtime library +libatk1.0-0 1.11.4-0ubuntu1 The ATK accessibility toolkit +libatm1 2.4.1-17 shared library for ATM (Asynchronous Transfe +libatspi1.0-0 1.7.7-0ubuntu3 C binding libraries of at-spi for GNOME Acce +libattr1 2.4.25-1 Extended attribute shared library +libaudio2 1.7-3ubuntu3 The Network Audio System (NAS). (shared libr +libaudiofile0 0.2.6-6ubuntu1 Open-source version of SGI's audiofile libra +libavahi-client3 0.6.10-0ubuntu3.2 Avahi client library +libavahi-common-data 0.6.10-0ubuntu3.2 Avahi common data files +libavahi-common3 0.6.10-0ubuntu3.2 Avahi common library +libavahi-glib1 0.6.10-0ubuntu3.2 Avahi glib integration library +libavahi-qt3-1 0.6.10-0ubuntu3.2 Avahi QT3 integration library +libavc1394-0 0.5.1-1 control IEEE 1394 audio/video devices +libavcodec-dev 0.cvs20050918-5ubuntu1.1 development files for libavcodec +libavformat-dev 0.cvs20050918-5ubuntu1.1 development files for libavformat +rc libavifile-0.7 0.7.43.20050224-1ubuntu6 shared libraries for AVI read/writing +libbeagle0 0.2.6-1ubuntu5 library for accessing beagle (development fi +libbeecrypt6 4.1.2-4 open source C library of cryptographic algor +libbind9-0 9.3.2-2ubuntu1.1 BIND9 Shared Library used by BIND +libblkid1 1.38-2ubuntu2 block device id library +libbluetooth1 2.24-0ubuntu1 Library to use the BlueZ Linux Bluetooth sta +libbonobo2-0 2.14.0-0ubuntu2 Bonobo CORBA interfaces library +libbonobo2-common 2.14.0-0ubuntu2 Bonobo CORBA interfaces library -- support f +libbonoboui2-0 2.14.0-0ubuntu1 The Bonobo UI library +libbonoboui2-common 2.14.0-0ubuntu1 The Bonobo UI library -- common files +libbrlapi1 3.7.2-2ubuntu3 braille display access via BRLTTY - shared l +libbtctl2 0.6.0-0ubuntu3 GObject Bluetooth library +libbz2-1.0 1.0.3-0ubuntu2 high-quality block-sorting file compressor l +libc6 2.3.6-0ubuntu20 GNU C Library: Shared libraries and Timezone +libc6-dev 2.3.6-0ubuntu20 GNU C Library: Development Libraries and Hea +libc6-i686 2.3.6-0ubuntu20 GNU C Library: Shared libraries [i686 optimi +libcairo2 1.0.4-0ubuntu1 The Cairo 2D vector graphics library +rc libcamel1.2-6 1.4.1-0ubuntu3 Generic messaging library for evolution data +libcamel1.2-8 1.6.1-0ubuntu5 Generic messaging library for evolution data +libcap1 1.10-14 support for getting/setting POSIX.1e capabil +libcdio6 0.76-1ubuntu1 library to read and control CD-ROM +libcdparanoia0 3a9.8-11 Shared libraries for cdparanoia (runtime lib +libcomerr2 1.38-2ubuntu2 common error description library +libcompfaceg1 1989.11.11-24ubuntu1 Compress/decompress images for mailheaders, +libconsole 0.2.3dbs-60ubuntu3 Shared libraries for Linux console and font +libcroco3 0.6.1-1build1 a generic Cascading Style Sheet (CSS) parsin +libcupsimage2 1.2.2-0ubuntu0.6.06 Common UNIX Printing System(tm) - image libs +libcupsys2 1.2.2-0ubuntu0.6.06 Common UNIX Printing System(tm) - libs +libcupsys2-gnutls10 1.2.2-0ubuntu0.6.06 Common UNIX Printing System(tm) - dummy libs +libcurl3 7.15.1-1ubuntu2 Multi-protocol file transfer library +libcurl3-gnutls