Changeset a35b458 in mainline for uspace/srv/bd
- Timestamp:
- 2018-03-02T20:10:49Z (8 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- f1380b7
- Parents:
- 3061bc1
- git-author:
- Jiří Zárevúcky <zarevucky.jiri@…> (2018-02-28 17:38:31)
- git-committer:
- Jiří Zárevúcky <zarevucky.jiri@…> (2018-03-02 20:10:49)
- Location:
- uspace/srv/bd
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/srv/bd/file_bd/file_bd.c
r3061bc1 ra35b458 157 157 task_retval(0); 158 158 async_manager(); 159 159 160 160 /* Not reached */ 161 161 return 0; … … 171 171 bd_srvs_init(&bd_srvs); 172 172 bd_srvs.ops = &file_bd_ops; 173 173 174 174 async_set_fallback_port_handler(file_bd_connection, NULL); 175 175 errno_t rc = loc_server_register(NAME); … … 178 178 return rc; 179 179 } 180 180 181 181 img = fopen(fname, "rb+"); 182 182 if (img == NULL) 183 183 return EINVAL; 184 184 185 185 if (fseek(img, 0, SEEK_END) != 0) { 186 186 fclose(img); 187 187 return EIO; 188 188 } 189 189 190 190 off64_t img_size = ftell(img); 191 191 if (img_size < 0) { … … 193 193 return EIO; 194 194 } 195 195 196 196 num_blocks = img_size / block_size; 197 197 198 198 fibril_mutex_initialize(&dev_lock); 199 199 200 200 return EOK; 201 201 } -
uspace/srv/bd/rd/rd.c
r3061bc1 ra35b458 119 119 return ELIMIT; 120 120 } 121 121 122 122 fibril_rwlock_read_lock(&rd_lock); 123 123 memcpy(buf, rd_addr + ba * block_size, min(block_size * cnt, size)); 124 124 fibril_rwlock_read_unlock(&rd_lock); 125 125 126 126 return EOK; 127 127 } … … 135 135 return ELIMIT; 136 136 } 137 137 138 138 fibril_rwlock_write_lock(&rd_lock); 139 139 memcpy(rd_addr + ba * block_size, buf, min(block_size * cnt, size)); 140 140 fibril_rwlock_write_unlock(&rd_lock); 141 141 142 142 return EOK; 143 143 } … … 152 152 return false; 153 153 } 154 154 155 155 sysarg_t addr_phys; 156 156 ret = sysinfo_get_value("rd.address.physical", &addr_phys); … … 159 159 return false; 160 160 } 161 161 162 162 rd_size = ALIGN_UP(size, block_size); 163 163 unsigned int flags = 164 164 AS_AREA_READ | AS_AREA_WRITE | AS_AREA_CACHEABLE; 165 165 166 166 ret = physmem_map(addr_phys, 167 167 ALIGN_UP(rd_size, PAGE_SIZE) >> PAGE_WIDTH, flags, &rd_addr); … … 170 170 return false; 171 171 } 172 172 173 173 printf("%s: Found RAM disk at %p, %" PRIun " bytes\n", NAME, 174 174 (void *) addr_phys, size); 175 175 176 176 bd_srvs_init(&bd_srvs); 177 177 bd_srvs.ops = &rd_bd_ops; 178 178 179 179 async_set_fallback_port_handler(rd_client_conn, NULL); 180 180 ret = loc_server_register(NAME); … … 183 183 return false; 184 184 } 185 185 186 186 service_id_t service_id; 187 187 ret = loc_service_register("bd/initrd", &service_id); … … 190 190 return false; 191 191 } 192 192 193 193 fibril_rwlock_initialize(&rd_lock); 194 194 195 195 return true; 196 196 } … … 213 213 { 214 214 printf("%s: HelenOS RAM disk server\n", NAME); 215 215 216 216 if (!rd_init()) 217 217 return -1; 218 218 219 219 printf("%s: Accepting connections\n", NAME); 220 220 async_manager(); 221 221 222 222 /* Never reached */ 223 223 return 0; -
uspace/srv/bd/sata_bd/sata_bd.c
r3061bc1 ra35b458 94 94 size_t count, i; 95 95 errno_t rc; 96 96 97 97 /* If device is SATA, add device to the disk array. */ 98 98 disk[disk_count].sess = ahci_get_sess(funh, &disk[disk_count].dev_name); 99 99 if(disk[disk_count].sess != NULL) { 100 100 101 101 ahci_get_sata_device_name(disk[disk_count].sess, 102 102 SATA_DEV_NAME_LENGTH, disk[disk_count].sata_dev_name); 103 103 104 104 ahci_get_block_size(disk[disk_count].sess, 105 105 &disk[disk_count].block_size); 106 106 107 107 ahci_get_num_blocks(disk[disk_count].sess, &disk[disk_count].blocks); 108 108 109 109 bd_srvs_init(&disk[disk_count].bds); 110 110 disk[disk_count].bds.ops = &sata_bd_ops; 111 111 disk[disk_count].bds.sarg = &disk[disk_count]; 112 112 113 113 printf("Device %s - %s , blocks: %lu, block_size: %lu\n", 114 114 disk[disk_count].dev_name, disk[disk_count].sata_dev_name, … … 118 118 ++disk_count; 119 119 } 120 120 121 121 /* search children */ 122 122 rc = devman_fun_get_child(funh, &devh); … … 152 152 devman_handle_t root_fun; 153 153 errno_t rc; 154 154 155 155 disk_count = 0; 156 156 … … 160 160 return EIO; 161 161 } 162 162 163 163 scan_device_tree(root_fun); 164 164 165 165 return EOK; 166 166 } … … 248 248 errno_t rc; 249 249 category_id_t disk_cat; 250 250 251 251 async_set_fallback_port_handler(sata_bd_connection, NULL); 252 252 rc = loc_server_register(NAME); … … 255 255 return rc; 256 256 } 257 257 258 258 rc = get_sata_disks(); 259 259 if (rc != EOK) {
Note:
See TracChangeset
for help on using the changeset viewer.