Changes in uspace/drv/bus/isa/isa.c [5cc9eba:5960b48] in mainline
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/drv/bus/isa/isa.c
r5cc9eba r5960b48 2 2 * Copyright (c) 2010 Lenka Trochtova 3 3 * Copyright (c) 2011 Jiri Svoboda 4 * Copyright (c) 2011 Jan Vesely5 4 * All rights reserved. 6 5 * … … 57 56 #include <ns.h> 58 57 #include <sys/stat.h> 59 #include <ipc/irc.h>60 #include <ipc/services.h>61 #include <sysinfo.h>62 #include <ns.h>63 58 64 59 #include <ddf/driver.h> … … 70 65 #include <device/hw_res.h> 71 66 72 #include "i8237.h"73 74 67 #define NAME "isa" 75 68 #define CHILD_FUN_CONF_PATH "/drv/isa/isa.dev" … … 81 74 #define ISA_FUN(fun) ((isa_fun_t *) ((fun)->driver_data)) 82 75 83 #define ISA_MAX_HW_RES 576 #define ISA_MAX_HW_RES 4 84 77 85 78 typedef struct { … … 148 141 } 149 142 150 static int isa_dma_channel_fun_setup(ddf_fun_t *fnode,151 unsigned int channel, uint32_t pa, uint16_t size, uint8_t mode)152 {153 assert(fnode);154 isa_fun_t *isa_fun = fnode->driver_data;155 const hw_resource_list_t *res = &isa_fun->hw_resources;156 assert(res);157 158 const unsigned int ch = channel;159 for (size_t i = 0; i < res->count; ++i) {160 if (((res->resources[i].type == DMA_CHANNEL_16) &&161 (res->resources[i].res.dma_channel.dma16 == ch)) ||162 ((res->resources[i].type == DMA_CHANNEL_8) &&163 (res->resources[i].res.dma_channel.dma8 == ch))) {164 return dma_setup_channel(channel, pa, size, mode);165 }166 }167 168 return EINVAL;169 }170 171 143 static hw_res_ops_t isa_fun_hw_res_ops = { 172 .get_resource_list = isa_get_fun_resources, 173 .enable_interrupt = isa_enable_fun_interrupt, 174 .dma_channel_setup = isa_dma_channel_fun_setup, 144 &isa_get_fun_resources, 145 &isa_enable_fun_interrupt 175 146 }; 176 147 … … 343 314 } 344 315 345 static void isa_fun_set_dma(isa_fun_t *fun, int dma)346 {347 size_t count = fun->hw_resources.count;348 hw_resource_t *resources = fun->hw_resources.resources;349 350 if (count < ISA_MAX_HW_RES) {351 if ((dma > 0) && (dma < 4)) {352 resources[count].type = DMA_CHANNEL_8;353 resources[count].res.dma_channel.dma8 = dma;354 355 fun->hw_resources.count++;356 ddf_msg(LVL_NOTE, "Added dma 0x%x to function %s", dma,357 fun->fnode->name);358 359 return;360 }361 362 if ((dma > 4) && (dma < 8)) {363 resources[count].type = DMA_CHANNEL_16;364 resources[count].res.dma_channel.dma16 = dma;365 366 fun->hw_resources.count++;367 ddf_msg(LVL_NOTE, "Added dma 0x%x to function %s", dma,368 fun->fnode->name);369 370 return;371 }372 373 ddf_msg(LVL_WARN, "Skipped dma 0x%x for function %s", dma,374 fun->fnode->name);375 }376 }377 378 316 static void isa_fun_set_io_range(isa_fun_t *fun, size_t addr, size_t len) 379 317 { … … 401 339 402 340 val = skip_spaces(val); 403 irq = (int) 341 irq = (int)strtol(val, &end, 10); 404 342 405 343 if (val != end) 406 344 isa_fun_set_irq(fun, irq); 407 }408 409 static void fun_parse_dma(isa_fun_t *fun, char *val)410 {411 unsigned int dma = 0;412 char *end = NULL;413 414 val = skip_spaces(val);415 dma = (unsigned int) strtol(val, &end, 10);416 417 if (val != end)418 isa_fun_set_dma(fun, dma);419 345 } 420 346 … … 510 436 if (!prop_parse(fun, line, "io_range", &fun_parse_io_range) && 511 437 !prop_parse(fun, line, "irq", &fun_parse_irq) && 512 !prop_parse(fun, line, "dma", &fun_parse_dma) &&513 438 !prop_parse(fun, line, "match", &fun_parse_match_id)) { 514 439 … … 521 446 { 522 447 fun->hw_resources.resources = 523 (hw_resource_t *) 448 (hw_resource_t *)malloc(sizeof(hw_resource_t) * ISA_MAX_HW_RES); 524 449 } 525 450 … … 705 630 706 631 707 static void isa_init() 632 static void isa_init() 708 633 { 709 634 ddf_log_init(NAME, LVL_ERROR);
Note:
See TracChangeset
for help on using the changeset viewer.