Changeset 3f03199 in mainline for uspace/app


Ignore:
Timestamp:
2013-09-15T06:33:53Z (12 years ago)
Author:
Jan Vesely <jano.vesely@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
9348862
Parents:
dd7078c (diff), 1c0cef0 (diff)
Note: this is a merge changeset, the changes displayed below correspond to the merge itself.
Use the (diff) links above to see all the changes relative to each parent.
Message:

Merge mainline changes.

Major conflicts in USB HC drivers.
Compiles and UHCI works (qemu).
OHCI has device remove problems.

Location:
uspace/app
Files:
8 added
14 edited

Legend:

Unmodified
Added
Removed
  • uspace/app/bdsh/cmds/modules/mount/mount.c

    rdd7078c r3f03199  
    7474        get_mtab_list(&mtab_list);
    7575
    76         list_foreach(mtab_list, cur) {
    77                 mtab_ent_t *mtab_ent = list_get_instance(cur, mtab_ent_t,
    78                     link);
    79 
     76        list_foreach(mtab_list, link, mtab_ent_t, mtab_ent) {
    8077                if (old_ent)
    8178                        free(old_ent);
  • uspace/app/devctl/devctl.c

    rdd7078c r3f03199  
    3535#include <devman.h>
    3636#include <errno.h>
     37#include <stdbool.h>
    3738#include <stdio.h>
    3839#include <stdlib.h>
     
    4445#define MAX_NAME_LENGTH 1024
    4546
    46 char name[MAX_NAME_LENGTH];
    47 char drv_name[MAX_NAME_LENGTH];
     47static char name[MAX_NAME_LENGTH];
     48static char drv_name[MAX_NAME_LENGTH];
     49static bool verbose = false;
     50
     51static const char *drv_state_str(driver_state_t state)
     52{
     53        const char *sstate;
     54
     55        switch (state) {
     56        case DRIVER_NOT_STARTED:
     57                sstate = "not started";
     58                break;
     59        case DRIVER_STARTING:
     60                sstate = "starting";
     61                break;
     62        case DRIVER_RUNNING:
     63                sstate = "running";
     64                break;
     65        default:
     66                sstate = "unknown";
     67        }
     68
     69        return sstate;
     70}
    4871
    4972static int fun_subtree_print(devman_handle_t funh, int lvl)
     
    5275        devman_handle_t *cfuns;
    5376        size_t count, i;
     77        unsigned int score;
    5478        int rc;
    5579        int j;
     
    7498                printf("%s : %s\n", name, drv_name);
    7599
     100        if (verbose) {
     101                for (i = 0; true; i++) {
     102                        rc = devman_fun_get_match_id(funh, i, name, MAX_NAME_LENGTH,
     103                            &score);
     104                        if (rc != EOK)
     105                                break;
     106
     107                        for (j = 0; j < lvl; j++)
     108                                printf("    ");
     109
     110                        printf("    %u %s\n", score, name);
     111                }
     112        }
     113
    76114        rc = devman_fun_get_child(funh, &devh);
    77115        if (rc == ENOENT)
     
    159197}
    160198
     199static int drv_list(void)
     200{
     201        devman_handle_t *devs;
     202        devman_handle_t *drvs;
     203        driver_state_t state;
     204        const char *sstate;
     205        size_t ndrvs;
     206        size_t ndevs;
     207        size_t i;
     208        int rc;
     209
     210        rc = devman_get_drivers(&drvs, &ndrvs);
     211        if (rc != EOK)
     212                return rc;
     213
     214        for (i = 0; i < ndrvs; i++) {
     215                devs = NULL;
     216
     217                rc = devman_driver_get_name(drvs[i], drv_name, MAX_NAME_LENGTH);
     218                if (rc != EOK)
     219                        goto skip;
     220                rc = devman_driver_get_state(drvs[i], &state);
     221                if (rc != EOK)
     222                        goto skip;
     223                rc = devman_driver_get_devices(drvs[i], &devs, &ndevs);
     224                if (rc != EOK)
     225                        goto skip;
     226
     227                sstate = drv_state_str(state);
     228
     229                printf("%-11s %3zu %s\n", sstate, ndevs, drv_name);
     230skip:
     231                free(devs);
     232        }
     233        free(drvs);
     234
     235        return EOK;
     236}
     237
     238static int drv_show(char *drvname)
     239{
     240        devman_handle_t *devs;
     241        devman_handle_t drvh;
     242        devman_handle_t funh;
     243        driver_state_t state;
     244        const char *sstate;
     245        unsigned int score;
     246        size_t ndevs;
     247        size_t i;
     248        int rc;
     249
     250        rc = devman_driver_get_handle(drvname, &drvh);
     251        if (rc != EOK)
     252                return rc;
     253
     254        devs = NULL;
     255
     256        rc = devman_driver_get_name(drvh, drv_name, MAX_NAME_LENGTH);
     257        if (rc != EOK)
     258                return rc;
     259
     260        rc = devman_driver_get_state(drvh, &state);
     261        if (rc != EOK)
     262                return rc;
     263
     264        rc = devman_driver_get_devices(drvh, &devs, &ndevs);
     265        if (rc != EOK)
     266                return rc;
     267
     268        sstate = drv_state_str(state);
     269
     270        printf("Driver: %s\n", drv_name);
     271        printf("State: %s\n", sstate);
     272
     273        printf("Attached devices:\n");
     274
     275        for (i = 0; i < ndevs; i++) {
     276                rc = devman_dev_get_parent(devs[i], &funh);
     277                if (rc != EOK)
     278                        goto error;
     279
     280                rc = devman_fun_get_path(funh, name, MAX_NAME_LENGTH);
     281                if (rc != EOK)
     282                        goto error;
     283                printf("\t%s\n", name);
     284        }
     285
     286        printf("Match IDs:\n");
     287
     288        for (i = 0; true; i++) {
     289                rc = devman_driver_get_match_id(drvh, i, name, MAX_NAME_LENGTH,
     290                    &score);
     291                if (rc != EOK)
     292                        break;
     293
     294                printf("\t%u %s\n", score, name);
     295        }
     296
     297error:
     298        free(devs);
     299
     300        return EOK;
     301}
     302
     303static int drv_load(const char *drvname)
     304{
     305        int rc;
     306        devman_handle_t drvh;
     307
     308        rc = devman_driver_get_handle(drvname, &drvh);
     309        if (rc != EOK) {
     310                printf("Failed resolving driver '%s' (%d).\n", drvname, rc);
     311                return rc;
     312        }
     313
     314        rc = devman_driver_load(drvh);
     315        if (rc != EOK) {
     316                printf("Failed loading driver '%s' (%d).\n", drvname, rc);
     317                return rc;
     318        }
     319
     320        return EOK;
     321}
     322
    161323static void print_syntax(void)
    162324{
    163         printf("syntax: devctl [(online|offline) <function>]\n");
     325        printf("syntax:\n");
     326        printf("\tdevctl\n");
     327        printf("\tdevctl online <function>]\n");
     328        printf("\tdevctl offline <function>]\n");
     329        printf("\tdevctl list-drv\n");
     330        printf("\tdevctl show-drv <driver-name>\n");
     331        printf("\tdevctl load-drv <driver-name>\n");
    164332}
    165333
     
    168336        int rc;
    169337
    170         if (argc == 1) {
     338        if (argc == 1 || argv[1][0] == '-') {
     339                if (argc > 1) {
     340                        if (str_cmp(argv[1], "-v") == 0) {
     341                                verbose = true;
     342                        } else {
     343                                printf(NAME ": Invalid argument '%s'\n", argv[1]);
     344                                print_syntax();
     345                                return 1;
     346                        }
     347                }
    171348                rc = fun_tree_print();
    172349                if (rc != EOK)
     
    194371                        return 2;
    195372                }
     373        } else if (str_cmp(argv[1], "list-drv") == 0) {
     374                rc = drv_list();
     375                if (rc != EOK)
     376                        return 2;
     377        } else if (str_cmp(argv[1], "show-drv") == 0) {
     378                if (argc < 3) {
     379                        printf(NAME ": Argument missing.\n");
     380                        print_syntax();
     381                        return 1;
     382                }
     383
     384                rc = drv_show(argv[2]);
     385                if (rc != EOK) {
     386                        return 2;
     387                }
     388        } else if (str_cmp(argv[1], "load-drv") == 0) {
     389                if (argc < 3) {
     390                        printf(NAME ": Argument missing.\n");
     391                        print_syntax();
     392                        return 1;
     393                }
     394
     395                rc = drv_load(argv[2]);
     396                if (rc != EOK)
     397                        return 2;
    196398        } else {
    197399                printf(NAME ": Invalid argument '%s'.\n", argv[1]);
  • uspace/app/edit/sheet.c

    rdd7078c r3f03199  
    105105        char *ipp;
    106106        size_t sz;
    107         tag_t *tag;
    108107        char *newp;
    109108
     
    128127        /* Adjust tags. */
    129128
    130         list_foreach(sh->tags, link) {
    131                 tag = list_get_instance(link, tag_t, link);
    132 
     129        list_foreach(sh->tags, link, tag_t, tag) {
    133130                if (tag->b_off > pos->b_off)
    134131                        tag->b_off += sz;
     
    154151        char *spp;
    155152        size_t sz;
    156         tag_t *tag;
    157153        char *newp;
    158154        size_t shrink_size;
     
    165161
    166162        /* Adjust tags. */
    167         list_foreach(sh->tags, link) {
    168                 tag = list_get_instance(link, tag_t, link);
    169 
     163        list_foreach(sh->tags, link, tag_t, tag) {
    170164                if (tag->b_off >= epos->b_off)
    171165                        tag->b_off -= sz;
  • uspace/app/init/init.c

    rdd7078c r3f03199  
    384384        srv_start("/srv/input", HID_INPUT);
    385385        srv_start("/srv/output", HID_OUTPUT);
     386        srv_start("/srv/hound");
    386387       
    387388        int rc = compositor(HID_INPUT, HID_COMPOSITOR_SERVER);
     
    392393                rc = console(HID_INPUT, HID_OUTPUT);
    393394                if (rc == EOK) {
    394 #ifndef CONFIG_VC_COUNT
    395 #define CONFIG_VC_COUNT 6
    396 #endif
    397                         switch((unsigned)CONFIG_VC_COUNT) {
    398                         default:
    399                         case 6: getterm("term/vc5", "/app/bdsh", false);
    400                         case 5: getterm("term/vc4", "/app/bdsh", false);
    401                         case 4: getterm("term/vc3", "/app/bdsh", false);
    402                         case 3: getterm("term/vc2", "/app/bdsh", false);
    403                         case 2: getterm("term/vc1", "/app/bdsh", false);
    404                         case 1: getterm("term/vc0", "/app/bdsh", true);
    405                         }
    406 #ifdef CONFIG_KERNEL_LOG_VC_6
     395                        getterm("term/vc0", "/app/bdsh", true);
     396                        getterm("term/vc1", "/app/bdsh", false);
     397                        getterm("term/vc2", "/app/bdsh", false);
     398                        getterm("term/vc3", "/app/bdsh", false);
     399                        getterm("term/vc4", "/app/bdsh", false);
     400                        getterm("term/vc5", "/app/bdsh", false);
    407401                        getterm("term/vc6", "/app/klog", false);
    408 #endif
    409402                }
    410403        }
    411         srv_start("/srv/hound");
    412404       
    413405        return 0;
  • uspace/app/klog/klog.c

    rdd7078c r3f03199  
    206206        klog_length = size / sizeof(wchar_t);
    207207       
    208         rc = physmem_map((void *) faddr, pages,
    209             AS_AREA_READ | AS_AREA_CACHEABLE, (void *) &klog);
     208        rc = physmem_map(faddr, pages, AS_AREA_READ | AS_AREA_CACHEABLE,
     209            (void *) &klog);
    210210        if (rc != EOK) {
    211211                fprintf(stderr, "%s: Unable to map klog\n", NAME);
  • uspace/app/sportdmp/sportdmp.c

    rdd7078c r3f03199  
    4444        sysarg_t baud = 9600;
    4545        service_id_t svc_id;
    46        
     46
    4747        int arg = 1;
    4848        int rc;
    49                
     49
    5050        if (argc > arg && str_test_prefix(argv[arg], "--baud=")) {
    5151                size_t arg_offset = str_lsize(argv[arg], 7);
     
    6565                arg++;
    6666        }
    67        
     67
    6868        if (argc > arg) {
    6969                rc = loc_service_get_id(argv[arg], &svc_id, 0);
     
    7777        else {
    7878                category_id_t serial_cat_id;
    79                
     79
    8080                rc = loc_category_get_id("serial", &serial_cat_id, 0);
    8181                if (rc != EOK) {
     
    8484                        return 1;
    8585                }
    86                
     86
    8787                service_id_t *svc_ids;
    8888                size_t svc_count;
    89                
    90                 rc = loc_category_get_svcs(serial_cat_id, &svc_ids, &svc_count);                if (rc != EOK) {
     89
     90                rc = loc_category_get_svcs(serial_cat_id, &svc_ids, &svc_count);
     91                if (rc != EOK) {
    9192                        fprintf(stderr, "Failed getting list of services\n");
    9293                        return 1;
    9394                }
    94                
     95
    9596                if (svc_count == 0) {
    9697                        fprintf(stderr, "No service in category 'serial'\n");
     
    9899                        return 1;
    99100                }
    100                
     101
    101102                svc_id = svc_ids[0];
    102103                free(svc_ids);
    103104        }
    104        
     105
    105106        if (argc > arg) {
    106107                fprintf(stderr, "Too many arguments\n");
     
    108109                return 1;
    109110        }
    110        
    111        
     111
     112
    112113        async_sess_t *sess = loc_service_connect(EXCHANGE_SERIALIZE, svc_id,
    113114            IPC_FLAG_BLOCKING);
     
    115116                fprintf(stderr, "Failed connecting to service\n");
    116117        }
    117        
     118
    118119        async_exch_t *exch = async_exchange_begin(sess);
    119120        rc = async_req_4_0(exch, SERIAL_SET_COM_PROPS, baud,
    120121            SERIAL_NO_PARITY, 8, 1);
    121122        async_exchange_end(exch);
    122        
     123
    123124        if (rc != EOK) {
    124125                fprintf(stderr, "Failed setting serial properties\n");
    125126                return 2;
    126127        }
    127        
     128
    128129        uint8_t *buf = (uint8_t *) malloc(BUF_SIZE);
    129130        if (buf == NULL) {
     
    131132                return 3;
    132133        }
    133        
     134
    134135        while (true) {
    135136                ssize_t read = char_dev_read(sess, buf, BUF_SIZE);
     
    144145                fflush(stdout);
    145146        }
    146        
     147
    147148        free(buf);
    148149        return 0;
    149150}
     151
  • uspace/app/tester/mm/common.c

    rdd7078c r3f03199  
    8484}
    8585
    86 static bool overlap_match(link_t *link, void *addr, size_t size)
    87 {
    88         mem_block_t *block = list_get_instance(link, mem_block_t, link);
    89        
     86static bool overlap_match(mem_block_t *block, void *addr, size_t size)
     87{
    9088        /* Entry block control structure <mbeg, mend) */
    9189        uint8_t *mbeg = (uint8_t *) block;
     
    125123        bool fnd = false;
    126124       
    127         list_foreach(mem_blocks, link) {
    128                 if (overlap_match(link, addr, size)) {
     125        list_foreach(mem_blocks, link, mem_block_t, block) {
     126                if (overlap_match(block, addr, size)) {
    129127                        fnd = true;
    130128                        break;
  • uspace/app/trace/trace.c

    rdd7078c r3f03199  
    724724        o = oper_new("stat", 0, arg_def, V_ERRNO, 0, resp_def);
    725725        proto_add_oper(p, VFS_IN_STAT, o);
     726        o = oper_new("statfs", 0, arg_def, V_ERRNO, 0, resp_def);
     727        proto_add_oper(p, VFS_IN_STATFS, o);
    726728
    727729        proto_register(SERVICE_VFS, p);
  • uspace/app/usbinfo/dump.c

    rdd7078c r3f03199  
    103103void dump_match_ids(match_id_list_t *matches, const char *line_prefix)
    104104{
    105         list_foreach(matches->ids, link) {
    106                 match_id_t *match = list_get_instance(link, match_id_t, link);
    107 
     105        list_foreach(matches->ids, link, match_id_t, match) {
    108106                printf("%s%3d %s\n", line_prefix, match->score, match->id);
    109107        }
  • uspace/app/usbinfo/hid.c

    rdd7078c r3f03199  
    101101        printf("%sParsed HID report descriptor for interface %d\n",
    102102            get_indent(0), iface_no);
    103         list_foreach(report->reports, report_it) {
    104                 usb_hid_report_description_t *description = list_get_instance(
    105                     report_it, usb_hid_report_description_t, reports_link);
     103        list_foreach(report->reports, reports_link,
     104            usb_hid_report_description_t, description) {
    106105                printf("%sReport %d (type %d)\n", get_indent(1),
    107106                    (int) description->report_id,
    108107                    (int) description->type);
    109                 list_foreach(description->report_items, item_it) {
    110                         usb_hid_report_field_t *field = list_get_instance(
    111                             item_it, usb_hid_report_field_t, ritems_link);
     108                list_foreach(description->report_items, ritems_link,
     109                    usb_hid_report_field_t, field) {
    112110                        printf("%sUsage page = 0x%04x    Usage = 0x%04x\n",
    113111                            get_indent(2),
  • uspace/app/wavplay/dplay.c

    rdd7078c r3f03199  
    151151            device_event_callback, pb);
    152152        if (ret != EOK) {
    153                 printf("Failed to register event callback.\n");
     153                printf("Failed to register event callback: %s.\n",
     154                    str_error(ret));
    154155                return;
    155156        }
     
    285286                            pb->f.sample_format);
    286287                        if (ret != EOK) {
    287                                 printf("Failed to start playback\n");
     288                                printf("Failed to start playback: %s\n",
     289                                    str_error(ret));
    288290                                return;
    289291                        }
     
    291293                        ret = audio_pcm_get_buffer_pos(pb->device, &pos);
    292294                        if (ret != EOK) {
    293                                 printf("Failed to update position indicator\n");
     295                                printf("Failed to update position indicator "
     296                                   "%s\n", str_error(ret));
    294297                        }
    295298                }
     
    308311                const int ret = audio_pcm_get_buffer_pos(pb->device, &pos);
    309312                if (ret != EOK) {
    310                         printf("Failed to update position indicator\n");
     313                        printf("Failed to update position indicator %s\n",
     314                            str_error(ret));
    311315                }
    312316                getuptime(&time);
     
    350354        ret = audio_pcm_get_info_str(session, &info);
    351355        if (ret != EOK) {
    352                 printf("Failed to get PCM info.\n");
     356                printf("Failed to get PCM info: %s.\n", str_error(ret));
    353357                goto close_session;
    354358        }
  • uspace/app/wavplay/drec.c

    rdd7078c r3f03199  
    213213        wave_header_t header;
    214214        fseek(rec.file, sizeof(header), SEEK_SET);
    215         const char *error;
    216         if (ret != EOK) {
    217                 printf("Error parsing wav header: %s.\n", error);
     215        if (ret != EOK) {
     216                printf("Error parsing wav header\n");
    218217                goto cleanup;
    219218        }
  • uspace/app/wavplay/main.c

    rdd7078c r3f03199  
    7979            &format.sampling_rate, &format.sample_format, &error);
    8080        if (ret != EOK) {
    81                 printf("Error parsing wav header: %s.\n", error);
     81                printf("Error parsing `%s' wav header: %s.\n", filename, error);
    8282                fclose(source);
    8383                return EINVAL;
    8484        }
     85
     86        printf("File `%s' format: %u channel(s), %uHz, %s.\n", filename,
     87            format.channels, format.sampling_rate,
     88            pcm_sample_format_str(format.sample_format));
    8589
    8690        /* Allocate buffer and create new context */
     
    136140            &format.sampling_rate, &format.sample_format, &error);
    137141        if (ret != EOK) {
    138                 printf("Error parsing wav header: %s.\n", error);
     142                printf("Error parsing `%s' wav header: %s.\n", filename, error);
    139143                fclose(source);
    140144                return EINVAL;
    141145        }
     146        printf("File `%s' format: %u channel(s), %uHz, %s.\n", filename,
     147            format.channels, format.sampling_rate,
     148            pcm_sample_format_str(format.sample_format));
    142149
    143150        /* Connect new playback context */
  • uspace/app/wavplay/wave.c

    rdd7078c r3f03199  
    8181        }
    8282
    83         if (uint16_t_le2host(header->subchunk1_size) != PCM_SUBCHUNK1_SIZE) {
     83        if (uint32_t_le2host(header->subchunk1_size) != PCM_SUBCHUNK1_SIZE) {
     84                //TODO subchunk 1 sizes other than 16 are allowed ( 18, 40)
     85                //http://www-mmsp.ece.mcgill.ca/documents/AudioFormats/WAVE/WAVE.html
    8486                if (error)
    8587                        *error = "invalid subchunk1 size";
    86                 return EINVAL;
     88//              return EINVAL;
    8789        }
    8890
     
    9496
    9597        if (str_lcmp(header->subchunk2_id, SUBCHUNK2_ID, 4) != 0) {
     98                //TODO basedd on subchunk1 size, we might be reading wrong
     99                //offset
    96100                if (error)
    97101                        *error = "invalid subchunk2 id";
    98                 return EINVAL;
     102//              return EINVAL;
    99103        }
    100104
    101105
     106        //TODO data and data_size are incorrect in extended wav formats
     107        //pcm params are OK
    102108        if (data)
    103109                *data = header->data;
Note: See TracChangeset for help on using the changeset viewer.