Changeset 5759975a in mainline
- Timestamp:
- 2013-09-11T17:55:18Z (11 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- f18d01b6
- Parents:
- 4c9b28a (diff), 26bc0fd1 (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. - Location:
- uspace
- Files:
-
- 5 added
- 9 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/drv/bus/isa/isa.c
r4c9b28a r5759975a 67 67 68 68 #include <device/hw_res.h> 69 #include <device/pio_window.h> 69 70 70 71 #include "i8237.h" … … 79 80 ddf_dev_t *dev; 80 81 ddf_fun_t *fctl; 82 pio_window_t pio_win; 81 83 list_t functions; 82 84 } isa_bus_t; … … 405 407 hw_resource_t *resources = fun->hw_resources.resources; 406 408 409 isa_bus_t *isa = isa_bus(ddf_fun_get_dev(fun->fnode)); 410 407 411 if (count < ISA_MAX_HW_RES) { 408 412 resources[count].type = IO_RANGE; 409 413 resources[count].res.io_range.address = addr; 414 resources[count].res.io_range.address += isa->pio_win.io.base; 410 415 resources[count].res.io_range.size = len; 411 416 resources[count].res.io_range.endianness = LITTLE_ENDIAN; … … 604 609 static int isa_dev_add(ddf_dev_t *dev) 605 610 { 611 async_sess_t *sess; 612 int rc; 613 606 614 ddf_msg(LVL_DEBUG, "isa_dev_add, device handle = %d", 607 615 (int) ddf_dev_get_handle(dev)); … … 614 622 isa->dev = dev; 615 623 list_initialize(&isa->functions); 624 625 sess = ddf_dev_parent_sess_create(dev, EXCHANGE_SERIALIZE); 626 if (sess == NULL) { 627 ddf_msg(LVL_ERROR, "isa_dev_add failed to connect to the " 628 "parent driver."); 629 return ENOENT; 630 } 631 632 rc = pio_window_get(sess, &isa->pio_win); 633 if (rc != EOK) { 634 ddf_msg(LVL_ERROR, "isa_dev_add failed to get PIO window " 635 "for the device."); 636 return rc; 637 } 616 638 617 639 /* Make the bus device more visible. Does not do anything. */ -
uspace/drv/bus/pci/pciintel/pci.c
r4c9b28a r5759975a 57 57 #include <ops/hw_res.h> 58 58 #include <device/hw_res.h> 59 #include <ops/pio_window.h> 60 #include <device/pio_window.h> 59 61 #include <ddi.h> 60 62 #include <pci_dev_iface.h> … … 141 143 } 142 144 145 static pio_window_t *pciintel_get_pio_window(ddf_fun_t *fnode) 146 { 147 pci_fun_t *fun = pci_fun(fnode); 148 149 if (fun == NULL) 150 return NULL; 151 return &fun->pio_window; 152 } 153 154 143 155 static int pci_config_space_write_32(ddf_fun_t *fun, uint32_t address, 144 156 uint32_t data) … … 198 210 .get_resource_list = &pciintel_get_resources, 199 211 .enable_interrupt = &pciintel_enable_interrupt, 212 }; 213 214 static pio_window_ops_t pciintel_pio_window_ops = { 215 .get_pio_window = &pciintel_get_pio_window 200 216 }; 201 217 … … 211 227 static ddf_dev_ops_t pci_fun_ops = { 212 228 .interfaces[HW_RES_DEV_IFACE] = &pciintel_hw_res_ops, 229 .interfaces[PIO_WINDOW_DEV_IFACE] = &pciintel_pio_window_ops, 213 230 .interfaces[PCI_DEV_IFACE] = &pci_dev_ops 214 231 }; … … 617 634 pci_read_bars(fun); 618 635 pci_read_interrupt(fun); 636 637 /* Propagate the PIO window to the function. */ 638 fun->pio_window = bus->pio_win; 619 639 620 640 ddf_fun_set_ops(fun->fnode, &pci_fun_ops); … … 647 667 static int pci_dev_add(ddf_dev_t *dnode) 648 668 { 669 hw_resource_list_t hw_resources; 649 670 pci_bus_t *bus = NULL; 650 671 ddf_fun_t *ctl = NULL; … … 672 693 goto fail; 673 694 } 674 675 hw_resource_list_t hw_resources; 695 696 rc = pio_window_get(sess, &bus->pio_win); 697 if (rc != EOK) { 698 ddf_msg(LVL_ERROR, "pci_dev_add failed to get PIO window " 699 "for the device."); 700 goto fail; 701 } 676 702 677 703 rc = hw_res_get_resource_list(sess, &hw_resources); … … 763 789 { 764 790 ddf_log_init(NAME); 765 pci_fun_ops.interfaces[HW_RES_DEV_IFACE] = &pciintel_hw_res_ops;766 pci_fun_ops.interfaces[PCI_DEV_IFACE] = &pci_dev_ops;767 791 } 768 792 -
uspace/drv/bus/pci/pciintel/pci.h
r4c9b28a r5759975a 40 40 #include "pci_regs.h" 41 41 42 #define PCI_MAX_HW_RES 842 #define PCI_MAX_HW_RES 10 43 43 44 44 typedef struct pciintel_bus { … … 49 49 void *conf_data_port; 50 50 void *conf_addr_port; 51 pio_window_t pio_win; 51 52 fibril_mutex_t conf_mutex; 52 53 } pci_bus_t; … … 68 69 hw_resource_list_t hw_resources; 69 70 hw_resource_t resources[PCI_MAX_HW_RES]; 71 pio_window_t pio_window; 70 72 } pci_fun_t; 71 73 -
uspace/drv/infrastructure/rootmalta/rootmalta.c
r4c9b28a r5759975a 53 53 #include <ops/hw_res.h> 54 54 #include <device/hw_res.h> 55 #include <ops/pio_window.h> 56 #include <device/pio_window.h> 55 57 #include <byteorder.h> 56 58 … … 66 68 #define GT_PCI_CMD_MBYTESWAP 0x1 67 69 70 #define GT_PCI_MEMBASE UINT32_C(0x10000000) 71 #define GT_PCI_MEMSIZE UINT32_C(0x08000000) 72 73 #define GT_PCI_IOBASE UINT32_C(0x18000000) 74 #define GT_PCI_IOSIZE UINT32_C(0x00200000) 75 68 76 typedef struct rootmalta_fun { 69 77 hw_resource_list_t hw_resources; 78 pio_window_t pio_window; 70 79 } rootmalta_fun_t; 71 80 … … 107 116 sizeof(pci_conf_regs) / sizeof(pci_conf_regs[0]), 108 117 pci_conf_regs 118 }, 119 .pio_window = { 120 .mem = { 121 .base = GT_PCI_MEMBASE, 122 .size = GT_PCI_MEMSIZE 123 }, 124 .io = { 125 .base = GT_PCI_IOBASE, 126 .size = GT_PCI_IOSIZE 127 } 109 128 } 110 129 }; … … 129 148 130 149 return false; 150 } 151 152 static pio_window_t *rootmalta_get_pio_window(ddf_fun_t *fnode) 153 { 154 rootmalta_fun_t *fun = rootmalta_fun(fnode); 155 156 assert(fun != NULL); 157 return &fun->pio_window; 131 158 } 132 159 … … 134 161 .get_resource_list = &rootmalta_get_resources, 135 162 .enable_interrupt = &rootmalta_enable_interrupt, 163 }; 164 165 static pio_window_ops_t fun_pio_window_ops = { 166 .get_pio_window = &rootmalta_get_pio_window 136 167 }; 137 168 … … 228 259 ddf_log_init(NAME); 229 260 rootmalta_fun_ops.interfaces[HW_RES_DEV_IFACE] = &fun_hw_res_ops; 261 rootmalta_fun_ops.interfaces[PIO_WINDOW_DEV_IFACE] = &fun_pio_window_ops; 230 262 } 231 263 -
uspace/drv/infrastructure/rootpc/rootpc.c
r4c9b28a r5759975a 51 51 #include <ops/hw_res.h> 52 52 #include <device/hw_res.h> 53 #include <ops/pio_window.h> 54 #include <device/pio_window.h> 53 55 54 56 #define NAME "rootpc" … … 56 58 typedef struct rootpc_fun { 57 59 hw_resource_list_t hw_resources; 60 pio_window_t pio_window; 58 61 } rootpc_fun_t; 59 62 … … 93 96 static rootpc_fun_t pci_data = { 94 97 .hw_resources = { 95 sizeof(pci_conf_regs) /sizeof(pci_conf_regs[0]),98 sizeof(pci_conf_regs) / sizeof(pci_conf_regs[0]), 96 99 pci_conf_regs 100 }, 101 .pio_window = { 102 .mem = { 103 .base = UINT32_C(0), 104 .size = UINT32_C(0xffffffff) /* practical maximum */ 105 }, 106 .io = { 107 .base = UINT32_C(0), 108 .size = UINT32_C(0x10000) 109 } 97 110 } 98 111 }; … … 117 130 118 131 return false; 132 } 133 134 static pio_window_t *rootpc_get_pio_window(ddf_fun_t *fnode) 135 { 136 rootpc_fun_t *fun = rootpc_fun(fnode); 137 138 assert(fun != NULL); 139 return &fun->pio_window; 119 140 } 120 141 … … 122 143 .get_resource_list = &rootpc_get_resources, 123 144 .enable_interrupt = &rootpc_enable_interrupt, 145 }; 146 147 static pio_window_ops_t fun_pio_window_ops = { 148 .get_pio_window = &rootpc_get_pio_window 124 149 }; 125 150 … … 197 222 ddf_log_init(NAME); 198 223 rootpc_fun_ops.interfaces[HW_RES_DEV_IFACE] = &fun_hw_res_ops; 224 rootpc_fun_ops.interfaces[PIO_WINDOW_DEV_IFACE] = &fun_pio_window_ops; 199 225 } 200 226 -
uspace/lib/c/Makefile
r4c9b28a r5759975a 69 69 generic/device/hw_res.c \ 70 70 generic/device/hw_res_parsed.c \ 71 generic/device/pio_window.c \ 71 72 generic/device/char_dev.c \ 72 73 generic/device/clock_dev.c \ -
uspace/lib/c/include/ipc/dev_iface.h
r4c9b28a r5759975a 36 36 typedef enum { 37 37 HW_RES_DEV_IFACE = 0, 38 PIO_WINDOW_DEV_IFACE, 38 39 39 40 /** Character device interface */ -
uspace/lib/drv/Makefile
r4c9b28a r5759975a 41 41 generic/remote_audio_pcm.c \ 42 42 generic/remote_hw_res.c \ 43 generic/remote_pio_window.c \ 43 44 generic/remote_char_dev.c \ 44 45 generic/remote_graph_dev.c \ -
uspace/lib/drv/generic/dev_iface.c
r4c9b28a r5759975a 40 40 #include "dev_iface.h" 41 41 #include "remote_hw_res.h" 42 #include "remote_pio_window.h" 42 43 #include "remote_char_dev.h" 43 44 #include "remote_clock_dev.h" … … 58 59 [AUDIO_PCM_BUFFER_IFACE] = &remote_audio_pcm_iface, 59 60 [HW_RES_DEV_IFACE] = &remote_hw_res_iface, 61 [PIO_WINDOW_DEV_IFACE] = &remote_pio_window_iface, 60 62 [CHAR_DEV_IFACE] = &remote_char_dev_iface, 61 63 [GRAPH_DEV_IFACE] = &remote_graph_dev_iface,
Note:
See TracChangeset
for help on using the changeset viewer.