Changes in / [5e4f22b:725d038] in mainline
- Files:
-
- 31 added
- 12 edited
Legend:
- Unmodified
- Added
- Removed
-
boot/Makefile.common
r5e4f22b r725d038 114 114 $(USPACE_PATH)/srv/devman/devman 115 115 116 RD_DRVS = \ 117 infrastructure/root \ 116 RD_DRVS_ESSENTIAL = \ 117 infrastructure/root 118 119 RD_DRVS_NON_ESSENTIAL = \ 118 120 infrastructure/rootvirt \ 119 121 test/test1 \ … … 155 157 $(USPACE_PATH)/app/dltest2/dltest2 \ 156 158 $(USPACE_PATH)/app/dload/dload \ 159 $(USPACE_PATH)/app/dplay/dplay \ 157 160 $(USPACE_PATH)/app/edit/edit \ 158 161 $(USPACE_PATH)/app/ext2info/ext2info \ … … 161 164 $(USPACE_PATH)/app/killall/killall \ 162 165 $(USPACE_PATH)/app/loc/loc \ 166 $(USPACE_PATH)/app/mixerctl/mixerctl \ 163 167 $(USPACE_PATH)/app/mkfat/mkfat \ 164 168 $(USPACE_PATH)/app/mkexfat/mkexfat \ … … 220 224 RD_SRVS = $(RD_SRVS_ESSENTIAL) 221 225 RD_APPS = $(RD_APPS_ESSENTIAL) 226 RD_DRVS = $(RD_DRVS_ESSENTIAL) 222 227 else 223 228 RD_SRVS = $(RD_SRVS_ESSENTIAL) $(RD_SRVS_NON_ESSENTIAL) 224 229 RD_APPS = $(RD_APPS_ESSENTIAL) $(RD_APPS_NON_ESSENTIAL) 230 RD_DRVS = $(RD_DRVS_ESSENTIAL) $(RD_DRVS_NON_ESSENTAIL) 225 231 endif 226 232 -
boot/arch/amd64/Makefile.inc
r5e4f22b r725d038 28 28 29 29 RD_SRVS_ESSENTIAL += \ 30 $(USPACE_PATH)/srv/devman/devman \ 30 31 $(USPACE_PATH)/srv/hw/irc/apic/apic \ 31 32 $(USPACE_PATH)/srv/hw/irc/i8259/i8259 … … 34 35 $(USPACE_PATH)/srv/bd/ata_bd/ata_bd 35 36 36 RD_DRVS += \37 RD_DRVS_ESSENTIAL += \ 37 38 infrastructure/rootpc \ 38 39 bus/pci/pciintel \ 39 40 bus/isa \ 41 audio/sb16 \ 40 42 char/i8042 \ 43 char/ps2mouse \ 44 char/xtkbd 45 46 RD_DRVS_NON_ESSENTIAL += \ 41 47 char/ns8250 \ 42 char/ps2mouse \43 char/xtkbd \44 48 bus/usb/ehci\ 45 49 bus/usb/ohci \ … … 56 60 bus/isa 57 61 62 RD_APPS_ESSENTIAL += \ 63 $(USPACE_PATH)/app/dplay/dplay \ 64 $(USPACE_PATH)/app/mixerctl/mixerctl \ 65 58 66 BOOT_OUTPUT = $(ROOT_PATH)/image.iso 59 67 PREBUILD = $(INITRD).img -
boot/arch/ppc32/Makefile.inc
r5e4f22b r725d038 42 42 $(USPACE_PATH)/srv/hw/bus/cuda_adb/cuda_adb 43 43 44 RD_DRVS += \44 RD_DRVS_NON_ESSENTIAL += \ 45 45 infrastructure/rootmac 46 46 -
uspace/Makefile
r5e4f22b r725d038 38 38 app/bnchmark \ 39 39 app/devctl \ 40 app/dplay \ 40 41 app/edit \ 41 42 app/ext2info \ … … 48 49 app/loc \ 49 50 app/lsusb \ 51 app/mixerctl \ 50 52 app/mkfat \ 51 53 app/mkexfat \ … … 103 105 srv/hid/remcons \ 104 106 srv/hw/char/s3c24xx_uart \ 107 drv/audio/sb16 \ 105 108 drv/infrastructure/root \ 106 109 drv/infrastructure/rootvirt \ -
uspace/drv/bus/isa/isa.c
r5e4f22b r725d038 91 91 fibril_mutex_t mutex; 92 92 ddf_fun_t *fnode; 93 hw_resource_t resources[ISA_MAX_HW_RES]; 93 94 hw_resource_list_t hw_resources; 94 95 link_t bus_link; … … 207 208 208 209 fibril_mutex_initialize(&fun->mutex); 210 fun->hw_resources.resources = fun->resources; 211 209 212 fun->fnode = fnode; 210 213 return fun; … … 518 521 } 519 522 520 static void fun_hw_res_alloc(isa_fun_t *fun)521 {522 fun->hw_resources.resources =523 (hw_resource_t *) malloc(sizeof(hw_resource_t) * ISA_MAX_HW_RES);524 }525 526 static void fun_hw_res_free(isa_fun_t *fun)527 {528 free(fun->hw_resources.resources);529 fun->hw_resources.resources = NULL;530 }531 532 523 static char *isa_fun_read_info(char *fun_conf, isa_bus_t *isa) 533 524 { … … 558 549 return NULL; 559 550 } 560 561 /* Allocate buffer for the list of hardware resources of the device. */562 fun_hw_res_alloc(fun);563 551 564 552 /* Get properties of the device (match ids, irq and io range). */ … … 677 665 list_remove(&fun->bus_link); 678 666 679 fun_hw_res_free(fun);680 667 ddf_fun_destroy(fun->fnode); 681 668 } -
uspace/lib/c/generic/device/hw_res.c
r5e4f22b r725d038 42 42 { 43 43 sysarg_t count = 0; 44 44 45 45 async_exch_t *exch = async_exchange_begin(sess); 46 if (exch == NULL) 47 return ENOMEM; 46 48 int rc = async_req_1_1(exch, DEV_IFACE_ID(HW_RES_DEV_IFACE), 47 49 HW_RES_GET_RESOURCE_LIST, &count); 48 50 49 51 if (rc != EOK) { 50 52 async_exchange_end(exch); 51 53 return rc; 52 54 } 53 55 54 56 size_t size = count * sizeof(hw_resource_t); 55 57 hw_resource_t *resources = (hw_resource_t *) malloc(size); … … 59 61 return ENOMEM; 60 62 } 61 63 62 64 rc = async_data_read_start(exch, resources, size); 63 65 async_exchange_end(exch); 64 66 65 67 if (rc != EOK) { 66 68 free(resources); 67 69 return rc; 68 70 } 69 71 70 72 hw_resources->resources = resources; 71 73 hw_resources->count = count; 72 74 73 75 return EOK; 74 76 } … … 77 79 { 78 80 async_exch_t *exch = async_exchange_begin(sess); 81 if (exch == NULL) 82 return false; 79 83 int rc = async_req_1_0(exch, DEV_IFACE_ID(HW_RES_DEV_IFACE), 80 84 HW_RES_ENABLE_INTERRUPT); 81 85 async_exchange_end(exch); 82 86 83 87 return (rc == EOK); 88 } 89 90 /** 91 * Setup DMA channel to specified place and mode. 92 * @param channel DMA Channel 1,2,3 for 8 bit transfers, 5,6,7 for 16 bit. 93 * @param pa Physical address of the buffer. Must be < 16MB for 16 bit and < 1MB 94 * for 8 bit transfers. 95 * @param size DMA buffer size, limited to 64K. 96 * @param mode Mode of the DMA channel: 97 * - Read or Write 98 * - Allow automatic reset 99 * - Use address decrement instead of increment 100 * - Use SINGLE/BLOCK/ON DEMAND transfer mode 101 * @return Error code. 102 */ 103 int hw_res_dma_channel_setup(async_sess_t *sess, 104 unsigned channel, uint32_t pa, uint16_t size, uint8_t mode) 105 { 106 async_exch_t *exch = async_exchange_begin(sess); 107 if (exch == NULL) 108 return ENOMEM; 109 const uint32_t packed = size | (mode << 16); 110 const int ret = async_req_4_0(exch, DEV_IFACE_ID(HW_RES_DEV_IFACE), 111 HW_RES_DMA_CHANNEL_SETUP, channel, pa, packed); 112 async_exchange_end(exch); 113 114 return ret; 84 115 } 85 116 -
uspace/lib/c/generic/device/hw_res_parsed.c
r5e4f22b r725d038 38 38 #include <errno.h> 39 39 40 static void hw_res_parse_add_irq(hw_res_list_parsed_t *out, hw_resource_t *res, 41 int flags) 40 static void hw_res_parse_add_dma_channel(hw_res_list_parsed_t *out, 41 const hw_resource_t *res, int flags) 42 { 43 assert(res); 44 assert((res->type == DMA_CHANNEL_8) || (res->type == DMA_CHANNEL_16)); 45 46 const unsigned channel = (res->type == DMA_CHANNEL_8) ? 47 res->res.dma_channel.dma8 : res->res.dma_channel.dma16; 48 const size_t count = out->dma_channels.count; 49 const int keep_duplicit = flags & HW_RES_KEEP_DUPLICIT; 50 51 if (!keep_duplicit) { 52 for (size_t i = 0; i < count; ++i) { 53 if (out->dma_channels.channels[i] == channel) 54 return; 55 } 56 } 57 58 out->dma_channels.channels[count] = channel; 59 ++out->dma_channels.count; 60 } 61 62 static void hw_res_parse_add_irq(hw_res_list_parsed_t *out, 63 const hw_resource_t *res, int flags) 42 64 { 43 65 assert(res && (res->type == INTERRUPT)); … … 59 81 60 82 static void hw_res_parse_add_io_range(hw_res_list_parsed_t *out, 61 hw_resource_t *res, int flags)83 const hw_resource_t *res, int flags) 62 84 { 63 85 assert(res && (res->type == IO_RANGE)); … … 90 112 91 113 static void hw_res_parse_add_mem_range(hw_res_list_parsed_t *out, 92 hw_resource_t *res, int flags)114 const hw_resource_t *res, int flags) 93 115 { 94 116 assert(res && (res->type == MEM_RANGE)); … … 132 154 * 133 155 */ 134 int hw_res_list_parse( hw_resource_list_t *hw_resources,156 int hw_res_list_parse(const hw_resource_list_t *hw_resources, 135 157 hw_res_list_parsed_t *out, int flags) 136 158 { … … 141 163 hw_res_list_parsed_clean(out); 142 164 143 out->irqs.irqs = malloc(res_count * sizeof(int)); 144 out->io_ranges.ranges = malloc(res_count * sizeof(io_range_t)); 145 out->mem_ranges.ranges = malloc(res_count * sizeof(mem_range_t)); 165 out->irqs.irqs = calloc(res_count, sizeof(int)); 166 out->dma_channels.channels = calloc(res_count, sizeof(int)); 167 out->io_ranges.ranges = calloc(res_count, sizeof(io_range_t)); 168 out->mem_ranges.ranges = calloc(res_count, sizeof(mem_range_t)); 169 if (!out->irqs.irqs || !out->dma_channels.channels || 170 !out->io_ranges.ranges || !out->mem_ranges.ranges) { 171 hw_res_list_parsed_clean(out); 172 return ENOMEM; 173 } 146 174 147 175 for (size_t i = 0; i < res_count; ++i) { 148 hw_resource_t *resource = &(hw_resources->resources[i]);149 176 const hw_resource_t *resource = &(hw_resources->resources[i]); 177 150 178 switch (resource->type) { 151 179 case INTERRUPT: … … 158 186 hw_res_parse_add_mem_range(out, resource, flags); 159 187 break; 188 case DMA_CHANNEL_8: 189 case DMA_CHANNEL_16: 190 hw_res_parse_add_dma_channel(out, resource, flags); 191 break; 160 192 default: 193 hw_res_list_parsed_clean(out); 161 194 return EINVAL; 162 195 } 163 196 } 164 197 165 198 return EOK; 166 199 }; -
uspace/lib/c/include/device/hw_res_parsed.h
r5e4f22b r725d038 139 139 } 140 140 141 extern int hw_res_list_parse(hw_resource_list_t *, hw_res_list_parsed_t *, int); 141 extern int hw_res_list_parse( 142 const hw_resource_list_t *, hw_res_list_parsed_t *, int); 142 143 extern int hw_res_get_list_parsed(async_sess_t *, hw_res_list_parsed_t *, int); 143 144 -
uspace/lib/c/include/ipc/dev_iface.h
r5e4f22b r725d038 36 36 typedef enum { 37 37 HW_RES_DEV_IFACE = 0, 38 39 /** Audio device mixer interface */ 40 AUDIO_MIXER_IFACE, 41 /** Audio device pcm buffer interface */ 42 AUDIO_PCM_BUFFER_IFACE, 43 38 44 /** Character device interface */ 39 45 CHAR_DEV_IFACE, -
uspace/lib/drv/Makefile
r5e4f22b r725d038 38 38 generic/log.c \ 39 39 generic/logbuf.c \ 40 generic/remote_audio_mixer.c \ 41 generic/remote_audio_pcm_buffer.c \ 40 42 generic/remote_hw_res.c \ 41 43 generic/remote_char_dev.c \ -
uspace/lib/drv/generic/dev_iface.c
r5e4f22b r725d038 46 46 #include "remote_usbhid.h" 47 47 #include "remote_pci.h" 48 #include "remote_audio_mixer.h" 49 #include "remote_audio_pcm_buffer.h" 48 50 49 static iface_dipatch_table_t remote_ifaces = {51 static const iface_dipatch_table_t remote_ifaces = { 50 52 .ifaces = { 51 &remote_hw_res_iface, 52 &remote_char_dev_iface, 53 &remote_nic_iface, 54 &remote_pci_iface, 55 &remote_usb_iface, 56 &remote_usbhc_iface, 57 &remote_usbhid_iface 53 [AUDIO_MIXER_IFACE] = &remote_audio_mixer_iface, 54 [AUDIO_PCM_BUFFER_IFACE] = &remote_audio_pcm_buffer_iface, 55 [HW_RES_DEV_IFACE] = &remote_hw_res_iface, 56 [CHAR_DEV_IFACE] = &remote_char_dev_iface, 57 [NIC_DEV_IFACE] = &remote_nic_iface, 58 [PCI_DEV_IFACE] = &remote_pci_iface, 59 [USB_DEV_IFACE] = &remote_usb_iface, 60 [USBHC_DEV_IFACE] = &remote_usbhc_iface, 61 [USBHID_DEV_IFACE] = &remote_usbhid_iface, 58 62 } 59 63 }; -
uspace/lib/drv/generic/remote_hw_res.c
r5e4f22b r725d038 1 1 /* 2 2 * Copyright (c) 2010 Lenka Trochtova 3 * Copyright (c) 2011 Jan Vesely 3 4 * All rights reserved. 4 5 * … … 43 44 static void remote_hw_res_enable_interrupt(ddf_fun_t *, void *, ipc_callid_t, 44 45 ipc_call_t *); 46 static void remote_hw_res_dma_channel_setup(ddf_fun_t *, void *, ipc_callid_t, 47 ipc_call_t *); 45 48 46 49 static remote_iface_func_ptr_t remote_hw_res_iface_ops [] = { 47 &remote_hw_res_get_resource_list, 48 &remote_hw_res_enable_interrupt 50 [HW_RES_GET_RESOURCE_LIST] = &remote_hw_res_get_resource_list, 51 [HW_RES_ENABLE_INTERRUPT] = &remote_hw_res_enable_interrupt, 52 [HW_RES_DMA_CHANNEL_SETUP] = &remote_hw_res_dma_channel_setup, 49 53 }; 50 54 … … 94 98 } 95 99 100 static void remote_hw_res_dma_channel_setup(ddf_fun_t *fun, void *ops, 101 ipc_callid_t callid, ipc_call_t *call) 102 { 103 hw_res_ops_t *hw_res_ops = ops; 104 105 if (hw_res_ops->dma_channel_setup == NULL) { 106 async_answer_0(callid, ENOTSUP); 107 return; 108 } 109 const unsigned channel = DEV_IPC_GET_ARG1(*call); 110 const uint32_t address = DEV_IPC_GET_ARG2(*call); 111 const uint16_t size = DEV_IPC_GET_ARG3(*call) & 0xffff; 112 const uint8_t mode = DEV_IPC_GET_ARG3(*call) >> 16; 113 114 const int ret = hw_res_ops->dma_channel_setup( 115 fun, channel, address, size, mode); 116 async_answer_0(callid, ret); 117 } 118 96 119 /** 97 120 * @}
Note:
See TracChangeset
for help on using the changeset viewer.