Changeset 984a9ba in mainline for uspace/lib/c/generic/bd_srv.c
- Timestamp:
- 2018-07-05T09:34:09Z (6 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- 63d46341
- Parents:
- 76f566d
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/lib/c/generic/bd_srv.c
r76f566d r984a9ba 43 43 #include <bd_srv.h> 44 44 45 static void bd_read_blocks_srv(bd_srv_t *srv, cap_call_handle_t chandle, 46 ipc_call_t *call) 45 static void bd_read_blocks_srv(bd_srv_t *srv, ipc_call_t *call) 47 46 { 48 47 aoff64_t ba; … … 51 50 size_t size; 52 51 errno_t rc; 53 cap_call_handle_t rcall_handle;54 52 55 53 ba = MERGE_LOUP32(IPC_GET_ARG1(*call), IPC_GET_ARG2(*call)); 56 54 cnt = IPC_GET_ARG3(*call); 57 55 58 if (!async_data_read_receive(&rcall_handle, &size)) { 59 async_answer_0(chandle, EINVAL); 56 ipc_call_t rcall; 57 if (!async_data_read_receive(&rcall, &size)) { 58 async_answer_0(call, EINVAL); 60 59 return; 61 60 } … … 63 62 buf = malloc(size); 64 63 if (buf == NULL) { 65 async_answer_0( rcall_handle, ENOMEM);66 async_answer_0(c handle, ENOMEM);64 async_answer_0(&rcall, ENOMEM); 65 async_answer_0(call, ENOMEM); 67 66 return; 68 67 } 69 68 70 69 if (srv->srvs->ops->read_blocks == NULL) { 71 async_answer_0( rcall_handle, ENOTSUP);72 async_answer_0(c handle, ENOTSUP);70 async_answer_0(&rcall, ENOTSUP); 71 async_answer_0(call, ENOTSUP); 73 72 free(buf); 74 73 return; … … 77 76 rc = srv->srvs->ops->read_blocks(srv, ba, cnt, buf, size); 78 77 if (rc != EOK) { 79 async_answer_0( rcall_handle, ENOMEM);80 async_answer_0(c handle, ENOMEM);81 free(buf); 82 return; 83 } 84 85 async_data_read_finalize( rcall_handle, buf, size);78 async_answer_0(&rcall, ENOMEM); 79 async_answer_0(call, ENOMEM); 80 free(buf); 81 return; 82 } 83 84 async_data_read_finalize(&rcall, buf, size); 86 85 87 86 free(buf); 88 async_answer_0(chandle, EOK); 89 } 90 91 static void bd_read_toc_srv(bd_srv_t *srv, cap_call_handle_t chandle, 92 ipc_call_t *call) 87 async_answer_0(call, EOK); 88 } 89 90 static void bd_read_toc_srv(bd_srv_t *srv, ipc_call_t *call) 93 91 { 94 92 uint8_t session; … … 96 94 size_t size; 97 95 errno_t rc; 98 cap_call_handle_t rcall_handle;99 96 100 97 session = IPC_GET_ARG1(*call); 101 98 102 if (!async_data_read_receive(&rcall_handle, &size)) { 103 async_answer_0(chandle, EINVAL); 99 ipc_call_t rcall; 100 if (!async_data_read_receive(&rcall, &size)) { 101 async_answer_0(call, EINVAL); 104 102 return; 105 103 } … … 107 105 buf = malloc(size); 108 106 if (buf == NULL) { 109 async_answer_0( rcall_handle, ENOMEM);110 async_answer_0(c handle, ENOMEM);107 async_answer_0(&rcall, ENOMEM); 108 async_answer_0(call, ENOMEM); 111 109 return; 112 110 } 113 111 114 112 if (srv->srvs->ops->read_toc == NULL) { 115 async_answer_0( rcall_handle, ENOTSUP);116 async_answer_0(c handle, ENOTSUP);113 async_answer_0(&rcall, ENOTSUP); 114 async_answer_0(call, ENOTSUP); 117 115 free(buf); 118 116 return; … … 121 119 rc = srv->srvs->ops->read_toc(srv, session, buf, size); 122 120 if (rc != EOK) { 123 async_answer_0( rcall_handle, ENOMEM);124 async_answer_0(c handle, ENOMEM);125 free(buf); 126 return; 127 } 128 129 async_data_read_finalize( rcall_handle, buf, size);121 async_answer_0(&rcall, ENOMEM); 122 async_answer_0(call, ENOMEM); 123 free(buf); 124 return; 125 } 126 127 async_data_read_finalize(&rcall, buf, size); 130 128 131 129 free(buf); 132 async_answer_0(chandle, EOK); 133 } 134 135 static void bd_sync_cache_srv(bd_srv_t *srv, cap_call_handle_t chandle, 136 ipc_call_t *call) 130 async_answer_0(call, EOK); 131 } 132 133 static void bd_sync_cache_srv(bd_srv_t *srv, ipc_call_t *call) 137 134 { 138 135 aoff64_t ba; … … 144 141 145 142 if (srv->srvs->ops->sync_cache == NULL) { 146 async_answer_0(c handle, ENOTSUP);143 async_answer_0(call, ENOTSUP); 147 144 return; 148 145 } 149 146 150 147 rc = srv->srvs->ops->sync_cache(srv, ba, cnt); 151 async_answer_0(chandle, rc); 152 } 153 154 static void bd_write_blocks_srv(bd_srv_t *srv, cap_call_handle_t chandle, 155 ipc_call_t *call) 148 async_answer_0(call, rc); 149 } 150 151 static void bd_write_blocks_srv(bd_srv_t *srv, ipc_call_t *call) 156 152 { 157 153 aoff64_t ba; … … 166 162 rc = async_data_write_accept(&data, false, 0, 0, 0, &size); 167 163 if (rc != EOK) { 168 async_answer_0(c handle, rc);164 async_answer_0(call, rc); 169 165 return; 170 166 } 171 167 172 168 if (srv->srvs->ops->write_blocks == NULL) { 173 async_answer_0(c handle, ENOTSUP);169 async_answer_0(call, ENOTSUP); 174 170 return; 175 171 } … … 177 173 rc = srv->srvs->ops->write_blocks(srv, ba, cnt, data, size); 178 174 free(data); 179 async_answer_0(chandle, rc); 180 } 181 182 static void bd_get_block_size_srv(bd_srv_t *srv, cap_call_handle_t chandle, 183 ipc_call_t *call) 175 async_answer_0(call, rc); 176 } 177 178 static void bd_get_block_size_srv(bd_srv_t *srv, ipc_call_t *call) 184 179 { 185 180 errno_t rc; … … 187 182 188 183 if (srv->srvs->ops->get_block_size == NULL) { 189 async_answer_0(c handle, ENOTSUP);184 async_answer_0(call, ENOTSUP); 190 185 return; 191 186 } 192 187 193 188 rc = srv->srvs->ops->get_block_size(srv, &block_size); 194 async_answer_1(chandle, rc, block_size); 195 } 196 197 static void bd_get_num_blocks_srv(bd_srv_t *srv, cap_call_handle_t chandle, 198 ipc_call_t *call) 189 async_answer_1(call, rc, block_size); 190 } 191 192 static void bd_get_num_blocks_srv(bd_srv_t *srv, ipc_call_t *call) 199 193 { 200 194 errno_t rc; … … 202 196 203 197 if (srv->srvs->ops->get_num_blocks == NULL) { 204 async_answer_0(c handle, ENOTSUP);198 async_answer_0(call, ENOTSUP); 205 199 return; 206 200 } 207 201 208 202 rc = srv->srvs->ops->get_num_blocks(srv, &num_blocks); 209 async_answer_2(c handle, rc, LOWER32(num_blocks), UPPER32(num_blocks));203 async_answer_2(call, rc, LOWER32(num_blocks), UPPER32(num_blocks)); 210 204 } 211 205 … … 228 222 } 229 223 230 errno_t bd_conn( cap_call_handle_t icall_handle,ipc_call_t *icall, bd_srvs_t *srvs)224 errno_t bd_conn(ipc_call_t *icall, bd_srvs_t *srvs) 231 225 { 232 226 bd_srv_t *srv; … … 234 228 235 229 /* Accept the connection */ 236 async_answer_0(icall _handle, EOK);230 async_answer_0(icall, EOK); 237 231 238 232 srv = bd_srv_create(srvs); … … 252 246 while (true) { 253 247 ipc_call_t call; 254 cap_call_handle_t chandle =async_get_call(&call);248 async_get_call(&call); 255 249 sysarg_t method = IPC_GET_IMETHOD(call); 256 250 257 251 if (!method) { 258 252 /* The other side has hung up */ 259 async_answer_0( chandle, EOK);253 async_answer_0(&call, EOK); 260 254 break; 261 255 } … … 263 257 switch (method) { 264 258 case BD_READ_BLOCKS: 265 bd_read_blocks_srv(srv, chandle,&call);259 bd_read_blocks_srv(srv, &call); 266 260 break; 267 261 case BD_READ_TOC: 268 bd_read_toc_srv(srv, chandle,&call);262 bd_read_toc_srv(srv, &call); 269 263 break; 270 264 case BD_SYNC_CACHE: 271 bd_sync_cache_srv(srv, chandle,&call);265 bd_sync_cache_srv(srv, &call); 272 266 break; 273 267 case BD_WRITE_BLOCKS: 274 bd_write_blocks_srv(srv, chandle,&call);268 bd_write_blocks_srv(srv, &call); 275 269 break; 276 270 case BD_GET_BLOCK_SIZE: 277 bd_get_block_size_srv(srv, chandle,&call);271 bd_get_block_size_srv(srv, &call); 278 272 break; 279 273 case BD_GET_NUM_BLOCKS: 280 bd_get_num_blocks_srv(srv, chandle,&call);274 bd_get_num_blocks_srv(srv, &call); 281 275 break; 282 276 default: 283 async_answer_0( chandle, EINVAL);277 async_answer_0(&call, EINVAL); 284 278 } 285 279 }
Note:
See TracChangeset
for help on using the changeset viewer.